- 博客(25)
- 收藏
- 关注
原创 PowerMock使用记录
<!--单元测试--> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>1.6.5</version> </dependency>
2021-08-16 17:07:46 1051
原创 java类加载机制与类加载器
类加载运行全过程当我们java程序在运行一个main方法的时候,需要经历以下这些步骤(这里以一个User类为例)1.当需要加载User.class的时候,首先会是AppClassLoader,AppClassLoader会判断自己是否有父类加载器,很显然是有的(ExtClassLoader),所以AppClassLoader会把加载User.class的事委托他的父类加载器去加载。2.当ExtClassLoader加载User.calss的时候,会和上一步一样,判断他自己是否有父类加载器,Ext的父
2021-06-19 09:58:25 145
原创 三年java出去面试,被问到的题总结
多线程篇synchronized的锁升级过程synchronized和Lock有什么区别说一下什么是CAS,他存在什么问题,该怎么解决线程池在项目中的使用场景创建一个线程池时,他有哪些重要的参数线程池的核心线程数是怎么设置的当一个线程提交到线程池后,线程池是怎么处理的线程池的拒绝策略有哪些ThreadLocal是用来做什么的,它怎么保证相同线程之间的数据共享,跨线程的怎么办说一说你对AQS的了解说一说公平锁与非公平锁的区别强软弱虚引用的区别数据结构篇Hashmap在JDK1.8的
2021-03-04 21:21:15 159 2
原创 基于BlockingQueue的交替打印
public class BlockingQueueDemo1 { public static void main(String[] args) throws InterruptedException { ArrayBlockingQueue arrayBlockingQueue1 = new ArrayBlockingQueue<Integer>(1); ArrayBlockingQueue arrayBlockingQueue2 = new Arra.
2021-02-28 17:35:08 185
原创 简介TCP协议的三次握手和四次挥手
我们在学习网络编程的时候,肯定需要学习TCP相关的知识,其中他的三次握手和四次挥手过程必不可少。接下来我们简单了解一下什么是三次握手和四次挥手。一、三次握手 即通信双方建立连接的过程,在建立连接时,双方一共需要发送三个包来建立一个可靠的连接。 那为什么三个包就可以确认连接呢?(其实这只是在正常情况下) 我们来考虑一下,我们平时和别人聊天的过程。 A:你好,在吗B:你好,我在A:好的........开始聊天........但是,由于我...
2021-02-18 16:07:39 108
原创 ThreadLocal、InheritableThreadLocal、TransmisttableThreadLocal使用记录以及源码解析
一、ThreadLocalThreadLocal是JDK自带的工具类,主要是为了我们方便我们在同一个线程中进行变量的共享。public class ThreadLocalUtils { public static ThreadLocal<String> THREAD_LOCAL = new ThreadLocal<>();}public class ThreadLocalGetTest { public void testGet(){
2021-02-10 20:39:57 283 1
原创 URI和URL的区别
首先通过一段代码看输出结果来比较他们的区别这就是一个简单的过滤器public class FilterTest implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse re
2020-11-25 11:02:25 110
原创 ES查询语法以及对应的java写法(基于ES7.3.2版本,服务器与java客户端都是这个)
案例1:普通的条件查询,多条件查询查询表订单表order中orderStatus为4,orderType为9,billSupplierId 为(11111,2222,33333) ,billCreateTime在1603728000000与1603814400000之间的数据数据库查询语句select * from order where orderStatus = 4 and orderType = 9 and billSupplierId in (11111,2222,33333)and
2020-11-04 22:54:25 2294 1
原创 ES基础查询语法
普通查询,多条件查询must term 类似数据库 =must terms 类似于数据库查询的 inmust_not term 类型数据库的 !=must_not terms 类型于数据库查询的 not inPOST /exp-order-v1-benchmark-202010/_search{ "query": { "bool": { "must": [{ "terms": { "orderStatus": [ 4, 5 ] }
2020-10-28 17:30:09 1382
原创 Spring对Bean生命周期的管理
SpringBean加载的全过程首先分为几个大部分,然后spirng会对这个每个小部分的前后进行操作。实例化填充属性初始化使用销毁一、实例化在我们实例化一个bean之前,我们有机会对它的BeanDefinition以及对IOC容器进行操作。这里主要介绍的有BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor这两个接口,其中BeanDefinitionRegistryPostProcessor继承BeanFactoryPos
2020-08-12 14:06:03 269
原创 mybatis的执行流程解析
分为几个大模块1.配置文件解析2.会话创建3.方法执行一.配置文件解析mybatis-config.xml<configuration> <properties/> <settting/> <typeHandlers/> <..../> <mappers/></configuration>mybatis-mapper.xml<mapper > <cache/&g
2020-08-09 17:07:11 133
原创 mybatis的一二级缓存应用场景与使用方法
使用场景一级缓存订单表与会员表是存在一对多的关系 为了尽可能减少join 查询,进行了分阶段查询,即先查询出订单表,在根据member_id 字段查询出会员表,最后进行数据整合 。如果订单表中存在重复的member_id,就会出现很多没必要的重复查询。针对这种情况myBatis 通过1缓存来实现,在同一次查询会话中如果出现相同的语句及参数,就会从缓存中取出不在走数据库查询。1级缓存只能作用于查询会话中 所以也叫做会话缓存。一级缓存的使用条件:1.必须是相同的SQL和参数2.必须是相同的会话3.
2020-08-09 15:40:53 1862
原创 ES7.3.2版本查询操作
最近由于重构原有的项目,并对项目中原有的老版本ES升级到了7.3.2版本,做个记录,防止忘记。public ElasticSearchPage queryOrderList(QueryBillListInput input) { //这里是构建一个请求es的报文体 BoolQueryBuilder booleanQueryBuilder = QueryBuilders.boolQuery(); if (input.getCompanyId() != null) {
2020-07-16 00:18:14 445
原创 (1)RabbitMQ入门
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2020-05-05 15:36:07 246
原创 Redis单线程为什么还那么快
**1.**redis为什么那么快因为redis的所有数据都是在内存中的,所有的运算都是内存级别的运算,而且单线程避免了线程间的切换带来的开销。因为redis是单线程的,所以要小心使用redis命令,对于那些耗时的指令,一定要慎用,一不小心就会导致redis卡顿。**2.**Redis单线程为什么还能处理那么多的并发客户端连接?Redis使用epoll(event poll)来实现IO多路复...
2020-03-23 19:43:38 117
原创 快速使用Netty实现聊天
基于netty版本 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.35.Final</version> ...
2020-03-23 11:18:57 450 1
原创 ArrayList的插入速度一定会比LinkedList的慢吗?
当插入的顺序是有序的时候,ArrayList的速度会比LinkedList要高案例public class LinkedListTest { public static void main(String[] args) { //LinkedList long l1 = System.currentTimeMillis(); LinkedL...
2020-03-21 12:25:18 1009 1
原创 linux常用命令
对文件进行操作mkdir 【目录名】 创建目录touch 【文件名】 创建文件rm 【文件名】 删除指定文件rm -rf 【目录】 删除目录cp -r 【目录A】 【目录B】 将目录A文件复制到目录Bmv 【目录A】 【目录B】 将目录A文件移动到目录Bmv 【文件A】 【name】 将文件A改名为namefind 【目录名】 查找该目录下的所有文件find 【目录...
2020-03-19 19:49:48 263
原创 git常用命令
git init 将项目初始化git add -A|–all 添加所有新增文件到本地缓冲区git add [文件名] 添加单个文件到本地缓冲区git commit 【文件名】 -m ‘第一次提交’ 提交指定文件git commit -am ‘第一次提交’ 相当于 git add -A;git commit -m ‘第一次提交’git reset HEAD 撤销在本地已经a...
2020-03-19 19:49:05 127
原创 AQS-独占锁详解
AQS简介AQS(AbstractQueuedSynchronizer)他是juc(java.util.concurrent)包的基础,它提供了一套完整的同步编程框架,开发人员只需要实现其中几个简单的方法就能自由的使用其中的锁。我们常用的比如ReentranLock(可重入锁)、CountDownLatch(线程技术)等待基础类库都是基于AQS实现的。本文以独占锁实现原理进行分析。Abstr...
2019-12-15 23:58:09 152
原创 三、Lua脚本
Redis中使用lua脚本我们在使用redis时,会面临一些问题,比如原子性问题redis是单一线程的,但是仍然会存在线程安全问题,当然,这个线程安全问题不是来源于Redis服务器内部,而是redis作为数据服务器,是提供给客户端使用的,多个客户端的操作就相当于同一进程下的多个线程,如果多个客户端之间没有做好数据同步策略,就会产生数据不一致的问题,举个简单的例子,多个客户端的命令之间没有做请...
2019-11-27 16:28:07 411
原创 二、Redis的原理分析
过期时间设置在redis中提供了expire命令设置一个键的过期时间,到期以后redis会自动删除它,这个在我们实际使用中是非常多的。expire命令的使用方法为:expire key seconds其中seconds参数表示键的过期时间,单位为秒。expire返回值为1表示设置成功,0表示设置失败或者键不存在。如果想知道一个键还有多久时间被删除,可以使用ttl命令:ttl key当键...
2019-11-27 15:16:36 167
原创 一、Redis的五种数据类型
Redis的魅力:缓存分为两类,一种是应用内缓存,比如Map(简答的数据结构),EH Cache(java第三方库);另一种就是缓存组件,比如Memached,redis;redis(remote dictionary server 远程服务字典),是一个基于key-value的高性能的存储系统,通过提供多种键值数据类型来适应不同场景下的缓存域存储需求。数据类型字符串类型字符串类型是最基本...
2019-11-26 19:27:24 132
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人