- 博客(126)
- 资源 (11)
- 收藏
- 关注
原创 算法-归并排序(java)
package org.example.leecode; import java.util.Arrays; public class MergeSort { public static void main(String[] args) { int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1}; new MergeSort().sort(arr); System.out.println(Arrays.toSt...
2021-11-25 16:05:06
576
原创 算法-单链表遍历及反转(java)
单链表遍历及反转 package org.example.leecode; import lombok.Data; public class LinkedNodeTest { public static void main(String[] args) { LinkedNode head = new LinkedNode(); head.setData(-1); head.setNext(null); LinkedN.
2021-11-25 14:36:28
637
原创 算法-选择排序(java)
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 算法步骤 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 重复第二步,直到所有元素均排序完毕。 package org.example.algorithm; public class SelectSort { public .
2021-11-21 09:12:25
139
原创 算法-插入排序(java)
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。 插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从 桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将 它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。 如果输入数组已经是排好序的话,插入排序出现最佳情况,其运行时间是输入规模的一个线性函 数。如果输入数组是逆序排列的,将出现最坏情况。平均情况与最坏情况一样,其时间代价是(n2)。
2021-11-20 22:42:17
129
原创 算法-冒泡排序(java)
package org.example.algorithm; /** * @author denglg * @version 20211120 */ public class BubbleSort { public static void main(String[] args) { int[] arr = {9, 8, 7, 6, 5, 3, 2}; int[] sortArr = new BubbleSort().bubbleSort(arr)...
2021-11-20 20:03:33
501
原创 算法-二分查找(java)
又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。 package org.example.algorithm; import java.util.Arrays; public class BisSearch { public static void main(Stri...
2021-11-20 10:56:38
302
原创 MySQL中的锁
1.锁的概念 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。在数据库中,除传统的计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。 2.锁的分类 从对数据操作的粒度分 : 表锁:操作时,会锁定整个表。 行锁:操作时,会锁定当前操作行。 从对数据操作的类型分: 读...
2021-11-12 20:05:33
1179
原创 MVCC原理
1、什么作用 在 Innodb 存储引擎的实现主要是为了提高数据库并发能力,用更好的方式去处理读–写冲突,同时做到不加锁、非阻塞并发读写。 2. 解决什么问题 MVCC可以解决脏读,不可重复读,MVCC 使用快照读解决了部分幻读问题,但是在修改时还是使用的当前读,所以还是存在幻读问题,幻读的问题最终就是使用间隙锁解决 3. 使用范围 MVCC 只在 REPEATABLE READ(可重复读) 和 READ COMMITTED(已读提交)这俩种隔离级别下适用 ...
2021-11-12 19:26:12
265
原创 Mysql中的索引原理
1. 定义 所谓索引,其实就是一种数据结构,用来快速查询数据的 2.为什么Mysql不适用Hash、二叉树、AVL树、红黑树、跳表等数据结构,而采用B+tree数据结构来建索引?分别插入C N G A H E K Q M F W L T Z D P R X Y S 来查看下各数据结构的情况 2.1 Hash HashMap中有一个优雅的实现,hash & (length - 1)就相当于对length取模,其效率要比直接取模高得多,这是HashMap在效率上的一个优化 2....
2021-11-12 14:10:15
1664
原创 Mysql中的日志
错误日志 是 MySQL 中最重要的日志之一,它记录了当 MySQL 启动和停止时、以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。 二进制日志(BINLOG) 记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL 的主从复制, 就是通过该 binlog 实现的。 ...
2021-11-11 14:31:21
982
原创 mysql的日志
1.错误日志 是 MySQL 中最重要的日志之一,它记录了当 MySQL 启动和停止时、以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。 2.二进制日志(BINLOG) 记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL 的主从复制, 就是通过该 binlog 实现的。 3.查询日志 记录了客户...
2021-11-11 14:19:39
432
原创 HashMap原理和几点思考
1. HashMap类图 3.为什么HashMap的底层数组长度总是2的n次方 4.什么时候触发扩容 5.HashMap为什么引入红黑树而不是AVL树 6. 为什么说HashMap线程不安全
2021-11-08 10:07:02
408
原创 LinkedHashMap原理及LRU实现
1. LinkedHashMap 继承了HashMap,拥有HashMap的所有功能 2. 与HashMap相比,LinkedHashMap可以保持插入顺序或者访问顺序。可以根据其构造函数里面的accessOrder参数赋值决定: 若accessOrder为true,put时将新插入的元素放入到双向链表的尾部,get时将当前访问的Entry移到双向链表的尾部。 若accessOrder的值为false时,表示双向链表中的元素按照Entry插入LinkedHashMap到中的先后顺序排序,即每次p.
2021-11-05 15:43:11
317
原创 Javassit代理
1.定义 package org.example.Javassist; public class JavassistDemo { private String demoProperty = "demo-value"; // 字段 // demoProperty字段对应的getter/setter方法 public String getDemoProperty() { return demoProperty; } public void s.
2021-10-25 19:55:03
404
原创 Cgilib 动态代理
1. 定义 package org.example.cglibproxy; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class Cglib...
2021-10-25 19:40:53
225
原创 mybatis中的设计模式
1. builder模式 (sqlSessionBuildFacotry) 2. 策略模式 (executor) 3. 动态代理 (mapper) 4. 装饰器 (日志模块) 5. 组合模式 (sqlNode) 6. 责任链模式(插件)
2021-10-25 17:08:14
235
原创 mybatis中的插件--责任链设计模式
InterceptorChain public class InterceptorChain { // 底层结构是一个List private final List<Interceptor> interceptors = new ArrayList<>(); public Object pluginAll(Object target) { for (Interceptor interceptor : interceptors) { t...
2021-10-22 16:38:53
365
原创 spring和mybatis集成逻辑
1. 需要添加mybatis-spring-x.x.x.jar,主要文件结构 2. 通过SqlSessionTemplate,手写DAO <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 加载mybatis.cfg.
2021-10-22 10:19:12
159
原创 mybatis中的binding模块
mybatis中的CustomerMapper无需写实现类呢? 1.调用逻辑 2、重点看下MapperRegistry 维护了全局配置类Configuration 和 mapper对应代理工厂
2021-10-19 19:38:01
118
原创 mybatis与spring整合版本对应表
官网地址:https://mybatis.org/mybatis-3/ 官方参照表:http://mybatis.org/spring/ 中文官网:https://mybatis.org/mybatis-3/zh/ mybatis项目源码地址:https://github.com/mybatis/mybatis-3/ 若编译通不过, import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotati..
2021-10-19 15:27:59
2869
原创 JAVA中的反射
代码应用 package org.example.reflect; public class Student { public String name; protected int age; char sex; private String phoneNum; public Student(){ } public Student(String name, int age, char sex, String phoneNum) { ...
2021-10-13 17:52:38
233
原创 mybatis中的cache
1、BlockingCache 是在原有 Cache 实现之上添加了阻塞线程的特性,采用 ConcurrentHashMap<Object, CountDownLatch> 和CountDownLatch来实现加锁解锁 public Object getObject(Object key) { acquireLock(key); Object value = delegate.getObject(key); if (value != null) { ...
2021-10-12 11:31:24
450
原创 java IO 中的装饰器
第一个比较特殊的地方是:装饰器类和原始类继承同样的父类,这样我们可以对原始类“嵌套”多个装饰器类。 InputStream in = new FileInputStream("/xxx/test.txt"); InputStream bin = new BufferedInputStream(in); DataInputStream din = new DataInputStream(bin); int data = din.readInt(); 第二个比较特殊的地方是:装饰器类是对功能的增强...
2021-10-12 10:59:37
208
原创 mybatis中的DataSource
工厂方法模式最终也是符合“开放-封闭”原则的,可以通过添加新的 Factory 接口实现和 Product 接口实现来扩展整个体系的功能。 MyBatis 的数据源模块也是用到了工厂方法模式,如果需要扩展新的数据源实现时,只需要添加对应的 Factory 实现类,新的数据源就可以被 MyBatis 使用。 DataSourceFactory接口及其实现 DataSource及实现 全局配置文件的mybatis-config.xml 解析全局配置文件的mybatis-config...
2021-10-11 16:37:10
1708
原创 mabatis中的JDBC Logger
采用JDK动态实现,可以参考JDK动态代理_anhuixiaozi的专栏-CSDN博客 定义InvocationHandler
2021-10-09 17:56:52
239
原创 mybatis中的日志框架
1.mybatis中的日志接口log,采用是适配器模式、对应的适配器有 为了兼容java.util.logging.Logger对应的日志框架,以Jdk14LoggingImpl为例 调用构造器获取,logger
2021-10-09 16:29:22
186
原创 JDK动态代理
1. 定义需要代理的接口和实现 代码: public interface Subject { void operation(); } public class RealSubject implements Subject{ @Override public void operation() { System.out.println("干活了"); } } 2. 定义DemoInvokerHandler 代码 public cl..
2021-10-09 16:10:36
395
原创 Spring集成ribbon,@bean@LoadBalanced加强RestTemplate,实现负载均衡(三)
Spring集成ribbon,@bean@LoadBalanced加强RestTemplate,实现负载均衡(一) Spring集成ribbon,@bean@LoadBalanced加强RestTemplate,实现负载均衡(二) 本章继续看下怎么获取服务列表的
2021-09-23 14:47:49
163
原创 Spring集成ribbon,@bean@LoadBalanced加强RestTemplate,实现负载均衡(二)
上章节分析了,为什么@Bean修饰的RestTemplate加上@LoadBalanced就能实现负载均衡功能?Spring集成ribbon,@bean@LoadBalanced加强RestTemplate,实现负载均衡(一) 为添加了@Loadbalaced 注解的RestTemplate添加LoadBalancerInterceptor拦截器 org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor#inte.
2021-09-22 23:38:49
369
原创 Spring集成ribbon,@bean@LoadBalanced加强RestTemplate,实现负载均衡(一)
为什么@Bean修饰的RestTemplate加上@LoadBalanced就能实现负载均衡功能? 加强RestTemplate @Qualifier 注解限定 利用SmartInitializingSingleton 进行扩展
2021-09-20 16:31:59
310
原创 Feign与Spring的集成
Feign的使用 @FeignClient("sidecar-simple") public interface SidecarFeign { @GetMapping("hello") String hello(); } @SpringBootApplication @EnableFeignClients @RestController public class ConsumerApplication { public static void main(String...
2021-09-20 15:13:05
288
原创 Nacos服务定义 NacosWatch对SmartLifecycle的扩展
AbstractApplicationContext DefaultLifecycleProcessor NacosWatch
2021-09-20 11:41:35
322
原创 Nacos自动注册 对ApplicationListener的扩展
NacosServiceRegistry NacosServiceRegistryAutoConfiguration NacosAutoServiceRegistration
2021-09-20 11:16:35
232
转载 TCP 协议面试灵魂 12 问
TCP 作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点。在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位。 001. 能不能说一说 TCP 和 UDP 的区别? 首先概括一下基本的区别: TCP是一个面向连接的、可靠的、基于字节流的传输层协议。 而UDP是一个面向无连接的传输层协议。(就这么简单,其它TCP的特性也就没有了)。 具体来分析,和UDP相比,TCP有三大核心特性: 面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,...
2021-09-16 19:47:14
201
原创 ThreadLocal
类型 回收时间 应用场景 强引用 一直存活,除非GC Roots不可达 所有的程序的场景,基本对象,自定义对象等 软引用 内存不足时会被回收 一般用在对内存非常敏感的资源上,用作缓存的场景比较多,例如:页面缓存,图片缓存 弱引用 只能存活到下依次GC前 生命周期很短的对象,例如ThreadLock中的key 虚引用 随时会被回收,创建了可能很快就会被回收 可能被JVM团队内部用来跟踪JVM的垃圾回收活动 ...
2021-09-14 09:55:05
133
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅