摘要: 1.TreeMap 使用的数据结构是红黑树,描述一下红黑树。 2.TCP 报文头,报文体装的是什么数据,IP报文头装的又是什么数据? 3.堆溢出怎么排查,怎么定位到具体的代码?如何解决? 4.线程池中,最大线程数,核心线程数,BlockingQueue到多大了才会再new新的线程? 线程是如何去获取 阅读全文
posted @ 2017-06-13 19:51 bili111 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 原理非常简单,但是非常重要,能够很好的帮助你去理解分布式系统中负载均衡的工作原理! 一致性哈希算法使用的数据结构是TreeMap,TreeMap本身提供了一个tailMap(K fromKey)方法,支持从红黑树中查找比fromKey大的值的集合,但并不需要遍历整个数据结构。使用红黑树,可以使得查找 阅读全文
posted @ 2017-06-13 19:45 bili111 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 1.如何判断单链表有环? 设置两个指针互相追逐。一个指针每次前进一步,第二个指针每次前进两步,如果有相遇,则说明有环。 2.值为1到99的100个数中有两个数是重复元素,设计算法找出这两个数? 先求和1+2+...+99=x,然后用你的100个数字求和,减去这里的x,就得到了重复的那个数。 3.对L 阅读全文
posted @ 2017-06-13 19:39 bili111 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 在所有的设计模式中,单例模式是我们在项目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单例的呢?这些问题在看了本文之后都会一一的告诉你答案,赶快来阅读吧! 什么是单例模式? 在文章开始之前 阅读全文
posted @ 2017-06-13 19:37 bili111 阅读(1366) 评论(0) 推荐(2) 编辑
摘要: 在java里面,synchronized关键字就是一种悲观锁,因为在加上锁之后,只有当前线程可以操作变量,其他线程只有等待。 CAS操作是一种乐观锁,它假设数据不会产生冲突,而是在提交的时候再进行版本比较。这样可以减少加锁的频率,提高程序的性能。 线程安全 众所周知,Java是多线程的。但是,Jav 阅读全文
posted @ 2017-06-13 19:34 bili111 阅读(2508) 评论(0) 推荐(0) 编辑
摘要: 在数据库锁机制中介绍过,DBMS中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。 无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是数 阅读全文
posted @ 2017-06-13 19:31 bili111 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 锁主要用于多用户环境下保证数据库完整性和一致性。 我们知道,多个用户能够同时操纵同一个数据库中的数据,会发生数据不一致现象。即如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。这些问题包括:脏读、不可重复读和幻读 脏读就是指当一个事务正在访问数据,并且对数据 阅读全文
posted @ 2017-06-13 19:28 bili111 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 1,装饰者模式:动态地给对象添加一些额外的职责。 java IO中使用到的设计模式,一层一层的装饰,而是可以是不同的组合,直到组成所想要的InputStream. 类图: 1.Component(被装饰对象的基类) 定义一个对象接口,可以给这些对象动态地添加职责。 2.ConcreteCompone 阅读全文
posted @ 2017-06-13 00:05 bili111 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 1.Connector Container:Engine,Host,Context,Wrapper(责任链的设计模式) Valve: Tomcat 中一个最容易发现的设计模式就是责任链模式,这个设计模式也是 Tomcat 中 Container设计的基础,整个容器的就是通过一个链连接在一起,这个链一 阅读全文
posted @ 2017-06-13 00:04 bili111 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 为什么要使用线程池呢?因为创建线程和销毁线程的开销很大,如果来一个请求就要创建一个线程,处理完之后又要销毁,这样频繁的创建和销毁会消耗大量的系统资源。 java线程池的原理:创建一个ThreadPool,核心线程数为m,最大线程数为n,还有一个阻塞队列BlockingQueue。当来一个请求的时候, 阅读全文
posted @ 2017-06-13 00:03 bili111 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 由于计算机的内存与处理器的运算能力之间有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据从主内存复制到高速缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中。 基于高速缓存的存储 阅读全文
posted @ 2017-06-13 00:02 bili111 阅读(160) 评论(0) 推荐(0) 编辑
摘要: JVM内存结构: 1.java虚拟机栈:存放的是对象的引用(指针)和局部变量 2.程序计数器:每个线程都有一个程序计数器,跟踪代码运行到哪个位置了 3.堆:对象、数组 4.方法区:字节流(字节码文件)所代表的静态存储结构转换为方法区的运行时数据结构 5.常量池:String(字符串常量) JVM的类 阅读全文
posted @ 2017-06-13 00:01 bili111 阅读(2666) 评论(0) 推荐(0) 编辑
摘要: 在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。但是首先需要明确,什么样的对象才能当为垃圾: 1.引用计数法:如果某个引用(即指针)指向对象,那么说明该对象还存活着的,如果没有指针与之相关联,则可以认为是垃圾。 缺点,无法解决循环引用的问题。 public  阅读全文
posted @ 2017-06-13 00:00 bili111 阅读(976) 评论(0) 推荐(0) 编辑