总结了目前主流平台中常见的面试题,标⭐为重点!
更多干货请点击 Locus-轨迹
加锁和释放锁的原理
可重入原理:加锁次数计数器保证:Synchronized先天具有重入性。每个对象拥有一个计数器,当线程获取该对象锁后,计数器就会加一,释放锁后就会将计数器减一。
可见性的原理:内存模型和happens-before规则
在图中每一个箭头连接的两个节点就代表之间的happens-before关系,黑色的是通过程序顺序规则推导出来,红色的为监视器锁规则推导而出:线程A释放锁happens-before线程B加锁,蓝色的则是通过程序顺序规则和监视器锁规则推测出来happens-befor关系,通过传递性规则进一步推导的happens-before关系。现在我们来重点关注2 happens-before 5,通过这个关系我们可以得出什么?根据happens-before的定义中的一条:如果A happens-before B,则A的执行结果对B可见,并且A的执行顺序先于B。线程A先对共享变量A进行加一,由2 happens-before 5关系可知线程A的执行结果对线程B可见即线程B所读取到的a的值为1。
共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。 synchronized和Lock在释放锁之前会将对变量的修改刷新到主存当中
可以
- 分治算法:将一个规模为N的问题分解为K个规模较小的子问题,相互独立且与原问题性质相同
- 动态规划算法:将待求解问题分解成若干个子问题,适用于动态规划算法求解的问题经过分解后得到的子问题往往不是相互独立的,而是下一个子阶段的求解是建立在上一个子阶段的解的基础上的。
- 贪心算法: 每次操作局部最优,最后结果是全局最优
- 二分法:要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
- 搜索算法: 主要包含BFS,DFS
- Backtracking(回溯):属于 DFS。走不通就退回再走
在综合复杂度及稳定性情况下,通常希尔, 快排和 归并需要重点掌握
事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。
实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以说任务是通过线程驱动从而执行的。
上一篇:MetaMQ
下一篇:nim语言在不同操作系统安装