- 博客(52)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【2022最新版】Java经典面试题(309道)
为了能让HashMap的存数据和取数据效率高,尽可能地减少hash值的碰撞,也就是说尽量把数据均匀分配,每个链表或者红黑树的长度相等。我们首先可能会想到 % 取模的操作来实现。取余(%)操作中如果除数是 2 的幂次,则等价于与其除数减一的与(&)操作(也就是说hash % length == hash &(length - 1) 的前提是 length 是 2 的 n 次方)。并且,采用二进制位操作 & ,相对于 % 能够提高运算效率。抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。
2022-11-05 16:07:01
3111
1
原创 【MySQL】binlog数据恢复
binlog二进制日志记录保存了所有执行过的修改操作语句,不保存查询操作。如果 MySQL 服务意外停止,可通过二进制日志文件排查,用户操作或表结构操作,从而来恢复数据库数据。binlog 是逻辑日志,记录的是这个语句的原始逻辑。
2023-11-27 16:27:10
510
原创 G1垃圾收集器
它默认的停顿目标为两百毫秒, 一般来说, 回收阶段占到几十到一百甚至接近两百毫秒都很正常, 但如果我们把停顿时间调得非常低, 譬如设置为二十毫秒, 很可能出现的结果就是由于停顿目标时间太短, 导致每次选出来的回收集只占堆内存很小的一部分, 收集器收集的速度逐渐跟不上分配器分配的速度, 导致垃圾慢慢堆积。区,而不是让大对象直接进入老年代的Region中。这个参数的值,在保证他的年轻代gc别太频繁的同时,还得考虑每次gc过后的存活对象有多少,避免存活对象太多快速进入老年代,频繁触发mixed gc。
2023-11-22 15:34:02
159
原创 JVM垃圾收集器
Java虚拟机的垃圾收集器是内存回收的具体实现,主要用于回收不再使用的对象,释放内存空间。Java虚拟机提供了多种垃圾收集器,不同的垃圾收集器适用于不同的场景和需求。在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。
2023-11-21 15:31:03
735
原创 JVM对象创建与内存分配
大量的对象被分配在eden区,eden区满了后会触发minor gc,可能会有99%以上的对象成为垃圾被回收掉,剩余存活的对象会被挪到为空的那块survivor区,下一次eden区满了后又会触发minor gc,把eden区和survivor区垃圾对象回收,把剩余存活的对象一次性挪动到另外一块为空的survivor区,因为新生代的对象都是朝生夕死的,存活时间很短,所以JVM默认的8:1:1的比例是很合适的,让eden区尽量的大,survivor区够用即可。对象晋升到老年代的年龄阈值,可以通过参数。
2023-11-20 15:11:15
839
原创 JVM类加载机制详解
自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法,一个是loadClass(String, boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空方法,所以我们自定义类加载器主要是重写findClass方法。try {//defineClass将一个字节数组转为Class对象,这个字节数组是class文件读取后最终的字节数组。
2023-11-17 16:51:17
846
原创 MySQL内部组件与日志详解
key 是查询的语句,value 是查询的结果。开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如下所示 (在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证)。同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
2023-11-16 16:51:49
218
原创 【MySQL】MVCC(多版本并发控制)详解
MVCC,全称 Multi-Version Concurrency Control ,即多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC就是在ReadCommitted(读已提交)、RepeatableRead(可重复读)隔离级别,不加锁的情况下,解决并发事务的脏读、幻读和不可重复读问题。
2023-11-15 18:55:28
527
原创 MySQL锁机制详解
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。锁粒度: 表锁、页锁、行锁。锁性质: 共享(读)锁、排他(写)锁、意向共享(读)锁、意向排他(写)锁。锁思想: 悲观锁、乐观锁。读取操作(SELECT)时创建的锁。其他用户可以并发读取数据,但在读锁未释放前,也就是查询事务结束前,任何事务
2023-11-14 16:00:23
323
原创 MySQL事务详解
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务。我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制、日志机制,用一整套机制来解决多事务并发问题。
2023-11-14 11:41:39
211
原创 MySQL索引优化
1)MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。2)order by满足两种情况会使用Using index。1) order by语句使用索引最左前列。2) 使用where子句与order by子句条件列组合满足索引最左前列。3)尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。4)如果order by的条件不在索引列上,就会产生Using filesort。
2023-11-13 16:03:23
159
原创 EXPLAIN详解(MySQL)
EXPLAIN语句提供MySQL如何执行语句的信息。EXPLAIN与SELECT, DELETE, INSERT, REPLACE和UPDATE语句一起工作。EXPLAIN返回SELECT语句中使用的每个表的一行信息。它按照MySQL在处理语句时读取表的顺序列出了输出中的表。MySQL使用嵌套循环连接方法解析所有连接。这意味着MySQL从第一个表中读取一行,然后在第二个表、第三个表中找到匹配的行,以此类推。当处理完所有表后,MySQL输出选中的列,并回溯表列表,直到找到一个有更多匹配行的表。
2023-11-10 14:50:55
444
原创 Java设计模式
设计模式是一套经过反复使用的代码设计经验,目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于人于系统都是多赢的,它使得代码编写真正工程化,它是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
2023-05-03 11:49:45
826
1
原创 Java使用EasyExcel根据模板导出excel
但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便。
2023-04-22 16:29:20
3070
原创 Linux防火墙开放端口
运行完第二歩,表示添加端口已成功,可以用查看端口开放状态命令,查到是否开启成功。运行命令后,返回yes表示已打开,返回no表示未打开。若防火墙没打开,先打开防火墙。
2023-04-07 11:34:10
13939
1
原创 vue使用vue-h265-player播放h265编码格式视频流
复制node_modules/h265-player/lib/libDecoder.wasm文件到public目录下。url: 需要播放的链接,播放器会根据该值的变化自动重启。on-error: 链接不可用时会触发该方法。支持h265编码格式视频流播放。
2023-03-17 10:16:13
4348
5
原创 Java设计模式:模板方法模式
定义一个操作的算法骨架,而将一些步骤延迟到子类。模板方法模式使得子类可以改变一个算法的结构,可重定义该算法的某些特定步骤。模板方法是基于继承实现的,在抽象父类中声明一个模板方法,并在模板方法中定义算法的执行步骤(即算法骨架)。在模板方法模式中,可以将子类共性的部分放在父类中实现,而特性的部分延迟到子类中实现,只需将特性部分在父类中声明成抽象方法即可,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤,不同的子类可以以不同的方式来实现这些逻辑。
2023-03-07 20:39:00
177
原创 Java设计模式:策略模式
将类中经常改变或者可能改变的部分提取为作为一个抽象策略接口类,然后在类中包含这个对象的实例,这样类实例在运行时就可以随意调用实现了这个接口的类的行为。比如定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化,这就是策略模式。
2023-02-18 17:29:00
162
原创 Java设计模式:装饰器模式
在不改变原有对象的基础上,将功能附加到对象上。装饰器模式可以动态给对象添加一些额外的职责从而实现功能的拓展,在运行时选择不同的装饰器,从而实现不同的行为;比使用继承更加灵活,通过对不同的装饰类进行排列组合,创造出很多不同行为,得到功能更为强大的对象;符合“开闭原则”,被装饰类与装饰类独立变化,用户可以根据需要增加新的装饰类和被装饰类,在使用时再对其进行组合,原有代码无须改变。
2023-02-11 17:58:59
171
原创 Java设计模式:适配器模式
将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容不能一起工作的那些类可以一起工作。
2023-02-04 14:11:22
146
原创 Java使用Netty实现Modbus-RTU通信协议
NIO整个调用流程就是Java调用了操作系统的内核函数来创建Socket,获取到Socket的文件描述符,创建一个Selector对象,对应操作系统的Epoll描述符,将获取到的Socket连接的文件描述符的事件绑定Selector对应的Epoll文件描述符上,进行事件的异步通知,这样就实现了使用一条线程,并且不需要多的无效的遍历,将事件处理交给了操作系统内核(操作系统中断程序实现),大大提高了效率。ZHC4012是一款全网通七模4G DTU,支持2G/3G/4G信号透明传输。其它就是传送的数据。
2022-12-27 17:44:49
9269
5
原创 Java计算集合里出现次数最多的元素
第一步先统计出List集合中每个元素出现的次数。第二步计算Map中最大出现次数,求Map中Value(值)的最大值。
2022-12-22 15:41:41
2132
原创 Java设计模式:享元模式
运用共享技术有效地支持大量细粒度的对象。系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量。
2022-12-09 21:17:21
218
原创 Java设计模式:原型模式
原型模式主要用于对象的创建,使用原型实例指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象。当代码不依赖需要复制的对象的具体类时,使用原型模式。原型模式的核心是就是原型类 Prototype,Prototype 类需要具备以下两个条件:原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。原型模式比 new 方式创建对象的性能要好的多,因为 Object 类的 c
2022-12-07 21:26:10
369
原创 Java实现十六进制转浮点数
使用Float.intBitsToFloat()方法419e6666十六进制字符串转浮点数结果为:19.8,支持带符号转换(支持正数负数)。
2022-11-11 10:44:14
2853
1
原创 Java设计模式:建造者模式
建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程;通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来,使得同样的构建过程可以创建不同的对象;并且每个具体建造者都相互独立,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。
2022-09-22 15:11:52
692
原创 Java设计模式:抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式主要用于创建相关对象的家族。当一个产品族中需要被设计在一起工作时,通过抽象工厂模式,能够保证客户端始终只使用同一个产品族中的对象;并且通过隔离具体类的生成,使得客户端不需要明确指定具体生成类;所有的具体工厂都实现了抽象工厂中定义的公共接口,因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。
2022-09-08 11:10:14
257
原创 Java设计模式:工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使得一个类的实例化延迟到子类。工厂方法模式将工厂抽象化,并定义一个创建对象接口。每增加新产品,只需要增加该产品及对应的实现工厂类,将对象的实例延迟到子类,这样设计就符合开闭原则。在使用时,只需知道产品对应的具体工厂,关注具体的创建过程,甚至不需要知道具体产品类的类名,当我们选择哪个具体工厂时,就已经决定了实际创建的产品是哪个了。
2022-09-07 19:34:23
168
原创 Java设计模式:单例模式
3、编译器(JIT),CPU有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过volatile关键字进行修饰,对于volatile修饰的变量可防止指令重排序。单例模式确保系统中某个类只有一个实例,该类自行实例化并向整个系统提供这个实例的公共访问点,除了该公共访问点,不能通过其他途径访问该实例。1、系统中只存在一个共用的实例对象,无需频繁创建和销毁对象,节约了系统资源,提高系统的性能。2,连接:a.验证、b.准备(静态变量属性赋值)、c.解析。重量级对象,不需要多个实例,如线程池,数据库连接池。
2022-09-02 11:56:52
216
1
原创 MySQL面试题总结
脏读:一个事务读取到另一个事务尚未提交的数据。对于事务A和事务B,事务A读取事务B修改后的数据,如果事务B未提交,然后事务B回滚,那么事务A读取的就是脏数据。不可重复读:一个事务中两次读取的数据的内容不一致。事务A多次读取同一条数据,如果事务B在事务A读取过程中,对数据修改并提交,那么事务A多次读取的数据不一致。幻读:一个事务中两次读取的数据量不一致。事务A读取表数据量是,如果事务B在事务A读取过程中插入了几条数据,那么事务A就会出现两次读取数据量不一致。
2022-08-21 14:03:15
208
原创 JVM内存模型
JavaVirtualMachine(Java虚拟机),它是一个虚拟出来的计算机,是通过在实际的计算机仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关信息,使得Java程序只需要生成在Java虚拟机上运行的字节码,就可以在多种平台不加修改的运行。Java虚拟机在执行字节码时,实际上最终还是把字节码解释为具体平台的机器码指令。...
2022-07-16 14:28:44
211
原创 深入理解Java内存模型JMM
JMM概念Java内存模型(Java Memory Model,JMM)。Java语言规范中,JVM中存在一个主存区(Main Memory或Java Heap Memory),Java中所有变量都存在主存中,对所以线程是共享的,而每个线程又存在自己的工作内存(Working Memory),工作内存中保存的是主内存中某些变量的拷贝,线程对对所有变量的操作并非发生在主存区,而是发生在工作内存中,而线程之间不能直接相互访问,变量在程序中的传递,是依赖主存完成的。JSR-133(Java内存模型与线程规范)
2022-05-29 22:14:46
238
原创 Java实现串口通信
串口通信原理串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。 尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根
2022-05-10 11:07:16
14525
17
原创 Java实现视频编码格式转换(转libx264编码格式)
导入依赖 <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId> <version>2.4.5</version> </dependency> <dependency>
2022-04-21 10:56:02
4566
原创 Linux常用基本命令
Linux命令一、目录操作命令1.1 目录切换2.2 目录查看2.3 创建目录2.4 删除目录2.5 搜索目录二、文件操作命令2.1 创建文件2.2 删除文件2.3 编辑文件2.4 查看文件2.5 文件内部搜索三、压缩和解压命令3.1 tar 压缩3.2 tar 解压3.3 zip 压缩3.4 unzip 解压四、其它命令4.1 查看服务器是否可用4.2 查看服务器端口是否可用4.3 查看进程4.4 通过PID查询占用的端口号4.5 杀死进程4.6 防火墙4.7 查看网络信息一、目录操作命令1.1 目
2022-03-30 17:14:34
2111
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人