B树,B+树的原理及区别
摘要:如图所示,区别有以下两点: 1. B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。 2. B+树中所有叶子节点都是通过指针连接在一起,而B树不会。 B树的原理: 就是为了存储设备或者磁盘设计的一种平衡查找树;通过对树高度的
阅读全文
posted @
2019-07-29 15:44
一中晴哥威武
阅读(3067)
推荐(0) 编辑
手写一个生产者消费者模式
摘要:主要是如何使用wait notify/notifyAll 先定义生产和消费的方法(同步问题) 定义生产者线程 定义消费者线程 最后写一个测试类,用来开启多个生产者,消费者线程执行操作 运行得到的结果为: 核心的就是每个线程拿到锁之后检测是不是满足条件,不满足则wait释放锁及CPU资源,等待被唤醒之
阅读全文
posted @
2019-07-23 17:34
一中晴哥威武
阅读(1587)
推荐(0) 编辑
Spring循环依赖的三种方式以及解决办法
摘要:一. 什么是循环依赖? 循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图: 注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。 Spring中循环依赖场景有: (1)构
阅读全文
posted @
2019-07-22 17:04
一中晴哥威武
阅读(23498)
推荐(3) 编辑
Ioc和Aop底层原理
摘要:Spring中主要用到的设计模式有工厂模式和代理模式。 IOC:Inversion of Control控制反转,也叫依赖注入,通过 sessionfactory 去注入实例;IOC就是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是通过容器生成,同时,要是产生的是单例的
阅读全文
posted @
2019-07-18 11:39
一中晴哥威武
阅读(1661)
推荐(0) 编辑
写一个死锁
摘要:从运行的打印结果我们可以看到T1和T2各自获得了a和b锁,并且互相在尝试获取对方手里的锁,但在等待对方释放锁的过程中谁也不让出已获得的锁,谁都没有赢,则形成了死锁
阅读全文
posted @
2019-07-18 10:23
一中晴哥威武
阅读(185)
推荐(0) 编辑
Java Jersey的详情概述
摘要:Jersey是一个RESTFUL请求服务JAVA框架,与常规的JAVA编程使用的struts框架类似,它主要用于处理业务逻辑层。 与springmvc 的区别: jersey1.X的版本是sun公司提供的独立的jar包,在2.X版本中,已经将jersey融合到JavaSE中,在javax.ws.rs
阅读全文
posted @
2019-07-12 16:02
一中晴哥威武
阅读(4027)
推荐(0) 编辑
新的任务提交到线程池,线程池是怎样处理
摘要:第一步 :线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则执行第二步。 第二步 :线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里进行等待。如果工作队列满了,则执行第三步。 第二步
阅读全文
posted @
2019-07-11 14:55
一中晴哥威武
阅读(1972)
推荐(0) 编辑
cpu 100%怎样定位
摘要:先用top定位最耗cpu的java进程 例如: 12430工具:top或者 htop(高级)方法:top -c 显示进程运行详细列表键入 P (大写P),按照cpu进行排序 然后用top -p 12430 -H 定位到最耗cpu的线程 的ID 例如:12483工具:top方法:top -Hp 186
阅读全文
posted @
2019-07-11 11:28
一中晴哥威武
阅读(1259)
推荐(0) 编辑
Semaphore拿到执行权的线程之间是否互斥
摘要:java线程之间的控制,使用Semaphore 实现 互斥 下面我们通过Semaphore来实现一个比较好的互斥操作: 输出结果:
阅读全文
posted @
2019-07-11 11:18
一中晴哥威武
阅读(1030)
推荐(0) 编辑
ReadWriteLock读写之间互斥吗
摘要:开发中遇到并发的问题一般会用到锁,Synchronized存在明显的一个性能问题就是读与读之间互斥;ReadWriteLock是JDK5中提供的读写分离锁。读写分离锁可以有效地帮助减少锁竞争,以提升系统的性能。 ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁。Java并发库中Ree
阅读全文
posted @
2019-07-11 10:39
一中晴哥威武
阅读(1867)
推荐(0) 编辑
局部变量为什么需要显式赋值,否则编译不了
摘要:1、成员变量(全局变量)是可以不经初始化的,在类加载过程的准备阶段即可给它赋予默认值,但局部变量使用前需要显示赋予初始值,javac不是推断不出不可以这样做,而是没有这么做,对于成员变量而言,其赋值和取值访问的先后顺序具有不确定性,对于成员变量可以在一个方法调用前赋值,也可以在方法调用后进行,这是运
阅读全文
posted @
2019-07-10 17:41
一中晴哥威武
阅读(1570)
推荐(0) 编辑
一个java文件中有几个类,编译后有几个class文件?
摘要:在一个源文件中用class关键字定义了几个类,编译的时候就会产生几个字节码文件
阅读全文
posted @
2019-07-10 17:19
一中晴哥威武
阅读(1276)
推荐(0) 编辑
java类初始化顺序
摘要:一个类中包含如下几类东西,他们前后是有顺序关系的 实例代码: 执行结果: 可以得出一个java类中初始化顺序:静态变量 > 静态代码块 > 普通变量 > 普通代码块 > 构造函数 总结:包含父子类和接口类 静态变量 静态代码块 普通变量 普通代码块 构造函数 父类静态变量 父类静态代码块 子类静态变
阅读全文
posted @
2019-07-10 15:18
一中晴哥威武
阅读(300)
推荐(0) 编辑
private修饰的方法可以通过反射访问,那么private的意义是什么?
摘要:反射代码: 输出结果: 在这里面很关键的一处代码是 setAccessible(true),这行代码取消了java的权限控制检查。调用了类Person的private方法,并且修改了其private成员变量的值。 private的意义是什么? 而对于setAccessible()方法会破坏类的访问规
阅读全文
posted @
2019-07-10 15:06
一中晴哥威武
阅读(4447)
推荐(1) 编辑
为什么单线程的Redis却能支撑高并发
摘要:Redis的高并发和快速原因 为什么Redis是单线程的 Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。单线程容易实现。 性能指标 redis的性能,基于内存的,普通笔记本轻松处理每秒几十万的请求。 详细原因 1)不需要各种锁的性能消耗
阅读全文
posted @
2019-07-03 15:24
一中晴哥威武
阅读(605)
推荐(0) 编辑