![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 83
下一秒,待续
下一秒
展开
-
Java锁之CountDownLatch、Atomic源码解析
1.CountDownLatch1.1整体架构一个线程或多个线程等待所有线程运行完毕,在继续执行 sync 是一个同步器,是 CountDownLatch 的内部类实现private static final class Sync extends AbstractQueuedSynchronizer {...}1.2await方法 public void await...原创 2019-11-23 23:29:12 · 250 阅读 · 0 评论 -
Java锁之ReentrantLock源码解析
目录1.ReentrantLock1.1整体结构1.2ReentrantLock 构造器1.3释放锁的源码分析1.4公平锁源码分析——FairSync类1.5非公平锁源码解析——NonfairSync类1.6加锁和尝试加锁——ReentrantLock类1.ReentrantLock1.1整体结构可重入锁针对同一个线程可以对同一个对象重复获取锁;支持公平和非...原创 2019-11-23 20:35:50 · 205 阅读 · 0 评论 -
Java线程之Thread、Future、FutureTask源码解析
目录1.Thread1.1start方法源码解析1.2初始化源码分析2.Future2.1基本架构3.FutureTask3.1整体架构3.2初始化源码解析3.3get源码解析1.Thread1.1start方法源码解析// 创建一个新的线程public synchronized void start() { // 如果没有初始化,抛异常...原创 2019-11-20 23:16:41 · 1003 阅读 · 0 评论 -
Java队列之ArrayBlockingQueue源码解析
目录1.ArrayBlockingQueue1.1整体架构1.2初始化源码解析1.3新增数据源码解析1.4拿数据源码解析1.5删除数据1.ArrayBlockingQueue1.1整体架构有界的阻塞队列,容量一旦创建,就无法进行修改 队列满时,往队列中 put 数据会被阻塞,队列空时,往队列中拿数据也会被阻塞。// 队列存放在 object 的数组里面/...原创 2019-11-20 15:12:37 · 125 阅读 · 0 评论 -
Java队列之DelayQueue源码解析
目录1.DelayQueue1.1整体结构1.2放数据1.3拿数据1.DelayQueue1.1整体结构延迟执行,并且可以设置延迟多久之后执行 队列中元素将在过期时被执行,越靠近队头,越早过期 底层使用了优先级队列来实现,复用组合了PriorityQueue(策略者模式),让先过期的元素先执行//队列的元素必须为Delayed本身或者子类public clas...原创 2019-11-20 11:34:20 · 214 阅读 · 0 评论 -
Java队列之SynchronousQueue源码解析
目录1.SynchronousQueue1.1整体架构1.2非公平的堆栈1.2.1堆栈结构1.3公平的队列1.3.1队列结构1.SynchronousQueue1.1整体架构本身没有容量的大小,当put的数据被take消费/take等待put操作放入数据,完成后才可以返回 一种是先入先出的结构,一种是先入后出的结构 // 堆栈和队列共同的接口 ...原创 2019-11-20 09:24:15 · 250 阅读 · 0 评论 -
Java队列之LinkedBlockingQueue源码解析
目录1.LinkedBlockingQueue1.1整体架构1.2初始化源码解析1.3阻塞新增源码解析1.4阻塞删除源码分析1.5查看元素源码分析1.LinkedBlockingQueue1.1整体架构主要实现了BlockingQueue和Queue接口 Queue接口包含了:遇到队列满或空的时候,抛异常,如 add、remove、element;遇到队...原创 2019-11-20 00:26:53 · 150 阅读 · 0 评论 -
Java并发集合之ConcurrentHashMap源码解析
目录1.ConcurrentHashMap1.1整体框架1.2put方法源码解析1.3数组初始化时的源码解析1.4扩容的源码分析1.5get方法源码解析1.ConcurrentHashMap1.1整体框架HashTable是对实例方法进行加锁,会锁住整个实例对象, 1.7中ConcurrentHashMap使用了分段锁,对每个段进行加锁,降低了锁的粒度 1....原创 2019-11-19 21:09:39 · 211 阅读 · 0 评论 -
Java并发集合之CopyOnWriteArrayList源码解析
目录1.CopyOnWriteArrayList1.1整体架构1.2新增方法源码分析1.3删除方法的源码分析1.4迭代方法分析1.CopyOnWriteArrayList1.1整体架构通过锁+数组拷贝+volatile关键字保证了线程安全 每次操作都会拷贝一份数组,然后在新数组上进行操作,操作成功后在赋值回去//一旦数组被改变就可以知道private tra...原创 2019-11-19 17:47:13 · 195 阅读 · 0 评论 -
Java集合之HashSet和TreeSet源码解析
目录1.HashSet1.1HashSet整体架构1.2初始化源码解析1.3增加源码解析2.TreeSet2.1TreeSet整体架构2.2增加源码解析2.3迭代器方法1.HashSet1.1HashSet整体架构底层实现基于HashMap,使用了组合的方式把HashMap当成一个实例变量来实现// 把 HashMap 组合进来,key 是 Hash...原创 2019-11-19 00:42:08 · 163 阅读 · 0 评论 -
Java集合之LinkedHashMap和TreeMap源码解析
目录1.TreeMap1.1TreeMap整体架构1.2新增节点的源码解析2.LinkedHashMap2.1整体结构2.1按照插入顺序访问2.2访问最少删除原则(LRU)1.TreeMap1.1TreeMap整体架构底层数据结构使用了红黑树来进行实现,是一个有序且基本平衡的二叉排序树,可以维护节点的大小//比较器,如果外部有传进来 Comparator...原创 2019-11-18 18:51:14 · 269 阅读 · 0 评论 -
Java集合之HashMap源码解析
目录1.HashMap1.1整体架构1.2新增源码解析1.HashMap1.1整体架构底层使用了数组+链表+红黑树的数据结构,当链表长度大于等于8会转换为红黑树,当链表长度小于等于6红黑树会转化为链表 JDK1.7没有引进红黑树,单纯的使用链表解决冲突,在1.8版本中引进了红黑树并且实现了转换和退化操作 由于引进了红黑树所以,key的对象,必须正确的实现了Compare...原创 2019-11-18 15:14:20 · 106 阅读 · 0 评论 -
Java集合之LinkedList源码解析
目录1.LinkedList1.1整体架构1.2追加源码分析1.3节点删除1.4节点查询2.迭代器ListIterator2.1整体架构2.2三个方法源码解析1.LinkedList1.1整体架构底层使用了双向链表来进行实现,有一个头节点,尾节点和一个元素个数size 这里的头节点和尾节点不是哨兵的概念,只是单纯的指针指向概念!!!public c...原创 2019-11-18 01:45:32 · 180 阅读 · 0 评论 -
Java集合之ArrayList源码解析
目录1.ArrayList1.1整体结构1.2初始化源码解析1.3新增和扩容源码解析1.4删除源码分析2.迭代器2.1总体结构2.2三个方法源码解析1.ArrayList1.1整体结构初始化大小,默认是10;第一次add的时候扩容的值 size表示当前数组大小 modCount表示当前版本号1.2初始化源码解析private static f...原创 2019-11-17 15:37:19 · 231 阅读 · 0 评论 -
算法之海量数据处理
1.散列分治或MapReduce这种题目很多,大多都相似一通,针对数据特别多的情况下,一般可以选择MapReduce或者散列分治这两种方式其实思想很相似的只有些许不同;针对数据量不大的情况下可是直接加载进内存来的可以使用Trie树,红黑树这一套,hash表都可以使用。寻找共同的URL给定两个a和b文件,各存放50亿个URL,每个URL占64字节,内存限制4GB,请找出a和b文件中共同的...原创 2019-10-20 00:26:41 · 222 阅读 · 0 评论 -
算法之栈和队列
1.设计一个有getmin功能的栈思路:创建一个栈叫minstack,维护一个从栈底大栈顶的递减栈。ps:压栈时原栈正常压入,在minstack栈中如果value大于栈就不压入,如果小于等于就压栈。这样就维护了一个从底到顶的降序序列ps:出栈时原栈正常出栈,在minstack栈中如果出栈的元素大于栈顶就不出,如果等于栈顶元素就出栈,是不可能小于栈顶元素的因为栈顶就放的是最小元素。2...原创 2019-05-31 23:43:02 · 404 阅读 · 0 评论 -
算法之其他题型总结
0.输入格式处理Python3 n = int(input()) for _ in range(n): # ...1.如何判断一个自然数是否是某个数的平方思路一:后n/2个数肯定不是平方,只需要对前一半的数进行判断即可。思路二:使用二分查找,1-n有序进行查找即可。2.如何判断一个数是否为2的n次方思路一:对每一位进行判断即可。思路二...原创 2019-06-02 19:02:18 · 337 阅读 · 0 评论 -
LeetCode的SQL面试题
1.编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供person 的以下信息:FirstName, LastName, City, State表1:Person+-------------+---------+| 列名 | 类型 |+-------------+---------+| PersonId ...原创 2019-05-12 00:13:35 · 3248 阅读 · 0 评论 -
算法之递归与动态规划
1.最大连续乘积子数组(数组中的元素有正数有负数)解法一:暴力法两个for循环确定边界,可以找出所有数组的乘积然后在进行比较。时间O(N的平方)解法二:动态规划设f(i)是以第i个元素结尾的最大连续子数组。由于有负数的存在,那么f(i-1)就需要维护一个最大值和一个最小值(为负数),只有这样才能求出f(i)的最大。时间O(N),空间也可以常量,因为每一次的计算只需要用到上一次的信息...原创 2019-05-31 13:35:12 · 810 阅读 · 4 评论 -
算法之查找题型总结
1.有序数组的查找二分法:每次循环找middle元素与查找元素比较,确定元素在左半边还是在右半边。要注意编程的准确性,ringht=n-1,while的判断条件就为left<=right,而且更新right时right = middle-1,left=middle+1。2.行列递增矩阵的查找解法一:分治法在对角线上进行二分,如果在某两个数之间那么可以抛弃左上和右下两个矩阵,而...原创 2019-05-31 23:43:16 · 212 阅读 · 0 评论 -
读(程序员的数学 2 概率统计)-记录
目录:第一章:概率的定义(随机变量,概率分布)第二章:多个随机变量之间的关系(联合概率,边缘概率,独立性,条件概率以及在贝叶斯上的应用)第三章:离散值的概率分布(期望,方差,标准差,大数定理)第四章:连续值的概率分布(概率密度函数,概率分布函数以及随机变量的变换,联合概率分布函数,高斯分布以及中心极限定理)第五章:协方差矩阵、多元正态分布与椭圆(协方差和相关...原创 2019-05-01 16:33:27 · 1570 阅读 · 0 评论 -
12306的(再次破解)从查票到购票
建议各位:使用charls抓包或者fidder抓包,不然有些信息抓不到,以至于操作无法进行,可能会陷入沉思与迷茫状态!0.介绍以前大一的时候,做过12306的购票也成功了,也发了博客,但那时经验甚少也没有写博客经验而且还是第一篇博客,确实没有做好,但是现在在准备面试项目,又重新把12306这个项目捡起来了,发现确实更新不少,单就cookie登陆那块就很坑,还有在以前最后的购票之后又加了几步...原创 2018-05-03 12:49:09 · 4454 阅读 · 0 评论 -
读(程序员的数学 3 线性代数)-记录
目录第一章:用空间的语言表达向量、矩阵和行列式(向量,矩阵性质以及运算,行列式性质以及运算)第二章:秩、逆矩阵、线性方程组(溯因原理)(初等行变换解线性方程组、逆矩阵、秩,以及逆矩阵和相关不相关问题)第三章:特征值、对角化(对角化介绍,求解特征值、特征向量、可逆的特征矩阵)第一章:用空间的语言表达向量、矩阵和行列式1.向量列向量:向量的运算:(加法和乘法...原创 2019-05-03 10:18:36 · 1884 阅读 · 3 评论 -
机器学习面试(一)
1.甚么叫极大似然估计?思想:让样本出现的概率最大化。2.判别式模型和生成式模型?生成式模型先需要对联合概率分布进行建模,然后计算后验概率来得到模型。判别式模型直接用条件概率分布或者决策函数作为模型。生成式模型:朴素贝叶斯、、贝叶斯网络、混合高斯模型、K-MEANS、隐马尔可夫模型、马尔科夫随机场 、主题模型(LDA & PLSA)判别式模型:线性回归、逻辑回归模型...原创 2019-03-05 22:49:26 · 1817 阅读 · 0 评论 -
Java面试总结
1.为甚麽java是与平台无关的语言?java虚拟机(jvm)可以执行java的字节码文件(Unicode码),只要一经编译并且平台有jvm(运行环境),就可以运行。底层的工作都会交给jvm来进行!2.JDK 和JRE 的区别是什么?jre是java程序的运行环境,它包括jvm和一些类库。jdk是java程序的开发环境,它既包含开发工具也包含jre(运行环境)。3.方法的静态绑...原创 2019-03-05 18:40:22 · 142 阅读 · 0 评论 -
算法之树题型总结
2.最近公共祖先给定两个节点,查找这两个节点的最近公共祖先。是二叉查找树:划分区间,当前节点的值会落在区间的中间还是左边还是右边,进行后序遍历即可。不是二叉查找树但是二叉树且节点有父节点:转化成两条链表找第一个公共节点。不是二叉查找树但是二叉树且节点无父节点:递归的找到两个节点找到后,返回目标节点,如果第一次该节点的左右子节点返回目标节点的话,那么这个节点就是最近公共祖先。是多...原创 2019-05-30 20:19:30 · 505 阅读 · 1 评论 -
算法之数组题型总结
1.寻找最小的K个数解法一:全部排序使用快排,可以O(1)找到前k个数。时间O(NlogN)解法二:部分排序先拿到前k个数,然后找到这K个数中最大的那个,遍历剩余的n-k个数与元素比较;如果k个数中的元素大于遍历元素就替换,然后更新k各元素中最大值;如果小于等于遍历元素向后走。时间O(kN)!还有一种k次冒泡排序/选择排序,因为这两个排序每次都可以确定一个当前最小元素。时间O(...原创 2019-05-27 18:56:01 · 399 阅读 · 1 评论 -
算法之链表题型总结
1.在单链表中删除倒数第K个节点思路一:直接遍历一遍求出链表的长度,然后找到第N-K个节点之前的一个节点,因为要删除。思路二:画图发现,我们要走到N-K这个位置,使用双指针,先让一个链表走K步,然后两个指针一块移动即可。但是要找到的是前一个所以要另做处理。ps:一定注意要验证K的正确性。2.删除链表的中间节点思路:双指针,一个每次走两步,一个每次走一步即可。(画图看)扩展:...原创 2019-05-30 11:24:10 · 582 阅读 · 0 评论 -
算法之字符串题型总结
1.字符串的旋转给定abcdef,例如把字符串的前三个字符移动到后面。形如:defabc!解法一:暴力法每次所有字符串向前移动一位,移动m次即可。但是复杂度为O(mn)解法二:三步反转法(类比结构的对称性)通过m把字符串分割成两个字符串,然后对这两个字符串分别反转。最后在对字符串整体反转。例:ma要移动到后面去,ma.....|....am 根据对称性:am.......|...原创 2019-05-18 19:06:39 · 332 阅读 · 0 评论 -
机器学习面试(二)
1.为什么需要对数值型特征做归一化?(变为一个简单的分布学习在学习一个复杂分布时更加快速,可以使学习收敛更快,减弱离群点的影响,让模型更加鲁棒降低过拟合的风险。对树模型无效,分类树和回归树都一样没有作用,只有使用梯度下降类型的模型效果好。)2.特征组合?(可以根据决策树根结点到叶节点的路径来进行构建,可以找到不同划分下的最优特征组合;可以直接暴力多项式组合;可以基于业务...原创 2019-05-11 15:47:29 · 416 阅读 · 0 评论 -
深度学习面试总结
1.造成梯度消失的原因?造成梯度爆炸的原因?消失:网络模型深度过深;选用了不合适的损失函数,例如(sigmoid函数)爆炸:网络模型过深并且初始化权重过大;2.sigmoid函数值域问题?值域(0,1)开区间,定义域(-无穷,+无穷)对于激励函数:梯度只会无限趋近于零,对于交叉熵损失:值永远大于零,但可能会无限趋近于零3.sigmoid函数,交叉熵(cross enty...原创 2019-03-31 19:57:35 · 707 阅读 · 0 评论