自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Da.的博客

编程届老萌新

  • 博客(159)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 JVM(三)

字段访问相关优化1.即时编译器将沿着控制流缓存字段存储、读取的值,并在接下来的字段读取操作时直接使用该缓存值。2.这要求生成缓存值的访问以及使用缓存值的读取之间没有方法调用、内存屏障,或者其他可能存储该字段的节点。3.即时编译器还会优化冗余的字段存储操作。如果一个字段的两次存储之间没有对该字段的读取操作、方法调用以及内存屏障,那么即时编译器可以将第一个冗余的存储操作给消除掉。4.此外,我还...

2019-10-07 10:57:28 312 1

原创 JVM(二)

Java内存模型1.Java 内存模型通过定义了一系列的 happens-before 操作,让应用程序开发者能够轻易地表达不同线程的操作之间的内存可见性。2.在遵守 Java 内存模型的前提下,即时编译器以及底层体系架构能够调整内存访问操作,以达到性能优化的效果。如果开发者没有正确地利用 happens-before 规则,那么将可能导致数据竞争。3.Java 内存模型是通过内存屏障来禁止...

2019-10-04 23:41:26 243

原创 JVM(一)

2019-09-20 16:38:53 318

原创 (笔记整合)Java并发编程三

Immutability模式解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。快速实现具备不可变性的类实现一个具...

2019-07-10 20:27:05 298

原创 (笔记整合)Java并发编程二

Lock和Condition再造管程的理由:能够响应中断。synchronized 的问题是,持有锁 A 后,如果尝试获取锁 B 失败,那么线程就进入阻塞状态,一旦发生死锁,就没有任何机会来唤醒阻塞的线程。但如果阻塞状态的线程能够响应中断信号,也就是说当我们给阻塞的线程发送中断信号的时候,能够唤醒它,那它就有机会释放曾经持有的锁 A。这样就破坏了不可抢占条件了。支持超时。如果线程在一段时间...

2019-06-28 19:07:52 243

原创 (笔记整合)Java并发编程一

其实并发编程可以总结为三个核心问题:分工、同步、互斥所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共享资源。Java SDK 并发包很大部分内容都是按照这三个维度组织的,例如 Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典型的同步方式,而可重入锁则是一种互斥手段。如何才能学好并发编程?并发...

2019-06-25 14:16:19 593

原创 利用IDEA合并git分支

首先在命令终端里面执行git pull拉取最新分支信息。然后切换到该分支。搜索需要合并过来的分支,然后选merge into current。合并后解决完冲突提交就OK了。如果提交被拒绝了再拉一下代码看看是不是有人在解决冲突期间又提交的新的代码。...

2019-06-18 15:29:37 2822

原创 (笔记整合)回溯算法

一、如何理解“回溯算法”?在我们的一生中,会遇到很多重要的岔路口。在岔路口上,每个选择都会影响我们今后的人生。有的人在每个岔路口都能做出最正确的选择,最后生活、事业都达到了一个很高的高度;而有的人一路选错,最后碌碌无为。如果人生可以量化,那如何才能在岔路口做出最正确的选择,让自己的人生“最优”呢?可以借助前面学过的贪心算法,在每次面对岔路口的时候,都做出看起来最优的选择,期望这一组选择可以使得...

2019-05-29 11:49:29 426

原创 (笔记整合)分治算法

一、如何理解分治算法?分治算法(divide and conquer)的核心思想其实就是四个字,分而治之,也就是将原问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。这个定义看起来有点类似递归的定义。关于分治和递归的区别,在排序(下)的时候讲过,分治算法是一种处理问题的思想,递归是一种编程技巧。实际上,分治算法一般都比较适合用递归来...

2019-05-28 19:29:53 221

原创 (笔记整合)贪心算法

一、如何理解“贪心算法”?假设有一个可以容纳100kg物品的背包,可以装各种物品。有以下5种豆子,每种豆子的总量和总价值都各不相同。为了让背包中所装物品的总价值最大,如何选择在背包中装哪些豆子?每种豆子又该装多少呢?只要先算一算每个物品的单价,按照单价由高到低依次来装就好了。单价从高到低排列,依次是:黑豆、绿豆、红豆、青豆、黄豆,所以可以往背包里装20kg黑豆、30kg绿豆、50kg红豆。...

2019-05-28 17:04:37 256

原创 (笔记整合)Trie树

一、什么是“Trie树”?Trie树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。Trie树到底长什么样子?比如有6个字符串,它们分别是:how,hi,her,hello,so,see。希望在里面多次查找某个字符串是否存在。如果每次查找,都是拿要查找的字符串跟这6个字符串依次进行字符串匹配,那效率就比较低...

2019-05-28 15:02:53 168

原创 (笔记整合)字符串匹配基础

一、BF算法?BF算法中的BF是Brute Force的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。从名字可以看出,这种算法的字符串匹配方式很“暴力”,当然也就会比较简单、好懂,但相应的性能也不高。在字符串A中查找字符串B,那字符串A就是主串,字符串B就是模式串。把主串的长度记作n,模式串的长度记作m。因为是在主串中查找模式串,所以n>m。作为最简单、最暴力的字符串匹配算法,BF算法...

2019-05-28 10:56:17 214

原创 (笔记整合)Java基础四

三十一、Java应用开发中的注入攻击典型回答注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果。下面是几种主要的注入式攻击途径,原则上提供动态执行能力的语言特性,都需要提防发生注入攻击的可能。最常见的SQL注入攻击。一个典型的场景就是Web系统的用户登录功能,根据用户输...

2019-05-09 11:40:15 325

原创 (笔记整合)Java基础三

二十一、Java并发类库提供的线程池有哪几种? 分别有什么特点?典型回答通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于不同的ExecutorService类型或者不同的初始参数。Executors目前提供了5种不同的线程池创建配置:newCachedThreadPool(),它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:...

2019-05-06 16:25:26 321

原创 (笔记整合)Java基础二

十一、Java提供了哪些IO方式? NIO如何实现多路复用?典型回答Java IO方式有很多种,基于不同的IO抽象模型和交互方式,可以进行简单区分。首先,传统的java.io包,它基于流模型实现,提供了我们最熟知的一些IO功能,比如File抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的...

2019-04-22 16:00:27 276

原创 (笔记整合)Java基础一

一、谈谈你对Java平台的理解Java特性:面向对象(封装,继承,多态)平台无关性(JVM运行.class文件)语言(泛型,Lambda)类库(集合,并发,网络,IO/NIO)JRE(Java运行环境,JVM,类库)JDK(Java开发工具,包括JRE,javac,诊断工具)Java是解析运行吗?不正确!1.Java源代码经过Javac编译成.class文件2. .class...

2019-04-13 14:04:54 461

原创 (笔记整合)堆

一、如何理解“堆”?堆是一种特殊的树。只要满足这两点,它就是一个堆。堆是一个完全二叉树;堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。对于每个节点的值都大于等于子树中每个节点值的堆,我们叫作“大顶堆”。对于每个节点的值都小于等于子树中每个节点值的堆,我们叫作“小顶堆”。其中第111个和第222个是大顶堆,第333个是小顶堆,第444个不是堆。二、如何实现一个...

2019-04-09 10:57:42 352

原创 (笔记整合)红黑树

一、什么是“平衡二叉查找树”?平衡二叉树的严格定义是这样的:二叉树中任意一个节点的左右子树的高度相差不能大于1。从这个定义来看,我们讲的完全二叉树、满二叉树其实都是平衡二叉树,但是非完全二叉树也有可能是平衡二叉树。但是很多平衡二叉查找树其实并没有严格符合上面的定义,我们学习数据结构和算法是为了应用到实际的开发中的,所以,没必去死抠定义。对于平衡二叉查找树这个概念,我们要从这个数据结构的由来,...

2019-04-08 15:32:14 234

原创 (笔记整合)二叉树

一、树1.树的常用概念根节点、叶子节点、父节点、子节点、兄弟节点,还有节点的高度、深度以及层数,树的高度。2.概念解释节点:树中的每个元素称为节点父子关系:相邻两节点的连线,称为父子关系根节点:没有父节点的节点叶子节点:没有子节点的节点父节点:指向子节点的节点子节点:被父节点指向的节点兄弟节点:具有相同父节点的多个节点称为兄弟节点关系节点的高度:节点到叶子节点的最长路径所包含...

2019-04-04 17:42:08 333

转载 (笔记整合)哈希算法

一、什么是哈希算法?1.定义将任意长度的二进制值串映射成固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。2.如何设计一个优秀的哈希算法?①单向哈希:从哈希值不能反向推导出哈希值(所以哈希算法也叫单向哈希算法)。②篡改无效:对输入敏感,哪怕原始数据只修改一个Bit,最后得到的哈希值也大不相同。③散列冲突:散列冲突的概率要很小,对于...

2019-04-03 19:31:22 280

转载 (笔记整合)散列表

一、散列表的由来?1.散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性。2.需要存储在散列表中的数据我们称为键,将键转化为数组下标的方法称为散列函数,散列函数的计算结果称为散列值。3.将数据存储在散列值对应的数组下标位置。二、如何设计散列函数?总结3点设计散列函数的基本要求:1.散列函数计算得到的散列值是一个非负整数。2.若key...

2019-04-03 16:20:45 316

转载 (笔记整合)跳表

一、什么是跳表?为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。如下图所示,其中down表示down指针,指向下一级节点。以此类推,对于节点数为n的链表,大约可以建立log2n-1级索引。像这种为链表建立多级索引的数据结构就称为跳表。二、跳表的时间复杂度?1.计算跳表的高度如果链表有n个节点,每2个节点抽取抽出一个节点作为上一级索...

2019-04-01 17:12:48 192

转载 (笔记整合)二分法查找

一、什么是二分查找?二分查找针对的是一个有序的数据集合,每次通过跟区间中间的元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0。二、时间复杂度分析?1.时间复杂度假设数据大小是n,每次查找后数据都会缩小为原来的一半,最坏的情况下,直到查找区间被缩小为空,才停止。所以,每次查找的数据大小是:n,n/2,n/4,…,n/(2k),…,这是一个等比数列。当n/(2...

2019-03-30 16:50:04 576

转载 (笔记整合)排序优化

一、如何选择合适的排序算法?1.排序算法一览表2.为什选择快速排序?1)线性排序时间复杂度很低但使用场景特殊,如果要写一个通用排序函数,不能选择线性排序。2)为了兼顾任意规模数据的排序,一般会首选时间复杂度为O(nlogn)的排序算法来实现排序函数。3)同为O(nlogn)的快排和归并排序相比,归并排序不是原地排序算法,所以最优的选择是快排。二、如何优化快速排序?导致快排时间复杂度...

2019-03-28 15:44:21 121

转载 (笔记整合)归并排序、快速排序

一、分治思想1.分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的子问题来解决,小的子问题解决了,大问题也就解决了。2.分治与递归的区别:分治算法一般都用递归来实现的。分治是一种解决问题的处理思想,递归是一种编程技巧。二、归并排序1.算法原理先把数组从中间分成前后两部分,然后对前后两部分分别进行排序,再将排序好的两部分合并到一起,这样整个数组就有序了。这就是归并排序的核心思...

2019-03-25 16:22:14 317

转载 (笔记整合)冒泡排序、插入排序、选择排序

一、排序方法与复杂度归类1.几种最经典、最常用的排序方法:冒泡排序、插入排序、选择排序、快速排序、归并排序、计数排序、基数排序、桶排序。2.复杂度归类冒泡排序、插入排序、选择排序 O(n2)快速排序、归并排序 O(nlogn)计数排序、基数排序、桶排序 O(n)二、如何分析一个“排序算法”?1.算法的执行效率(1) 最好、最坏、平均情况时间复杂度。(2) 时间复杂度的系数、常数和...

2019-03-15 16:46:16 248

转载 (笔记整合)递归

一、什么是递归?1.递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。2.方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。3.基本上,所有的递归问题都可以用递推公式来表示,比如f(n) = f(n-1) + 1;f(n) = f(n-1) + f(n-2);f(n)=n*f(n-1);二、为什么使用递归...

2019-03-15 11:19:15 142

转载 (笔记整合)队列

一、什么是队列?1.先进者先出,这就是典型的“队列”结构。2.支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。3.所以,和栈一样,队列也是一种操作受限的线性表。二、如何实现队列?1.队列APIpublic interface Queue<T> { public void enqueue(T item); //入队 pub...

2019-03-14 20:52:10 163

转载 (笔记整合)栈

一、什么是栈?1.后进者先出,先进者后出,这就是典型的“栈”结构。2.从栈的操作特性来看,是一种“操作受限”的线性表,只允许在端插入和删除数据。二、为什么需要栈?1.栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现。2.任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引发错误操作的风险。3.所以,当某个数据集合只涉及在某端...

2019-03-13 20:30:20 124

转载 (转)java字符串的替换replace、replaceAll、replaceFirst的区别

String的replaceAll跟replaceFirst用到了正则表达式!不多解释,看代码:String s = "my.test.txt";System.out.println(s.replace(".", "#"));System.out.println(s.replaceAll(".", "#"));System.out.println(s.replaceFirst(".&quo

2019-03-05 19:44:31 124

转载 (笔记整合)链表

一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。二、为什么使用链表?即链表的特点1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(...

2019-03-04 22:18:38 150

转载 (笔记整合)数组

1. 数组如何实现随机访问1) 数组是一种线性数据结构,用连续的存储空间存储相同类型数据I) 线性表:数组、链表、队列、栈 非线性表:树 图II) 连续的内存空间、相同的数据,所以数组可以随机访问,但对数组进行删除插入,为了保证数组的连续性,就要做大量的数据搬移工作a) 数组如何实现下标随机访问。引入数组再内存种的分配图,得出寻址公式b) 纠正数组和链表的错误认识。数组的查找操作时...

2019-03-02 11:54:44 162

转载 (笔记整合)复杂度分析

一、什么是复杂度分析?1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。4.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。二、为什么要进行复杂度分析?1.和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高...

2019-02-28 17:41:03 238

原创 (笔记整合)数据结构与算法学习

一、是什么:数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用再特定的数据结构上的。二、学什么:1 效率和资源消耗的度量衡–复杂度分析。2 最常用、最基础的20个数据结构与算法,学习他们的:“来历”、“特点”、“适合解决什么问题”和“实际的应用场景”。常用数据结构:数组、链表、栈、队列、散列表、二叉树‘、堆、跳表、图、Tire树...

2019-02-28 17:40:30 741

原创 LeetCode自己做的题目记录3

989. 数组形式的整数加法class Solution { public List<Integer> addToArrayForm(int[] A, int K) { List<Integer&

2019-02-15 14:32:14 246

原创 LeetCode自己做的题目记录2

421. 数组中两个数的最大异或值class Solution { public int findMaximumXOR(int[] nums) { int max = 0; for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.lengt...

2019-01-19 15:20:26 862

原创 LeetCode自己做的题目记录

1. 两数之和class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0;i<nums.length;i++){ for(int j=0;j&

2018-12-09 19:46:13 5542

原创 Springboot集测拦截方法自定义返回数据

有些方法只能线上测试,但是本地调试的话为了不修改那些方法,做个代理拦截那些方法得到正确的结果pom文件:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins...

2018-12-03 11:45:46 2194

原创 SpringBoot整合PowerMockito

PowerMockito可以用来mock静态方法目录结构:pom文件:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...

2018-11-08 19:52:55 7415

原创 JAVA采坑与优化笔记

1.不应该只是为了测试而新增setter方法,实在无法依赖注入可以在测试中使用如下工具类:import org.springframework.test.util.ReflectionTestUtils;ReflectionTestUtils.setField(targetObject, "beanName&

2018-11-03 15:17:09 1089

基于webmagic的网络爬虫入门demo

基于webmagic的网络爬虫入门demo 希望对大家有所帮助

2018-01-13

java基于jsoup+mongodb的简单爬虫入门程序

java基于jsoup+mongodb的简单爬虫入门程序,简单易懂,希望能给大家提供帮助

2018-01-07

mongodb-linux-x86_64-3.3.6.tgz

mongodb-linux-x86_64-3.3.6.tgz ,有需要的小伙伴可以下载

2017-12-31

jdk1.8可用的dubbo-admin-2.5.4.rar

jdk1.8可用的dubbo-admin-2.5.4.rar,jdk1.8可用的dubbo-admin-2.5.4.rar

2017-09-28

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除