- 博客(66)
- 收藏
- 关注

原创 面试要点
SpringBoot自动装配SpringBoot启动流程SpringBean生命周期Spring循环引用Spring IOC AOPMySQL事务、锁Sql索引、优化、数据结构MySQL高可用方案、主备一致性哈希Activiti原理WebSocket实现AQSCASMVCCDubbo协议、组件、实现Rpc框架SpringCloud组件微服务、服务发现、服务治理FeignClient底层HashMapJava锁、用到CAS的地方Redis、部署方案缓存雪崩、缓存击穿
2020-09-08 10:58:00
136
原创 Mybatis xml变量传递
<if test="ids!=null and ids.size()>0"> and ids in <foreach collection="ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> <if tes...
2022-01-12 15:58:37
512
原创 java基础查漏
1、为什么重写equals()方法,一定要重写hashCode()方法?因为很多比较器会先比较hashCode是否相同,以此提高查找效率,如果不重写,hashCode大概率不同,就不会再通过equals方法比较了。
2021-11-05 15:08:58
165
原创 ssh携带密码
sshpass -p ******** scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null-o StrictHostKeyChecking=no 不检查known_hosts文件-o UserKnownHostsFile=/dev/null 功能未知,可不配
2021-10-22 09:40:55
1134
原创 maven pom文件配置
Parent标签<relativePath/>用于制定从哪里去找parent的pom文件。不加此标签默认为:…/pom.xml,此配置适用于多模块项目空标签,跳过直接取仓库查找配置了路径,则去路径查找MainClass经常有人在properties里面配置start-class标签,其实作用于springboot-maven-plugin,用于打包的时候指定启动类。Implementation-Title: ***Implementation-Version: 0.0.1-S
2021-09-01 16:06:26
562
原创 Websocket client 导致druid interrupted
依赖包<dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.5.2</version></dependency>说明使用此包开发websocket client,会定时ping服务端,
2021-08-31 15:09:28
535
原创 常用设计模式
创建型单例模式:spring容器、懒汉式、双重检查、静态内部类、枚举抽象工厂模式、工厂方法模式:BeanFactory、SQLSessionFactory建造者模式:@Builder、SqlSessionFactoryBuilder、XMLConfigBuilder结构性代理模式:Spring AOP动态代理适配器模式:HandlerAdapter桥接模式、享元模式行为型模板方法模式:导入抽象类,常用统一抽象类封装模板方法及成员变量、常量责任链模式:activiti工作流观察
2021-08-23 18:05:09
118
原创 SpringBoot单元测试
@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)@SqlGroup({ @Sql("classpath:init.sql"), @Sql(value = "classpath:clea.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)})@ActivePro
2021-07-14 17:34:51
466
1
原创 反编译代码
Maven依赖 <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.21.0-GA</version> </dependency>代码 ClassPool.getDefault().insertClassPath("jar
2021-07-13 10:12:16
367
原创 MySQL索引总结
索引结构mysql有三种索引结构,包括B+树、哈希索引和全文索引,这里只关注B+树为什么不用二叉树,例如红黑树等数据结构?因为二叉树父节点至多有两个子节点,所有层级很深。层级越深,那么读取数据时的io次数就越多。TreeMap使用红黑树,因为是内存操作,io会非常高效,而MySQL数据存储到磁盘上,io次数越多,那么检索性能就会越低。B树的作用B树的出现,就是为了解决二叉树频繁io的问题,B树属于多路查找树,相对于二叉树层级更少,那么io次数自然就更少。B+树B树解决了频繁io的问
2021-05-11 15:57:47
122
原创 golang 日志使用
logrus1.示例代码 // logrus用法 logrus.SetLevel(logrus.InfoLevel) file, err := os.OpenFile("D://log.txt", os.O_APPEND, 0666) if os.IsNotExist(err) { file, _ = os.Create("D://log.txt") } defer file.Close() logrus.SetOutput(file) logrus.Info("hello") lo
2021-04-14 15:07:05
654
1
原创 B树、B+树
共同点:多路查找树不同点:B树:1、节点包含数据,找到节点则找到数据。2、m阶,子节点数小于等于m,节点关键字数大于等于ceil(m/2)-1,小于等于m-1。3、当查找数据离根节点更近时,效率比B+树高;B+树:1、子节点包含父节点所有关键字;2、只有叶子节点包含数据或数据指针;3、每次查找都要到叶子结点,查找效率稳定;4、非叶子结点无数据,可放的关键字更多,更“矮胖”。...
2020-12-19 10:35:01
128
1
原创 解决zebra无法读取jar包内的配置文件心得
项目集成zebra后在idea环境可以运行,但是打成jar包后就无法运行。会提示空指针。这里也是zebra源码写的很奇怪的原因。同时无法读取jar包内的配置文件。研究了两三天,各种办法都试了,想着重写GroupDataSource。最后看到别人说,只需要在项目创建一个相同包名、类名的文件就可以覆盖掉源码里的类。由于是zebra源码里的FileUtils的原因,所以我在项目重写了一个FileUtils。然后解决了问题。如释重负啊。...
2020-10-26 20:54:57
270
原创 MySQL不可重复读与幻读
一直把不可重复读与幻读没搞太明白,有天看到一个说法觉得挺有道理:不可重复读:针对的是单条记录,另一个事务修改了本事务读的记录,再次读时,记录改变了。解决此问题需要行锁;幻读:针对的是整个表,第一次读9条记录,第二次读变成8条或者10条。解决此问题需要表锁。MySQL应该用的MVCC控制。个人理解:读未提交的问题:脏读、不可重复读、幻读读已提交的问题:不可重复读,幻读可重复读的问题:幻读既然问题都是读,那是不是只是针对select呢?有个面试官问MySQL会不会有幻读,之前一直觉得会有,也试验
2020-09-30 10:30:04
174
原创 Mybatis一级缓存二级缓存
一级缓存1、默认开启,未找到关闭办法2、缓存级别:SqlSession级别3、缓存位置:SqlSession.BaseExecutor.PerpetualCache localCache4、跨SqlSession无法访问二级缓存1、开启办法:cache-enabled: true,xml文件需要增加cache标签2、cache标签readOnly属性设置为false时,实体类必须实现序列号接口;3、缓存级别:个人认为是mapper级别,也就是namespace级别;4、缓存位置:SqlSe
2020-09-18 12:01:05
138
原创 Spring多例
1、xml文件scope属性可配置Bean作用范围,或者使用@Scope注解2、其中request、session、global session属于web作用域,没有研究过用法,一般应用使用这三种scope会导致项目起不来,暂时可以不管。3、singleton属于默认值,单例模式,由Spring容器管理,生命周期与容器相同。4、prototype多例,每次使用的时候都会创建一个新的对象,并交给JVM管理。多例的使用分几种情况:①多例注入多例:这种情况由于每次请求父级Bean都会创建新的对象,同事进
2020-09-17 09:56:57
1887
原创 Activiti
之前项目用到过Activiti,一直没有深入了解过,面试被问到几次,现在抽时间研究研究。1. 数据库表28张表act_evt_log:事件表(event)-EventLogEntryact_ge前缀:通用表(general)act_hi前缀:历史表(history)-HistoryServiceact_id前缀:身份表(identity)-IdentityServiceact_procdef_info:流程定义(processDefinition)act_re前缀:储存表(repositor
2020-09-11 11:51:53
291
原创 k8s 容器挂载configMap
volumes: - name: user configMap: name: user items: - key: application.yml path: test/application.yml`volumeMounts: - name: user-center-volume mountPath: /root/application.yml s
2020-09-02 15:49:04
8351
原创 排序算法
冒泡排序:private static void bubbleSort(Integer[] origin) { System.out.println("排序前:" + Arrays.toString(origin)); for (int j = 0; j < origin.length - 1; ++j) { for (int i = 0; i < origin.length - 1 - j; ++i) {
2020-08-31 16:26:56
115
原创 SpringBoot配置文件加载
ConfigFileApplicationListener负责加载配置文件Spring容器启动时会加载此监听器发布ApplicationEnvironmentPreparedEvent事件后,监听器开始加载配置文件,先于Bean创建
2020-08-31 14:41:27
213
原创 SpringBoot启动流程简述
又回顾了springboot启动流量,有了新的理解,进行以下补充:1、listeners.starting()等方法,第一次出现了误解,以为是启动监听器,但是我很奇怪监听器为什么要启动。再次看源码,才知道不同的方法是用来发布不同的事件,此方法就是发布ApplicationStartingEvent事件。可见看源码还是要耐心。...
2020-08-31 14:39:35
3239
2
原创 HashMap关键参数
TREEIFY_THRESHOLD=8因为HashMap中bin分布近似λ=0.5的泊松分布,当k等于8时,概率小于千万分之一CAPACITY为2的幂因为要进行散列,2的幂减一转换为2进制,所有位上全为1,使得哈希分布更加随机;采用与操作比采用取模运算更高效,因为取模运算属于十进制范畴DEFAULT_LOAD_FACTOR=0.75,负载因子是时间和空间的折中...
2020-08-31 10:51:14
481
原创 CAP
C:consistency一致性A:Availability 可用性P:Partition tolerance 分区容错三者只能同时满足其二分布式系统P必须存在,否则不是分布式系统CP同时满足,分区之间无法通信,为了满足数据一致性,整个系统必须锁住,等待分区之间网络恢复;CP同时满足,分区之间无法通信,不同节点的数据不一致...
2020-08-21 14:37:00
100
原创 docker expose
docker expose的作用是容器运行之后,暴露一个端口。这个端口应该与镜像对应的应用端口一直,否则设置之后没有任何意义。例如:expose 8081但是镜像应用监听8080端口那么docker run的时候依然要映射到8080端口上,否则无法访问应用,如果设置了expose,那可以直接使用-P随机端口映射...
2020-08-20 16:46:45
594
原创 thanos实现prometheus高可用
thanos组件:通用api:Store Api提供服务给查询接口,通过grpc查询prometheus的remote-read接口,rule的storeapi,store gateway的storeapi。一、thanos query:1、封装prometheus Query Api,支持PromQL2、暴露query服务,实现Store Api,可查询来自四类endpoint的数据:包括:rule节点record数据,sidecar节点prometheus原生数据,store gateway代
2020-08-12 11:52:00
3740
原创 Calendar设置时间
private Date trimSecond(Date date) {Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(“GMT+8”));calendar.setTime(date);calendar.set(Calendar.SECOND, calendar.getActualMinimum(Calendar.SECOND));calendar.set(Calendar.MILLISECOND, calendar.get
2020-05-13 11:06:29
2243
原创 多线程中断标志位
三个方法:实例方法:isInterrupted()、interrupt()静态方法:interrupted()个人理解:线程中断标志位只是线程的一个属性,为开发人员提供一个可控的线程环境,中断标志位默认false;应该理解为默认没有中断标志位,通过方法设置一个中断标志位,设置以后对线程的运行没有任何影响,就是一个标志,可以在代码中根据标志来控制线程运行。1、NEW、TERMINATED状态...
2020-04-20 16:35:00
875
原创 多线程的状态枚举
1、NEWnew Thread()此时线程对象状态为NEW2、RUNNABLEnew Thread().start()调用start()方法状态为RUNNABLE3、BLOCKEDsynchronized代码、lock.lock()、Thread.yield()都会让线程进入阻塞状态4、WAITING调用wait()、join()方法5、TIMED_WAITTING调用wai...
2020-04-20 16:08:42
628
原创 多线程synchronized 和 volatile 关键字
浏览了一天的博文,大概总结出个人看法,以备以后继续学习1、必须明白一个知识点,内存屏障;下面是基于保守策略的JMM内存屏障插入策略:在每个volatile写操作的前面插入一个StoreStore屏障。在每个volatile写操作的后面插入一个StoreLoad屏障。在每个volatile读操作的后面插入一个LoadLoad屏障。在每个volatile读操作的后面插入一个LoadStor...
2020-04-16 16:56:50
161
原创 spring aop实现
方式一:实现MethodInterceptor接口(类似于环绕通知),xml配置还有其他接口,前置通知、后置通知等<aop:config>不引入aspectjweaver.jar会抛出异常Failed to introspect Class [org.springframework.aop.aspectj.AspectJExpressionPointcutObject p...
2020-04-14 18:54:01
106
原创 HashMap 计算key的hash值方法hash()
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }1、计算出key值的hashcode;2、h = key.hashCode()) ^ (h >>> 16)...
2020-04-09 18:55:32
5764
原创 wait(),notify(),notifyAll()生产者消费者
public class ProducerConsumer {private static boolean run = true;private static final Integer MAX_CAPACITY = 20;private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>();p...
2020-04-09 15:42:36
113
原创 Java泛型 T 与 ?
泛型T代表一种具体的类型,?代表所有的类型;泛型声明时只能用T,也就是说public class AAA和public T dosometing()这两处只能用T,不能用?;?只能用在引用变量上,比如 List<?> a;这样一个引用变量,在使用中通常会作为方法的形参引用上使用。T和?都可以使用extends,使用时二者没有区别 ,<? extends Student&g...
2020-04-09 11:03:43
142
原创 order by 连用limit分页不稳定
如果order by后面的条件相同,就会导致mysql随机排序,出现数据错误;可使用order by id或order by gmt_create,id
2020-04-02 17:15:55
223
原创 自定义类加载器
package cn.dongqing.classloader;import cn.dongqing.demo.entity.LongLong;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;impor...
2020-04-02 15:39:51
78
原创 shardingsphere分表导致text无法插入
org.apache.shardingsphere sharding-jdbc-spring-boot-starter 4.0.0-RC1使用这个包,插入text类型,如果xml文件写了jdbcType=LONGVAECHAR就会报java.io.NotSerializableException: java.io.Str...
2020-03-19 18:32:01
639
5
原创 Java对象生命周期
问题纠正:1、常量池静态常量池属于编译期确定的,运行时会进入运行常量池。常量池包括类的相关信息和代码里面的很多常量;jdk1.8运行常量池、字符串常量池都逻辑上属于方法区,内存上在堆中。2、类加载public class Load { public static void main(String[] args) { System.out.println(Boy.a); }}class Boy extends People { public static.
2020-03-18 15:19:17
123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人