随笔分类 - java
摘要:synchronized是一种互斥锁 一次只能允许一个线程进入被锁住的代码块 synchronized是一种内置锁/监视器锁 Java中每个对象都有一个内置锁(监视器,也可以理解成锁标记),而synchronized就是使用对象的内置锁(监视器)来将代码块(方法)锁定的 synchronized锁作
阅读全文
摘要:线程安全 多线程主要是为了提高我们应用程序的使用率。但同时,这会给我们带来很多安全问题 因为在多线程的环境下,线程是交替执行的,一般他们会使用多个线程执行相同的代码。如果在此相同的代码里边有着共享的变量,或者一些组合操作,我们想要的正确结果就很容易出现了问题 性能问题 使用多线程我们的目的就是为了提
阅读全文
摘要:sleep() 调用sleep方法会进入计时等待状态,等时间到了,进入的是就绪状态,不是运行状态 yield() 调用yield方法会先让别的线程执行,但是不确保真正让出 意思是:我有空,可以的话,让你们先执行 join() 调用join方法,会等待该线程执行完毕后才执行别的线程 interrupt
阅读全文
摘要:ThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离~。 简要言之:往ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。 管理connection 数据库连接
阅读全文
摘要:进程和线程 进程作为资源分配的基本单位 线程作为资源调度的基本单位,是程序的执行单元,执行路径(单线程:一条执行路径,多线程:多条执行路径)。是程序使用CPU的最基本单位 线程有3个基本状态: 执行、就绪、阻塞 线程有5种基本操作: 派生、阻塞、激活、 调度、 结束 并行和并发 并行: 并行性是指同
阅读全文
摘要:List ArrayList底层是数组,LinkedList底层是链表。数组遍历速度快,LinkedList增删元素快。 在工作中一般就用ArrayList,而不用LinkedList,原因也很简单: 在工作中,遍历的需求比增删多,即便是增加元素往往也只是从尾部插入元素,而ArrayList在尾部插
阅读全文
摘要:IO按操作对象分类 缓冲操作:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter 文件操作:FileInputStream、FileOutputStream、FileReader、FileWriter 管道操作
阅读全文
摘要:equals() 和 hashCode() 特性: 重写equals()方法,就必须重写hashCode()的方法 equals()方法默认是比较对象的地址,使用的是==等值运算符 hashCode()方法对底层是散列表的对象有提升性能的功能 同一个对象(如果该对象没有被修改):那么重复调用hash
阅读全文
摘要:泛型 Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常 泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不
阅读全文
摘要:存储原理 数组+链表+红黑树 数组:查询快,插入慢 链表:查询慢,插入快;上一个--> x --> 下一个 map以数组存储,存储的值有 key, value ,hash , next,数组Index由hash进行计算后(散列算法)决定, 如果两个key的hash进行散列计算后的index相同,冲突
阅读全文
摘要:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),在java中,所有使用new xxx()构造出来的对象都在堆中存储一般由程序员分配释放,
阅读全文
摘要:数组:查询快,插入慢,查找复杂度 O(N) 链表:查询慢,插入快,查找复杂度 O(N) 哈希表:查询复杂度 O(1) 二叉树:查找复杂度 O(logN) 树是一种非线性的数据结构,相对于线性的数据结构(链表、数组)而言,树的平均运行时间更短(往往与树相关的排序时间复杂度都不会高) 数据库索引是B+树
阅读全文
摘要:冒泡排序 思路:俩俩交换,大的放在后面,第一次排序后最大值已在数组末尾。因为俩俩交换,需要n-1趟排序(比如10个数,需要9趟排序) 代码实现要点:两个for循环,外层循环控制排序的趟数,内层循环控制比较的次数。每趟过后,比较的次数都应该要减1 public void maoPao(){ int[]
阅读全文
摘要:jar包 <!-- 已过时 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8.1</version> </dependency> <!-
阅读全文
摘要:package utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import java.io.BufferedRead
阅读全文
摘要:1.内部类优点 每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整 2.几种常见的内部类 1.成员内部类 public class Outside { public String attr; public
阅读全文
摘要:1.思想 一个基础接口interface,几个类implements这个接口,另一个工厂类factory使用create方法,根据不同的情况,创建不同的接口实现类 2.优点 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽
阅读全文
摘要:1.介绍 1.单例类只能有一个实例 2.单例类必须自己创建自己的实例 3.单例类必须提供外界获取这个实例的方法 2.设计思想 1.外界不能创建这个类的实例,那么必须将构造器私有化 2.单例类必须自己创建自己的实例,不能允许在类的外部修改内部创建的实例,所以将这个实例用 private 声明。为了外界
阅读全文
摘要:1.介绍 序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输)。这个过程称为序列化。通俗来说就是将数据结构或对象转换成二进制串的过程 反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象模型的过程。也就是将在序
阅读全文
摘要:1.为什么要重写equals()方法 1.equals()是Object类中的方法; 2.equals方法用于比较两个对象是否相同,Object类中equals方法的实现是比较引用地址来判断的对象是否是同一个对象,通过覆盖该方法可以实现自定义的判断规则; 3.如果我们自定义类有两个对象,他们的属性是
阅读全文