置顶博客更多
HashMap
是非线程安全的集合类,存储的是 key/value 的键值对
在 java8 之前,底层数据结构采用的是哈希表 + 链表的形式,如果 hash 冲突,那么就使用链地址法解决冲突
在 java8 之后,底层数据结构采用了哈希表 + 链表 + 红黑树的形式,当链表长度大于 8 时,将会转换成红黑树,以解决链表过长时导致的时间复杂度过大的问题
下面会对 HashMap 中重要的方法进行概述,并...
ThreadLocal
提供线程局部变量, 通过空间换时间的方式保证线程安全
一开始比较理解的是, Thread
、ThreadLocalMap
、ThreadLocal
和 key 之间的关系
但实际上是, 每一个 Thread
中, 存在一个 ThreadLocalMap
, map 中存放的 key 就是 ThreadLocal
...
对《深入 Java 虚拟机第三版》书籍的概括和总结,方便以后的回顾和查看
通过整理 SpringBoot 全流程,可以更好的俯视项目的运行流程,并且可以快速的定位到具体的代码,方便高效
通过整理 SpringBoot 扩展点流程,可以更好的俯视 Spring 中 bean 的整个生命周期以及扩展的切入点,并且可以快速的定位到具体的代码,方便高效
创建一个新的 SpringApplication 实例
SpringAppl...
记录通过看源码的方式来解答 Spring 的常见问题
BeanFactory 是 IoC 容器的接口,而 FactoryBean 是用于创建复杂 bean 的封装方式
通过实现 FactoryBean 接口,然后将实现类加入到 Spring 容器中,那么在创建对应的 bean 时,会通过 FactoryBean 的方式进行 bean 的创建(一般用于复...
public class ThreadPoolExecutor extends AbstractExecutorService {
// 记录当前线程池的状态(0|x=x),所以默认就RUNNING状态
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
// ...
该博客经过了 6 次版本迭代,框架方面:前端从 Vue.js
和 Nuxt.js
变为了 BootStrap
,后端则从 Node.js
变为了 SpringBoot
迭代的原因: 为了更好的 SEO,为了更方便的维护,为了使用体验的提升...
记录 Spring IoC 的源码解析
常用的两个加载配置文件的类 ClassPathXmlApplicationContext
和 AnnotationConfigApplicationContext
的继承关系图:
 {
if (n == 1) {
retur...
class Solution {
/**
* 先遍历链表, 将数据和长度存在list中, 再进行回文验证
*/
public boolean isPalindrome(ListNode head) {
L...
class Solution {
/**
* 通过中序遍历, 可以将二叉搜索树转化为有序的数组, 直接通过数组下标即可获取第k小的数
*/
public int kthSmallest(TreeNode r...
class Solution {
/**
* 直接使用hashMap就可以达到一个比较好的效果
* 时间复杂度为O(n), 空间复杂度O(n)
*/
public List<Integer> majorityElem...
class Solution {
/**
* 比较简单, 直接处理即可
*/
public List<String> summaryRanges(int[] nums) {
if (nums.length == 0) {
...
class Solution227 {
public int calculate(String s) {
Deque<Integer> numberQueue = new ArrayDeque<>();
int num...
class Solution226 {
// 交换root节点以及他的子节点, 返回本身
public TreeNode invertTree(TreeNode root) {
if (root == null) {
...
class Solution221 {
/**
* 方法一: 暴力解(不过进行了优化, 可以通过测试)
*/
public int maximalSquare2(char[][] matrix) {
// 先遍历一次, 初...
线程的状态枚举: java.lang.Thread.State
其中罗列了 6 种状态:
具体代码如下:
public enum State {
...
登入到 MySQL 客户端,通过以下代码查询在 msyql 中的当前时间
select now();
如果是差 8 小时,则可以执行一下代码:
set global time_zone = '+8:00';
flush privileges;
修改完成后,需要重新登入 MySQL 客户端才能看到时间的改变
...
实现线程同步的三种方式
例如:
public void test(){
synchronized (XXX){
...
}
}
在同步代码块 XXX
中可以传入以下几个值
在手动创建 settings.xml 配置文件的时候,千万注意不能少一个 s
,这个错误很难会被检查出来,如果少一个 s
,你会发现不管你怎么配置,配置文件都不会生效,用户目录下的配置也不会生效,会导致你怀疑人生,切记!
<?xml version="1.0" encoding="UTF-8"?>
<settings ...
首先去官网上下载 idea 2020.1 版本的安装包