- 博客(27)
- 收藏
- 关注
原创 Java 内存模型(Java Memory Model)
对于 Java 程序员来说,在虚拟机⾃动内存管理机制下,不再需要像 样为每⼀个 new 操作去写对应的 delete / C/C++ 程序开发程序员这 free 操作,不容易出现内存泄漏和内存溢出问 题。正是因为 Java 程序把内存控制权利交给 JVM 虚拟机。⼀旦出现内存泄漏和溢出⽅⾯的问题, 如果不了解虚拟机是怎样使⽤内存的,那么排查错误将会是⼀个⾮常艰巨的任务。
2024-09-19 14:42:22
227
1
原创 Spring-data-redis
官方推荐两个都启用,如果对数据不敏感,可以选单独用RDB,不建议单独用 AOF,因为可能会出现Bug如果只是做纯内存缓存,可以都不用。
2024-09-18 20:43:29
1299
原创 多线程:java中的实现
synchronized通过加锁实现:只是一个关键字,相当于一个指令,可以实现公平锁。通过java.util.concurrent.atomic中的原子性数据实现。ReentrantLock锁:可以实现公平锁和非公平锁。通过一个实例对象实现充当锁的实现。
2024-09-11 20:06:27
425
原创 线程:java中的使用
此处是针对java中的原码中的状态的解释,进入runable阶段可以分为两种状态:可运行状态,表示时刻准备着等分配,还有一种就是已经运行的状态。通过interrupt()方法,改变中断状态值,并通过抛出一个InterruptedException异常,中断线程执行。默认为5,优先级最低为1,最高为10,具体执行顺序和优先级关系不大,还是操作系统分配时间片。基于操作系统的线程抢占模型,线程会通过yield( ) 实现当前线程对CPU时间的让出。用户线程:主线程完成之后并不会直接结束用户线程(子线程)
2024-09-11 19:19:02
390
原创 ElasticSearch——倒排索引和正向索引
正向索引 (forward index) 以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档如果是根据id查询,那么直接走索引,查询速度非常快。但如果是基于某个关键字做模糊查询,只能是逐行扫描数据,流程如下:1)用户搜索数据,条件是name符合 "%线性%"2)逐行获取数据,比如id为109的数据3)判断数据中的name是否符合用户搜索条件4)如果符合则放入结果集,不符合则丢弃。
2024-07-28 17:41:24
608
1
原创 详解以及Spring Boot整合Redis
hash类型:底层使用哈希表结构实现数据存储 hash存储结构优化 如果field数量较少,存储结构优化为类数组结构 如果field数量较多,存储结构使用HashMap结构。新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式 需要的存储结构:新的存储模型,可以保存可排序的数据。(m代表Multiple)新的存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息。存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型。
2024-07-25 20:33:47
850
原创 {Spring Boot 原理篇} Spring Boot自动装配原理
1,Spring Boot 应用启动,@SpringBootApplication标注的类就是启动类,它去实现配置类中的Bean的自动装配2,而@SpringBootApplicatiozn注解中包含了三个注解:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan@SpringBootConfiguration这个注解包含了@Configuration,@Configuration里面又包含了一个@Component
2024-07-24 20:42:29
1458
1
原创 Spring Boot 核心配置
YAML全称是 YAML Ain't Markup Language。YAML是一种直观的能够被电脑识别的的数据数据序列化 格式, 并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比 如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简 洁。YAML文件的扩展名可以使用.yml或者.yaml。
2024-07-22 20:46:39
581
原创 Spring 循环依赖详解
1,实例化(创建半成品Bean对象):读取配置文件,将每个Bean对象信息封装到BeanDifinition对象中,将其放到BeanDifinitionMap中,然后执行一些Bean工厂后处理器中的方法,最后读取BeanDifinition中的Bean信息,创建出一个Bean对象。Spring IOC容器是用来管理java Bean 对象的,而Spring DI 是依赖注入,即就是给某个java Bean对象将所依赖的java Bean对象注入到Bean对象的属性。4,接口销毁,自定义销毁,
2024-07-21 17:08:38
745
1
原创 Spring MVC
意义:处理用户的请求,相似于doget与dopost位置:类上:一级目录方法:二级目录例如:user/save属性:value="",path="" 表示请求路径(只写这个属性是可省略该属性名)method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式params="" 限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数。
2024-07-19 18:46:44
897
1
原创 Spring 生命周期
/1.自定义MyBeanPostProcessor/* 参数: bean是当前被实例化的Bean,beanName是当前Bean实例在容器中的名称返回值:当前Bean实例对象 */System.out.println("BeanPostProcessor的before方法...");/* 参数: bean是当前被实例化的Bean,beanName是当前Bean实例在容器中的名称返回值:当前Bean实例对象 */
2024-07-19 15:50:37
1004
原创 Spring IOC DI AOP 注解配置方式
spring的配置1.spring2.5前==xml2.spring2.5后==xml+annotation3.spring3.0后==JavaConfig+annotation配置类spring2.5后=xml+annotation。
2024-07-18 19:50:38
765
原创 Spring IOC DI 入门 XML方式
springIOC:springIOC容器扮演项目的载体,管理整个Java项目,ioc容器可以使得项目更符合高内聚,低耦合的变成思想,"解耦"耦合:类与类有耦合,方法与方法有耦合解耦: 1.尽量避免new对象,通过反射实例化2.需要创建的对象不要写死,而是把类名保存在独立的properties文件中,按需加载● 关键字:IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系。
2024-07-18 18:32:07
921
原创 AES(对称加密)算法的两种工作模式
密钥长度直接决定加密强度,而工作模式和填充模式可以看成是对称加密算法的参数和格式选择。Java标准库提供的算法实现并不包括所有的工作模式和所有填充模式。最后,值得注意的是,DES算法由于密钥过短,可以在短时间内被暴力破解,所以现在已经不安全了。●对称加密算法使用同一个密钥进行加密和解密,常用算法有DES、AES和IDEA等;●密钥长度由算法设计决定,AES的密钥长度是128/192/256位;●使用对称加密算法需要指定算法名称、工作模式和填充模式。ECB模式是最简单的AES加密模式,它需要一个。
2024-04-21 12:00:50
589
1
原创 Hash算法
哈希算法用于检测文件是否被篡改,用户密码加密等,由于在不发生哈希碰撞的前提下,同样的输入,同样的哈希算法,信息摘要的结果是相同的所以可以有以上用途,因此当作为密码时,就很容易被解密(就是暴力试探即可解密)URL编码:网页地址栏中会对中文进行编码,就是通常我们在地址栏看到的类似于一堆乱码一样,肉眼看不懂是啥的东西,这是应为是通过URL编码把中文转化之后的结果。Base64编码:URL编码是对字符进行编码,表示成%xx的形式,而Base64编码是对二进制数据进行编码,表示成文本格式。
2024-04-21 11:24:51
540
2
原创 Mybatis中的注解
Mybatis中的注解:之所以有注解方式,就是在定义接口时,配合XML文件去使用时,之所以还需要使用XML文件,原因在于定义完接口,入参,出参,都知道,唯独不知道sql语句是什么,此时注解就告诉了SQL语句,通过动态代理即可实现目的;方法中构建SQL语句:注解@SelectProiver();注解中不存在多对多映射概念,当需要多对多时,看成了一对一;one一对一中查询的属性,@one(select=“从表中的查询方法地址”)涉及到的标签:@results @result @One @many。
2024-01-22 20:17:15
377
原创 Servlet学习总结
session定义:是一个会话空间,每个用户有不同的会话空间,seesion存在于用户和服务器之间,放在同一个session中的数据可以只要是在同一个用户同一个会话时间即可实现数据共享,保存在服务器上;JSP是被发布上去之后,先有服务器翻译为java文件,再有编译为class文件,但这儿两个步骤再发布成功后之后执行一次,以后都去直接执行,所以在刚开始JSP比Servlet特别慢;生命周期,默认就是会话关闭,也就结束了,不存在了,可以用 cookie1.setMaxAge();而且只能保存字符串类型的数据;
2024-01-18 19:28:25
814
1
原创 MyBati框架
入参类型确定了parameterType,唯一找不到的就是执行什么SQL语句,于是可以通过方法名与SQL的ID映射上,全都解决后就可以通过动态代理去实现接口执行sql;MyBatis刚开始去加载主配置文件,以及所有的Mappers中的所有XML文件,这个阶段他就已经知道哪个SQL的Id对应的那个Sql语句。3,传入多个参数,通过#{arg0},#{arg1}#{arg2}或者#{param1},#{param2}#{param3}2,Map集合(创建一个Map集合,通过key去找到对应的value)
2024-01-15 19:51:57
871
原创 队列:先进先出
实现V开头的在前,A开头的在前,同时按后面的数字大小升序出队。> c, Object o) 获取集合中,指定元素出现的频率(次数)> list, int i, int j) 交换集合中指定下标位置的两个元素。同时对头元素也可以通过实现compartor接口重写compar方法,实现出队时对头元素的自定义。> list) 将集合中的所有元素随机乱序。优先队列:对头元素默认都最小的那个,其他元素是无序的,出队的顺序默认是升序地。无界队列:队列的存储上限是内存的上限。
2023-08-17 20:23:30
52
1
原创 HashMap中的方法详解与其扩容方式
V putifAbsent(K key ,V val),如果存在该key值,则不会存进去该val值,返回已经存在的那个val值,相反,不存在要插入的Key,则不会插入此val值。6相较于前面的方法,传入的Key值不存在时执行此方法,通过计算value值,然后把计算后的value值存入原有Map中,V replace(K Key ,V val)//通过Key去找到要被替换的val值,然后把值修改为该val。V put(K key,V val)//如果遇到重复的key,覆盖原来的val的值,返回原来的val。
2023-08-15 21:46:30
98
1
原创 HashMap的数据结构
这个Node类的成员变量hash用来确定该节点应该存在数组的哪个下标位置,,Key,value,顾名思义。hash码对于不同Key重复的概率相对较大,主要原因是因为在计算hash码时,Key的高16位不参与运算,,因此为了降低重复概率,手动让他参与用算。目前下标也计算好了,Key,value,也有了,next先不管,他会把这几个封装成一个node对象,然后存到Node类型的数组相应的位置;这时就有一个问题,当对应的Key出现了多个重复值时,这时他就会用next创建一个该数组的分支,也就是链表。
2023-08-14 21:23:28
39
原创 Set集合接口的常见问题解析
在计算hash码时是根据地址去计算,返回一int类型的十六进制的整数,要知道int他还是有范围的,当数据产生溢出时它会在原来的十六进制上减去int数据类型的模,以保证他在int类型的范围。但是实际数据并不一样。1,先是把每个元素的hash码用来你比较,如果hash码不一样,则直接返回false,及判断元素不一样,如果hash码一样,并不能直接判断元素使一样的,由于hash码他也是有范围的及就是int 范围不同元素的hash码有可能是一样的。2,用equals()方法比较元素的值是否相同,结果是唯一的。
2023-08-13 14:41:22
120
2
原创 List接口的实现类常见问题总结
适用于写多读少的场景,由于它的底层双向链表的实现,所以访问最好是通过迭代器遍历,没有ArrayList的那种用下标直接读方便得多,虽然LinkedList用下标访问可以但是不太推荐,只能从头从尾部开始比较好,而ArrayList就可以用下标获取,想取哪个去哪个,因此ArrayList更适合多多写少的地方。1,ArrayList没有实现RandomAccess接口,性能比较好,但是他是单线程的,而在实际中,服务器都是都是多线程,因此会造成数据的重复覆盖,造成错误;2,获取元素从头获取 getfirst();
2023-08-13 13:50:07
60
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人