- 博客(284)
- 收藏
- 关注
原创 mysql的分页
如果查询的排序列没有索引,MySQL可能需要扫描整个表并对结果进行排序,然后再应用 LIMIT 和 OFFSET。如果查询包含索引列并且使用了索引进行排序,MySQL可以利用索引来快速定位数据,避免全表扫描。
2024-08-07 11:16:21 157 1
原创 虚拟机类加载机制
与那些编译时需要进行连接的语言不同,在java语言中,类型的动态加载:编写一个面向接口的应用程序,可以等到运行时再指定其实现类。
2024-08-06 09:09:47 242
原创 虚拟机字节码执行引擎
代码编译的结果从本地机器码转换为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。虚拟机的执行引擎是依托于物理机的执行引擎的,物理机的执行引擎是直接建立在处理器,缓存,指令集和操作系统层面的,而虚拟机的执行引擎则是由软件自行实现的。
2024-08-01 17:37:18 423
原创 Serializable 接口
Serializable 是一个标记接口(marker interface),没有定义任何方法。实现这个接口仅仅是为了标识该类的对象可以被序列化。JVM通过检查一个类是否实现了 Serializable 接口来决定是否可以对其进行序列化。在 Java 中,serialVersionUID 是一个特殊的字段,JVM 会在序列化和反序列化过程中自动检查这个字段,以确保序列化对象的版本与反序列化对象的版本一致。为什么要实现 Serializable 接口?
2024-07-30 11:41:38 213
原创 JDBC基础
DataSource:通常会委托给底层的连接池实现(如Apache DBCP、C3P0、HikariCP等)来管理连接。这些连接池实现会内部使用DriverManager或其他方式来创建实际的数据库连接。ResultSet 代表一个查询结果的集合,可以包含多行数据。DriverManager:直接通过驱动类管理数据库连接。通过光标移动方法可以逐行访问数据。支持通过列名或列索引获取数据。
2024-07-30 11:37:06 147
原创 synch也有自己的同步队列和等待队列,就相当于自己实现了一个Lock接口的互斥锁,并且实现了锁升级,并且内部实现了一个Condition
synch也有自己的同步队列和等待队列,就相当于自己实现了一个Lock接口的互斥锁,并且实现了锁升级,并且内部实现了一个Condition。
2024-07-24 10:28:16 99
原创 java的多态
方法重载指的是在同一个类中,方法名相同但参数列表(参数类型和参数个数)不同的方法。方法重载是静态多态性。编译器会根据方法调用时传递的参数来决定调用哪个具体的方法。方法重写是指子类重新定义父类中已经定义的方法。重写是动态多态,也称为运行时多态性。
2024-07-22 17:42:52 242
原创 java中的常量池
一个Java类文件的大致结构如下:魔数(Magic Number):标识文件类型,值为0xCAFEBABE。版本号(Version):次版本号和主版本号。常量池(Constant Pool):包含常量池条目。访问标志(Access Flags):类或接口的访问权限和属性。类索引、超类索引、接口索引集合。字段表(Fields Table):字段的定义。方法表(Methods Table):方法的定义。属性表(Attributes Table):类、字段、方法的附加信息。
2024-07-22 12:06:15 196
原创 java中的线程池
如果没有空闲线程(并且核心线程池没有满),那么将会创建一个核心线程,如果核心线程满了,任务会加入阻塞队列,如果阻塞队列满了,会使用拒绝策略。在HotSpot的线程模型中,java线程被一对一映射为本地操作系统线程。当线程终止时,操作系统线程会被回收。一旦线程在 ThreadPoolExecutor 中被创建出来,它会从阻塞队列中获取任务并执行。
2024-07-21 20:08:48 211
原创 java并发基础
针对频繁阻塞(休眠或者IO操作)的线程需要高优先级,而偏重计算的线程,应该时低优先级,从而保证处理器不会被独占。在不同jvm和操作系统上,线程规划会存在差异,有些甚至会忽略。
2024-07-20 10:13:54 1168
原创 java内存模型
在共享内存中,同步是显示的,必须控制代码块在线程间互斥执行(方法原子性调用)。在消息传递中,因为需要发送消息和接收处理结果,所以同步是隐式的。
2024-07-18 07:48:58 745
原创 java锁升级
MarkWord无锁状态记录了HashCode,分代年龄,锁标志位。偏向锁记录了线程ID,分代年龄,锁标志位。轻量级锁记录了指向栈中锁记录的指针。重量级锁记录了指向操作系统互斥量的指针。
2024-07-17 11:49:13 152
原创 Tomcat线程和连接
建立连接后会向tomcat请求执行线程,如果有则处理请求,如果没有,则进入等待。先建立连接,如果超过了最大连接数,那么进入等待队列。会预热工作线程,而随着请求而追加临时线程数。
2024-07-15 11:32:44 177
原创 单例模式java
可能一个线程new,另一个线程此时因为重排序,指针不为null但是空间没有初始化。a=new A();这条语句,他需要:开辟空间,初始化空间,指针指向空间,。所以给a加volatile,保证不会重排序。
2024-07-13 20:43:20 323
原创 mysql的explain
id:执行顺序select type:查询语句的操作类型table:表parititions:表分区type:查询所用的访问类型possible-keys:可能用到的索引key:实际查询用到的索引key-len:所使用的索引的长度(主要是看联合索引)ref:使用索引时,与索引进行等值匹配的列或者常量rows:预计扫描的行数(索引行数或者表记录行数)filtered:表示符合查询条件的数据百分比extra:额外信息。
2024-07-13 16:57:37 618
原创 Redis的主从复制
slaveeof 主Redis服务器ip 端口此后slave只能读不能写了,并且slave的数据和master的相同。只能写master。此时主从服务器之间会存在不一致的情况。
2024-07-12 12:22:32 378
原创 mysql默认开启索引下推,减少回表的数据
在没有索引下推优化的情况下,当 MySQL 使用索引进行查询时,它会从索引中获取符合条件的索引条目,然后回表(访问实际数据行)并将结果返回给 MySQL 服务器层进行进一步的过滤。这种情况下,即使某些索引条目不符合查询的所有条件,MySQL 也需要回表读取完整的数据行。引入索引下推优化后,MySQL 可以在存储引擎层(如 InnoDB)就执行部分查询条件的过滤。这样可以显著减少需要回表的次数,从而提高查询性能。
2024-07-10 23:42:32 359
原创 Redis数据结构和持久化
set key value(相同的key会覆盖)get keyincr keydecr keysetex key seconds value seconds秒后失效ttl keydel key。
2024-07-07 23:35:09 686
原创 redolog的刷盘策略
2:实时写,延时刷。每次提交事务都将redo log写入os buffer,但并不会马上调用fsync()刷如磁盘,而是间隔1秒调fsync()刷盘。相对于每次提交都写盘和每隔1秒写盘,实施写os buffer延时刷盘是一个数据一致性与性能的之间的这种方案。提交事务时不会将redo log写入os buffer,而是每隔1秒将redo log写入os buffer并调用fsync()刷入磁盘。1:实时写,实时刷。每次提交事务都将redo log写入os buffer并调用fsync()刷入磁盘。
2024-07-06 13:20:12 414
原创 linux的服务管理
systemd 是一个系统和服务管理器,用于Linux操作系统中,旨在替代传统的Unix系统V初始化系统(SysV init)。不一定所有使用 yum 安装的软件都可以通过 systemctl start 来管理。能否通过 systemctl start 管理取决于软件包是否提供了相应的 systemd 单元文件。如果软件没有提供 systemd 单元文件如果软件包没有提供 systemd 单元文件,但你希望通过 systemctl 来管理它,可以手动创建一个 systemd 单元文件。
2024-07-06 11:09:13 463
原创 Java类文件
Class文件是以无符号字节为基础单位的二进制流,每个数据项目严格按照顺序紧密地排列在文件中。java在javac进行编译时不会像c++一样进行连接,而是在加载class文件时动态连接。在class文件中不会存储方法,字段在内存中的地址,而是在使用时经过虚拟机的转换才能使用。字面量:文本字符串,final常量。常量池中主要放置字面量和符号引用。符号引用:导出的包,字段,方法等。
2024-07-04 23:29:37 100
原创 java对象的访问定位的两种方式
句柄访问:reference中存储的稳定,对象实例位置改变,只需要改变句柄池中的对象实例指针直接指针访问:HotSpot方式:效率高
2024-07-04 11:34:20 247
原创 java中的hashCode()和equals()
如果两个对象使用 equals() 方法比较返回 true,那么它们的 hashCode() 方法应该返回相同的整数值(但反之不一定成立,即相等的对象必须具有相同的哈希码,但相同的哈希码并不一定代表对象相等)。默认情况下,hashCode() 方法由 Object 类实现,它返回对象的内存地址的整数表示。但是,通常我们需要根据对象的内容重写 hashCode() 方法以确保一致性。
2024-07-01 13:17:28 270
原创 java中的即时编译器:JIT
javac将源文件编译为class文件,class文件类加载到jvm中,jvm就使用解释器执行class文件,如果jvm识别到热点代码,就将其转换为机器指令,那么jvm会直接使用机器指令,而不使用解释器。如果不使用 JIT 编译器,Java 程序将会完全依赖解释器来执行字节码。解释器会逐条解释并且将其转换为机器指令和执行 Java 字节码指令。
2024-07-01 11:36:11 128
原创 装饰器模式
代理模式(将真正执行的对象作为成员变量),是基础的组合复用的思想,装饰器模式也是基于此的。装饰器模式动态地给一个类增加了一些功能或者重写了方法。
2024-06-29 22:17:35 211
原创 HTTP的类别和发展
HTTP/1.0:引入头部、多种请求方法和非持久连接。HTTP/1.1:默认持久连接、管道化、增强缓存控制和分块传输编码。HTTP/2:二进制协议、多路复用、头部压缩和服务器推送。HTTP/3:基于 QUIC 的 UDP 协议、更快的连接建立、内置加密和改进的多路复用。
2024-06-23 12:31:59 518
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人