Da.的博客

编程届老萌新

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

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

2019-07-10 20:27:05

阅读数 28

评论数 0

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

Lock和Condition 再造管程的理由: 能够响应中断。synchronized 的问题是,持有锁 A 后,如果尝试获取锁 B 失败,那么线程就进入阻塞状态,一旦发生死锁,就没有任何机会来唤醒阻塞的线程。但如果阻塞状态的线程能够响应中断信号,也就是说当我们给阻塞的线程发送中断信号的时候,能...

2019-06-28 19:07:52

阅读数 29

评论数 0

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

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

2019-06-25 14:16:19

阅读数 71

评论数 0

利用IDEA合并git分支

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

2019-06-18 15:29:37

阅读数 83

评论数 0

(笔记整合)回溯算法

一、如何理解“回溯算法”? 在我们的一生中,会遇到很多重要的岔路口。在岔路口上,每个选择都会影响我们今后的人生。有的人在每个岔路口都能做出最正确的选择,最后生活、事业都达到了一个很高的高度;而有的人一路选错,最后碌碌无为。如果人生可以量化,那如何才能在岔路口做出最正确的选择,让自己的人生“最优”呢...

2019-05-29 11:49:29

阅读数 47

评论数 0

(笔记整合)分治算法

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

2019-05-28 19:29:53

阅读数 14

评论数 0

(笔记整合)贪心算法

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

2019-05-28 17:04:37

阅读数 13

评论数 0

(笔记整合)Trie树

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

2019-05-28 15:02:53

阅读数 13

评论数 0

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

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

2019-05-28 10:56:17

阅读数 11

评论数 0

(笔记整合)Java基础四

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

2019-05-09 11:40:15

阅读数 36

评论数 0

(笔记整合)Java基础三

二十一、Java并发类库提供的线程池有哪几种? 分别有什么特点? 典型回答 通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于不同的ExecutorService类型或者不同的初始参数。 Executors目前提供了5种不同的线程池创建配置: ...

2019-05-06 16:25:26

阅读数 64

评论数 0

(笔记整合)Java基础二

十一、Java提供了哪些IO方式? NIO如何实现多路复用? 典型回答 Java IO方式有很多种,基于不同的IO抽象模型和交互方式,可以进行简单区分。 首先,传统的java.io包,它基于流模型实现,提供了我们最熟知的一些IO功能,比如File抽象、输入输出流等。交互方式是同步、阻塞的方式,也就...

2019-04-22 16:00:27

阅读数 22

评论数 0

(笔记整合)Java基础一

一、谈谈你对Java平台的理解 Java特性: 面向对象(封装,继承,多态) 平台无关性(JVM运行.class文件) 语言(泛型,Lambda) 类库(集合,并发,网络,IO/NIO) JRE(Java运行环境,JVM,类库) JDK(Java开发工具,包括JRE,javac,诊断...

2019-04-13 14:04:54

阅读数 103

评论数 0

(笔记整合)堆

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

2019-04-09 10:57:42

阅读数 25

评论数 0

(笔记整合)红黑树

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

2019-04-08 15:32:14

阅读数 41

评论数 0

(笔记整合)二叉树

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

2019-04-04 17:42:08

阅读数 76

评论数 0

(笔记整合)哈希算法

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

2019-04-03 19:31:22

阅读数 45

评论数 0

(笔记整合)散列表

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

2019-04-03 16:20:45

阅读数 21

评论数 0

(笔记整合)跳表

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

2019-04-01 17:12:48

阅读数 30

评论数 0

(笔记整合)二分法查找

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

2019-03-30 16:50:04

阅读数 47

评论数 0

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