
JAVA基础
文章平均质量分 55
小_Tao
希望通过csdn记录自己的学习经历,和大家一起讨论问题
展开
-
MySQL事务
ACIDAtomicity: 原子性,一次事务中的操作要么全部成功,要么全部失败Consistency: 一致性 跨表跨行跨事务,数据库始终保持一致状态Isolation: 隔离性 可见性,保护事务不会互相干扰,包含四种隔离级别Durability: 持久性,事务提交成功后,不会丢数据表级锁意向锁: 表明事务稍后要进行哪种类型的锁定共享锁S排他锁X共享意向锁 IS :打算在某些行上设置共享锁排他意向锁IX :打算在某些行设置排他锁Insert意向锁 :Insert操作设置的间隙原创 2021-08-02 23:56:06 · 98 阅读 · 0 评论 -
Java Stream
Java Stream流式编程技术泛型是什么?java中的泛型是伪泛型,在jvm层面是没有泛型的.代码里的泛型进行编译后就会被擦除,只是在取出元素后做了一个类型检查,在JAVA里通过泛型之后就没有层级关系了,不像别的语言还是有层级关系的。可以在运行期,通过反射获取到泛型什么是流?一个来自数据源的元素队列并支持聚合操作。元素:特定类型的对象,形成一个队列。流并不会存储对象,而是按需计算数据源:流的来源,可以是数组,集合,I/O channel,产生器generator聚合操作:类似Sql语句原创 2021-07-30 20:10:19 · 93 阅读 · 0 评论 -
Lambda
lambda表达式是一个匿名函数 极大程度的简化了java代码的编写@FunctionalInterfacePredicate<T> 有参数,条件判断最后返回一个true false判断的一个表达式Function<T,R>有参数有返回值Consumer<T>有参数无返回值Supplier<T>无参数,有返回值import java.io.Serializable;import java.util.Collection;publi原创 2021-07-30 05:06:47 · 286 阅读 · 0 评论 -
设计模式之单例模式 JAVA实现
单例模式干啥用的用来替换全局变量,全局变量的缺点在程序一开始就会被创建,如果这个对象非常消耗资源,而程序在这次执行过程中又一直没有用到它就形成了浪费利用单例模式可以解决这个问题保证一个类有且仅有一个实例,并提供一个访问它的全局访问点如何实现1.要自己控制生成实例,所以需要使用private来声明构造函数,这样就防止了调用方创建这个对象的实例2.单例模式没有公开的构造器 一句话我命由我不由天3.如何调用这个私有的构造函数呢?static修饰的方法是类方法,不需要实例化这个类也可以调用,所以需要原创 2021-07-24 23:37:10 · 71 阅读 · 0 评论 -
Spring Bean的装配
Spring Bean的装配让Spring帮我们管理这些bean而不是我们自己手动去new,这样做的好处就是可以实现上下层的解耦,j2ee的开发中,我们使用某个service时都要new这个service的具体实现类,这是代码是耦合的有很强的依赖关系,通过spring bean我们可以解耦。xml实现配置一个applicationContext.xml文件xml文件头是引入一些命名空间schemaLocation 里的上下两个字符串是一组上面的一条对应相关的xmlns另一个是对应的xsd文件地址原创 2021-07-24 06:03:23 · 239 阅读 · 1 评论 -
多线程java
多线程多线程基础知识为什么要有多线程?如果把线程看做一个个人力 通过谚语’‘人多力量大’’ 那么多线程就是多个单线程,那么这么多工作力自然(真的会快吗?)工作速度快了本质原因其实是 摩尔定律的失效 ==》分布式+多核时代降临实际情况速率比较以前所以的硬件性能会按一定频率进行爆发式增长硬件发展速度>应用程序的并发量的增速21世纪因为web时代到来应用程序的并发量爆发式增长硬件发展速度<应用程序的并发量的增速内存架构共享内存架构所有CPU共享一块内存原创 2021-07-19 05:29:19 · 185 阅读 · 0 评论 -
jvm gc的理解
jvmGC串行GC并行GCCMS GCG1堆的GC就像一个公司的管理体系年轻代就是实习生和新员工 老年代就是老员工 年轻代和老年代的默认比例是1:2年轻代里有新生区和两个存活区比例是8:1 :1一个公司要招一批新的实习生进这个新生区进行锻炼,当这个新生区满的时候就要进行第一次选拔就是我们的ygc这时会选出一批合适的实习生可达的进入考核区一个存活区内其余不合适的实习生不可达的对象全部淘汰考核中可能出现的情况 :1.如果有一个部门的一组实习生们大对象都特别优秀,他们便直接晋升为老员工老年代2.其原创 2021-07-04 06:12:28 · 203 阅读 · 0 评论 -
jvm日志解读
jvm常用指令java -XX:+PrintGCDetails GCLogAnalysis //打印垃圾回收的事件-XX:+PrintGCDateStamps //打印垃圾回收事件的时间-Xloggc:gclog.txt //将垃圾回收日志打印至一个文件内我的电脑内存是16G,使用四分之一的物理内存作为虚拟机的堆内存如果电脑的总内存小于1G就会使用二分之一的物理内存作为虚拟机的堆内存可以使用-Xmx1g -Xms1g原创 2021-07-04 06:06:36 · 256 阅读 · 0 评论 -
第一次gc就出现晋升的原因
第一次gc就出现晋升的原因:新生代对象每经历依次minor gc,年龄会加一,当达到年龄阀值会直接进入老年代。阀值大小一般为15(最大也是15因为jvm只给了4位存储该值)Survivor空间中年龄所有对象大小的总和大于survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,而无需等到年龄阀值 该年龄是通过内存空间算出来的 这个年龄用来筛选eden+survivor的对象用来晋升 注意这里的age和筛选的范围 其余的对象可能被回收也可能存活下来所以存活下来的对象就是可达的且小于a原创 2021-07-04 00:12:04 · 449 阅读 · 0 评论 -
bit和byte的趣事
1btye单个字节=8bits 八个比特一天,小T去办宽带,被一番推销,办理了一个百兆宽带,于是开心地回家冲浪结果发现测速工具球显示最高下载速度只有12.5兆,于是小T打算去投诉这个 “黑心”运营商,但是却投诉失败了?原因就是运营商在宣传时使用的bit这个单位,而我们电脑在下载时使用磁盘的单位是byte,这两者的单位差刚好是八倍。小T只好吃了这个没文化的亏。...原创 2021-07-03 04:34:41 · 124 阅读 · 0 评论 -
java对象的内存大小
文章目录前言一、java对象占用内存怎么算?二、对象头对象体1.对象头2.对象体分析别用多维数组啦前言一个对象占用多少内存。一、java对象占用内存怎么算?对象头+对象体=对象二、对象头对象体1.对象头对象头 |-标记字 1个机器字 |-Class指针 1个机器字 |-数组长度(int) 数组独有2.对象体对象体 |-内部空白 |-实例数据最后可能还有外部对齐分析64位JVM中对象头占用12byte 8+4 所以一个空类实例也原创 2021-07-01 04:39:17 · 473 阅读 · 0 评论 -
Druid配置
Druid配置使用yml进行连接池配置yml是使用空格的缩进表示层级关系,空格数目不重要,只要是左对齐的一列数据,都是同一个层级的spring是第一级spring.datasource是第二级spring.datasource.druid是第三级spring的datasource的自动装配是通过其org.springframework.boot.autoconfigure.jdbc这个jar包内的DataSourceAutoConfiguration类实现的,是通过META-INF内的sprin原创 2021-03-27 22:33:26 · 5406 阅读 · 2 评论 -
==和equals的区别
==和equals的区别之前做密码校验的时候,遇到了这个问题,当时因为不清楚两者区别,导致了一次bug,现在打算好好分析一下举个例子int i=1;String s="123";String s2="123";String s3=new String("123");boolean res=i==1;//trueboolean res2=s=="123";//trueboolean res3=s==s2;//trueboolean res4=s==s3;//false一开始我也很懵逼,原创 2021-03-25 07:17:07 · 153 阅读 · 1 评论 -
Comparable接口
Comparable接口这个接口会对实现其的类进行排序。这种排序方法被称为这个类的自然排序。List和Arrary这种线性的数据结构可以使用sort()方法进行自动排序。然后实现这个接口的Object可以作为SortedMap的键或者SortedSet的元素不需要实现Comparator。对于一个类C我们说他的自然排序与equals一致,当且仅当其中所有元素满足e1.equals(e2)和e1.compareTo(e2)==0值相等,e1和e2都是类C中的元素。这其中要注意的是null,null不是原创 2021-02-07 11:47:55 · 285 阅读 · 0 评论 -
List接口源码解读
List接口一个有序的collection(序列),就是用户可以准确控制每个元素的插入和通过整数索引去获取每个元素。和Set不一样,List是支持重复的元素出现,还支持null。List接口提供了四种方法通过寻址的方法管理元素。(add,remove,set,get)增删改查。List在Java中是以0开始的(数组)。在LinkedList中,寻址操作消耗的时间是和索引值成正比的。其中提供了ListIterator,支持所有Iterator的操作和元素插入,替换和双向遍历List提供了两种搜索元素原创 2021-02-05 14:19:56 · 251 阅读 · 1 评论 -
Collection源码解读
Collection源码解读Collection就是一组同类型的元素。这个接口干啥的?传递各种集合并且提供一些通用的方法怎么用?大部分集合类都是间接使用这个类,通过其子接口但要实现两个构造器:一个是用来创建一个空的Collection,另一个是可以放置相同类型元素的Collection。出现的异常 UnsupportedOperationException,往一个不可变的集合里加元素就会出现NullPointerException 空指针异常ClassCastException 类转换异常J原创 2021-02-03 22:23:57 · 229 阅读 · 0 评论 -
Consumer
@FunctionalInterfacepublic interface Consumer<T>函数式接口:有且仅有一个抽象方法,但可以有多个非抽象方法Consumer接口就是一个函数式接口Consumer可以认为是一个消费者void accept(T t);因为accept是一个抽象方法,所以可以后面自定义实现对传入元素t的操作。(该方法主要是留给后面定义做什么操作)default Consumer<T> andThen(Consumer<? super T原创 2021-02-02 22:26:58 · 104 阅读 · 0 评论 -
Iterable接口
@Iterable接口所有的集合类源于CollectionCollection又源于Iterable接口Iterator<T> iterator();一个泛型的迭代器JDK 1.5default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); }}循环原创 2021-02-02 22:08:22 · 240 阅读 · 0 评论 -
JAVA反射
什么是反射机制?在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。说白了就是,有一个程序已经在运行了,但是运行中间你想知道某一个类的详细信息。第一反应,那我(人)直接在Project的文件里找到对应的类点开看看这个类的定义(.java文件)不就完事了。我这样也算是动态获取了信息。就java而言肯定不可能这么做,那么java是如何动态获取的呢?就是反射机制了。我们在id原创 2020-11-11 11:50:06 · 96 阅读 · 0 评论