Java
文章平均质量分 90
Turbo码先生
字节跳动服务端工程师->算法工程师【算法&工程双修】
展开
-
《Netty核心代码解析》FastThreadLocal
系列FastThreadLocal目录文章目录系列FastThreadLocal目录前言二、InternalThreadLocalMap二、FastThreadLocal前言Netty作为一个高性能的网络框架,针对自己的业务实现了一些API,比如FastThreadLocalThread和FastThreadLocal等。用来实现Pooled池化内存。# 一、FastThreadLocalThread Netty自定义了Thread类,用于存储自定义的ThreadLocalMap。publ原创 2021-07-12 18:20:56 · 209 阅读 · 0 评论 -
Spring 循环依赖源码分析
Spring循环依赖文章目录Spring循环依赖前言一、开始1.1 定义循环依赖Bean1.2 手写第一版本1.3 手写第二版本二、版本二1.引入库2.读入数据总结前言循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:在本博客,我将手写实现一下Spring的循环依赖。试试水一、开始1.1 定义循环依赖Bean1、student类package com.jztai.spring.circledepen原创 2021-06-14 21:29:10 · 559 阅读 · 0 评论 -
Spring Bean的生命周期源码分析
Bean的生命周期文章目录Bean的生命周期前言一、实例化Bean二、设置对象属性(依赖注入)三、initializeBean3.1 调用Aware接口3.2 调用BeanPostProcessor的前置处理3.3 invokeInitMethods3.3.1 afterPropertiesSet()3.3.2 invokeCustomInitMethod3.4 调用BeanPostProcessor的后置处理4 destory总结前言对于普通的Java对象,当new的时候创建对象,当它没有任原创 2021-06-14 13:22:29 · 503 阅读 · 0 评论 -
《Netty核心代码解析》JavaNIO详解
Netty核心代码解析文章目录Netty核心代码解析前言一、NIO1.1 缓冲区二、使用步骤1.引入库2.读入数据总结前言回顾一下Netty的核心API一、NIO关于BIO、NIO的一些介绍,在手写实现人脸识别服务器中有介绍。NIO的API三大核心:Selecto、Channel、Buffer。(1)每个channel都会对应一个 Buffer(2) Selector 对应一个线程, 一个线程对应多 个chamel(连接)(3)该图反应了 有三个channel注册到该seletor原创 2021-05-11 21:02:24 · 301 阅读 · 1 评论 -
Redis缓存击穿、穿透、雪崩
Redis缓存击穿、穿透、雪崩文章目录Redis缓存击穿、穿透、雪崩前言一、击穿二、穿透三、雪崩前言Redis缓存击穿、穿透、雪崩以及其解决方案,击穿、穿透、雪崩的前置问题就是高并发。一、击穿击穿发生在:key到期或者key通过LRU(最近最少使用)、LRF(最不经常使用)进行清除的时候,此时大量的并发请求来临,发现key不存在,会去访问数据库,给数据库造成压力。解决方法是,当大量并发来临的时候,使用setnx key加锁,setnx是只有key不存在的时候才会设置成功,此时大并发下只有原创 2021-05-10 19:15:51 · 243 阅读 · 1 评论 -
《Tomcat源码解析》Tomcat的Web请求与处理
Tomcat的Web请求与处理文章目录Tomcat的Web请求与处理前言一、NioEndPoint二、使用步骤1.引入库2.读入数据总结前言Connector对象创建的时候,会创建Http11NioProtocol的ProtocolHandler,在Connector的startInteral方法中,会启动AbstractProtocol,AbstractProtocol启动NioEndPoint进行监听客户端的请求,EndPoint接受到客户端的请求之后,会交给Container去处理请求。原创 2021-05-05 20:45:55 · 691 阅读 · 0 评论 -
MybatisPlus自定义SQL如何支持多表分页查询
MybatisPlus自定义多条件分页查询MybatisPlus自定义多条件多表查询前言二、QueryVo二、Controller层三、Service层四、Mapper层4.1 Mapper类4.2 多表查询的sql4.3 Mapper.xmlMybatisPlus自定义多条件多表查询前言在本文,详细写一下使用mapper.xml实现mybatisplus多条件分页查询的写法。# 一、介绍其实还是比较简单的,直接看下面的需求:![在这里插入图片描述](https://img-blog.csd原创 2021-04-26 21:52:14 · 1410 阅读 · 0 评论 -
HashMap核心源码解析之Jdk1.8HashMap
HashMap提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录HashMap前言一、大概二、Jdk1.7源码2.1 重要参数2.2 构造函数2.3 添加元素2.7 resizec2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学原创 2021-04-10 21:01:23 · 541 阅读 · 2 评论 -
HashMap核心源码解析之Jdk1.7ConcurrenHashMap
Jdk1.7ConcurrenHashMap文章目录Jdk1.7ConcurrenHashMap前言一、 重要属性二、 重要属性三、 put四、 Get五、remove五、size前言HashTable是通过在函数上加synchronized,即在HashTable对象上加锁,实现的线程安全,但是这种方式,虽然实现了线程安全,但是同时刻只能put或者get,效率非常低。ConcurrentHashMap是由Segment和Segment内的HashEntry数组组成,类似于二维数组,HashE原创 2021-04-09 20:35:41 · 318 阅读 · 0 评论 -
HashMap核心源码解析之Jdk1.7HashMap
HashMap核心源码解析之Jdk1.7HashMap文章目录HashMap核心源码解析之Jdk1.7HashMap前言1 重要属性2 构造函数3 put4 删除元素5 查找元素6 ConcurrentModificationException前言JDK7的实现是数组+链表;当出现Hash冲突的时候,插入在链表的头部(头插法);因为如果插在尾部的话,需要遍历链表,导致插入效率低。而且操作系统里面有个局部性原理,就是往往一段时间的操作是在局部进行的,所以一般来说,put的顺序和get的顺序是一致的原创 2021-04-09 20:29:32 · 269 阅读 · 0 评论 -
《Tomcat源码解析》Tomcat类加载器
《Tomcat源码解析》Tomcat类加载器文章目录《Tomcat源码解析》Tomcat类加载器前言一、J2SE类加载器1.1 启动类加载器1.2 扩展类加载器1.3 系统类加载器1.4 代码获取各种类加载器1.5 双亲委派机制1.6 ClassLoader二、Tomcat类加载器三、Web应用类加载器四、Tomcat类加载器源码前言一、J2SE类加载器JVM默认提供了3个类加载器,他们以一种父子树的方式创建,同时使用委派模式确保应用程序可通过自身的类加载器(System)加载所有可见的J原创 2021-03-27 18:35:04 · 783 阅读 · 3 评论 -
《Tomcat源码解析》Tomcat启动过程
《史上最全Tomcat源码解析》Tomcat启动过程文章目录《史上最全Tomcat源码解析》Tomcat启动过程前言一、启动过程二、使用步骤1.引入库2.读入数据总结前言在上一章对Tomcat的架构进行了分析,这一章,我们来看一下Tomcat的启动过程一、启动过程二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns原创 2021-03-27 17:30:16 · 1193 阅读 · 8 评论 -
《Tomcat源码解析》Tomcat架构解析
Tomcat源码解析提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录Tomcat源码解析前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正原创 2021-03-12 10:18:17 · 1453 阅读 · 3 评论 -
高并发编程实战第一阶段(Java线程基础API教程)
高并发编程实战第一阶段(Java线程基础)文章目录高并发编程实战第一阶段(Java线程基础)1 线程基本介绍1.1 进程的七状态模型1.2 线程的状态模型2 多线程基础API2.1 Thread类2.2 线程API之Runnable接口2.3 线程创建2.4 银行多线程叫号的案例2.5 线程安全问题2.5.1 Servelt线程不安全2.5.2 i--与System.out.println()的线程不安全问题2.6 ThreadGroup2.6 线程名字2.7 run方法2.8 stacksize2.9原创 2020-12-09 11:33:14 · 992 阅读 · 0 评论 -
Tomcat修改80端口之后 Failed to initialize connector [Connector[HTTP/1.1-80]]
这里写自定义目录标题Tomcat修改80端口之后启动失败报错代码Tomcat修改80端口之后启动失败报错代码Tomcat配置80端口之后重启,会报下面错代码片.,原因是linux对于非root权限用户不能使用1024以下的端口,所以,切换到root用户再启动tomcat即可。// An highlighted block31-Jul-2020 14:41:42.565 SEVERE [main] org.apache.catalina.core.StandardService.initIntern原创 2020-07-31 15:02:18 · 3048 阅读 · 0 评论