- 博客(41)
- 收藏
- 关注
原创 线程池——创建和关闭
/ 使用ThreadPoolExecutor创建自定义线程池线程池参数介绍可以前往线程池——入门:基于数组的先进先出队列,此队列创建时必须指定大小:基于链表的先进先出队列,如果创建时没有指定此队列大小,则默认为Integer.MAX_VALUE:SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者,必须等队列中的添加元素被消费后才能继续添加新的元素。只有在使用无界线程池或者有饱和策略时才建议使用该队列。
2024-10-18 10:03:12
974
原创 ThreadLocal——简单使用
ThreadLocal 它为每个使用该变量的线程都提供了一个独立的副本,从而每个线程都可以独立地读取、修改自己的副本,从而实现线程级别的数据隔离。适用于在多线程环境下,各线程需要拥有独立变量副本场景。
2024-10-17 13:51:03
494
原创 线程池——入门
存放着大量线程的池子,在应用程序启动时创建一定数量的线程,并将它们保存在线程池中。当需要执行任务时,从线程池中获取一个空闲的线程,将任务分配给该线程执行。当任务执行完毕后,线程将返回到线程池,可以被其他任务复用。防止因为频繁创建、销毁线程导致的开销大、内存溢出OOM异常等问题,提高系统的性能和资源利用率。
2024-10-17 09:01:52
843
原创 面试知识汇总——设计模式
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。可以分为:类的适配器模式、对象的适配器模式、接口的适配器模式。在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。结构型模式:对软件设计的结构的一个总结,重点关注类、对象继承和组合方式使用经验的总结。创建型模式:对对象创建过程的各种问题和解决方案的汇总,如工厂模式、单例模式、构造器模式原型模式。
2024-08-14 22:28:11
289
原创 SQL查询注意事项
判断字符串长度要用函数CHAR_LENGTH(str),他会返回字符串的长度,如果使用length(str)函数,在对中文字符或特殊字符时,返回的是在当前编码下该字符的字节数。如在mysql中的utf-8编码情况下,length('¥')返回结果是3,与预期结果不符。date 操作的时间;INTERVAL为关键词;expr 具体数值;type 时间间隔单位。MySQL不区分大小写,无论是命令的 使用还是内容的识别,都不区分,如下。例如DATE_ADD(date,INTEVAL 1 day)
2024-08-02 21:16:44
304
原创 OSI七层模型
OSI(Open System Interconnect),即开放式系统互连。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 ),即OSI开放系统互连参考模型。
2024-07-26 13:49:35
322
原创 加密算法简单介绍
非对称加密算法加密和解密的密钥不同,非对称加密算法需要两个密钥,一个是公钥、一个是私钥。加密算法与DES算法一致,不过在加密每一块数据块时,会使用3个不同的密钥进行三次加密,安全性比DES算法更高。初始轮密钥加:将明文(或上一轮的密文,在首轮时)与初始轮密钥进行异或运算,作为加密轮次的初始输入。密钥扩展:根据输入的密钥长度(128位、192位或256位)进行密钥扩展,生成多个轮密钥。AES算法通过轮函数和轮密钥的组合,实现了高效且安全的数据加密和解密过程。美国联邦政府采用的区块加密标准,密钥长度支持。
2024-07-26 11:24:56
395
原创 JVM基本知识——类加载机制
(Custom ClassLoader):继承java.lang.ClassLoader实现用户自己的类加载器,通常用来加载一些特殊的类,比如从网络、数据库或特定的二进制流中加载类。
2024-07-23 21:10:18
946
原创 Spring——事务
在同一个事务中的查询在开始时是一致的,但是会存在幻读(多个事务同时修改一条记录,事务之间不知道彼此存在,当事务提交后,后面的事务还会覆盖前事务,前事务就像幻觉)@transactional,可以标在类或方法内,在方法上必须是public。:标明那些方法需要参与事务,以及相关属性,如隔离级别、超过时间。:完全串行化的读,每次读都需要获得表级共享锁,读写相互阻塞。:允许脏读,可能会读取到其他会话中未提交事务修改的数据。:只能读取到已经提交的数据,数据库默认级别。:管理事务的处理过程。
2024-07-23 11:51:40
377
原创 MySQL——视图
视图(view)是一个虚拟的表,不是真实存在,而是通过动态Sql语句查询出的数据集,视图本身并不存储任何数据。视图还可以嵌套视图。
2024-07-20 13:43:54
242
原创 MySQL——在查询中使用关键字
去除查询结果中的重复记录,如查询非同名学生的姓名、班级:select DISTINCT name , class from SC在WHERE 子句中,使用LIKE关键字,进行模糊匹配查询。其中“%”表示匹配0个或多个字符,“_”表示匹配一个字符。查询姓李的同学的姓名:select name from SC where name LIKE '李%'查询姓李,且名字长度为2的同学的姓名:select name from SC where name LIKE '李_'查询第二个字母是s的课程名:select
2024-07-18 22:39:09
466
原创 JVM基本知识——运行空间
虚拟机栈:存储局部变量表,线程私有,线程每执行一个方法就会在栈中创建一个栈阵,调用方法执行入栈、方法返回执行出栈。1.7的永久代和1.8的元空间都是方法区的实现。堆:堆是内存最大的一部分,存储着所有对象的实例,为对象分配内存。程序计数器:记录方法执行的jvm指令地址(native方法则为空,因为用c,不需要编译),本地方法栈:保存执行方法信息,执行java方法是使用栈,native方法使用本地方法栈。即Java虚拟机,是负责读取java字节码,并在实际的硬件环境中运行。方法区和堆是线程共享的。
2024-07-17 17:37:49
406
原创 MySQL——基本查询
查询表的全部信息:--student是要查询的表使用别名查询表中的某个字段,或使用别名创建一个新的字段:select name as studentname from student --把查询出来的名字的列名改为学生姓名select YEAR(GETDATE()) - YEAR(birthday) as age from student --查询学生的年龄,列名为age使用where关键字,根据条件查询表中的某个字段。下面关键字进行组合使用,即可确定筛选条件。
2024-07-13 18:48:40
504
原创 前端页面使用axios请求后端接口,提示还未登陆。但是后端接口使用postman验证确实是可行的
原来是因为我前端页面的端口是8080,后端是8083,存在跨域问题,所以虽然在 Response Header 里看到了set-cookie的操作,但是在浏览器的 application里看到,并没有被设置进来。后端接口是有做对用户登陆状态的校验,使用postman进行测试,该接口功能可能,可以满足业务需求,但是前端使用axios请求时会提示用户还没有登陆,实际上,已经存储了session。1.如果是本地开发,并不想做其他额外的操作,可以选择更换浏览器(搜狗浏览器、360浏览器)
2024-04-16 10:16:28
713
原创 SpringBoot通过UUid实现文件上传接口及问题解决
对应在application.properties中的配置是,需要注意的是从本地计算机中复制过来的地址样式会是D:\src\main...,需要把\改成/,才能被正常读取,否则用这个路径去保存是一定会找不到的。// 需要注意,当你在transferTo这个方法中传入了相对路径,该方法会自动为你拼接上一个默认的路径,会导致虽然保存成功,但是你却找不到该文件。注意的是,代码中还没有包含对静态资源的映射,需要添加一个config实现,缺少这个会影响保存后的显示。
2024-04-09 17:22:56
1227
1
原创 面试知识汇总——垃圾回收器(G1垃圾回收器)
在多线程的情况下,这会带来并发的问题。这个N是多少,主要受到G1回收的效率和用户设置的软实时目标有关。每一次的回收,G1会选择可能回收最多垃圾的Region进行回收。每一个Region,它要么是young的,要么是old的。所谓的Humongous,就是一个对象的大小超过了某一个阈值——HotSpot中是Region的1/2,那么它会被标记为Humongous。1.9后的默认垃圾回收算法,特点是保持高回收率率的同时减少停顿,每次只清理一部分,而不是全部的增量式清理,确保停顿时间不会过长。
2024-03-30 09:00:00
296
原创 面试知识汇总——垃圾回收器(垃圾定义与回收算法思路)
记录对象是否被其他对象引用,当对象没有被其他对象引用就说明这个对象已经可以作为垃圾进行回收了。无法解决循环引用。
2024-03-29 09:00:00
331
原创 面试知识汇总——JVM内存模型
jdk8后,永久代被元空间替代,实际上两者都是方法区的实现。对于永久代,如果生成很多class的话,可能出现PerGen space异常,因为永久代的空间配置有限,是和堆的使用地址连续的,元空间的物理地址不再与堆连续,而存在与本地内存中,内存多大,元空间多大。1.7的永久代和1.8的元空间都是方法区的实现,方法区是内存最大的一部分,被线程共享,存放对象的实例,当堆空间不足时,会抛出OOM异常。栈:又叫方法栈,线程私有,线程执行方法都会创建一个栈阵,用来储存局部变量表,调用方法执行入栈,方法返回执行出栈。
2024-03-28 08:15:00
234
原创 面试知识汇总——Mybatis缓存机制
用户发起查询时,Mybatis根据当前执行的语句生成MappedStatemen,在LocalCache中进行查询,如果缓存命中,直接返回结果给用户,如果没有,就查询数据库,将结果写入LocalCache,最后将结果返回给用户。一级缓存的这个生命周期和sqlsession一致,是一个没有容量限定的HashMap,在缓存的功能性上有所欠缺,最大共享范围是一个sqlsession内部,当有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据,建议设定缓存级别为Statement。
2024-03-27 08:00:00
222
原创 面试知识汇总——MyBatis延迟加载
mybatis是内部封装jdbc,开发时只需要关注SQL语句本身,不需要去处理加载驱动、创建连接等过程,直接编写原生态的Sql语句,可以使用XML文件或注解配置和映射原生信息,避觉得jdbc代码和手动设置参数和获取结果集。在mybatis中仅支持association关联对象和collection关联对象的延迟加载,association指的是一对一查询(联合查询和嵌套查询),collecti指的是一对多查。在配置文件中,启用延迟加载功能:lazyLoadingEnabled = true。
2024-03-26 08:00:00
291
1
原创 面试知识汇总——垃圾回收器(分代收集算法)
如果第一次回收把对象拷贝到From survior里了,那么下一次回收就会把存活的对象从From survior拷贝到To survior,再下一次就会把To survior里的对象拷贝到From surivor,周而复始。那么对象每经历一次垃圾回收之后,那么还存活的话,他的年龄就会加一。当对象的年龄达到阈值的话(默认是15),就会晋升到老年代,老年代里的对象存活率是比较高的。根据对象的存活周期,把内存分成多个区域,不同区域使用不同的回收算法回收对象。对象在创建的时候,会先存放到伊甸园。
2024-03-25 14:02:27
550
1
原创 面试知识汇总——MySQL内置函数检索(locate,position,instr)
SELECT * from app_info where LOCATE('网', `appName`, 2) > 0;注意:LOCATE(substr,str)与 POSITION(substr IN str)是同义词,功能相同。-- 用LOCATE关键字进行模糊匹配, 从第二个字符开始匹配"网",则"网易云游戏、网来商家"等数据就被过滤了。-- 用LOCATE关键字进行模糊匹配,等同于:"like '%网%'"语法: LOCATE(substr, str, [pos])
2024-03-25 13:47:20
592
1
原创 面试知识汇总——Redis高可用(主从、哨兵、集群)
哨兵模式,由一个或多个Sentinel实例组成的Sentinel系统,它可以监视所有的Redis主节点和从节点,并在被监视的主节点进入下线状态时,自动将下线主服务器属下的某个从节点升级为新的主节点。但是呢,一个哨兵进程对Redis节点进行监控,就可能会出现问题(单点问题),因此,可以使用多个哨兵来进行监控Redis节点,并且各个哨兵之间还会进行监控。但是它每个节点存储的数据是一样的,浪费内存,并且不好在线扩容。主从模式中,Redis部署了多台机器,有主节点,负责读写操作,有从节点,只负责读操作。
2024-03-18 09:00:00
2068
1
原创 面试知识汇总——Spring事务
可重复读:在同一个事务中的查询在开始时是一致的,但是会存在幻读(多个事务同时修改一条记录,事务之间不知道彼此存在,当事务提交后,后面的事务还会覆盖前事务,前事务就像幻觉)开启声明式事务:@transactional,可以标在类或方法内,在方法上必须是public。事务应用和属性配置:标明哪些方法要参与事务,以及相关属性,如隔离级别,超过时间。可串行化:完全串行化的读,每次读都需要获得表级共享锁,读写相互阻塞。未提交读:允许脏读,可能会读取到其他会话中未提交事务修改的数据。事务管理器:管理事务的处理过程。
2024-03-17 09:30:00
433
1
原创 面试知识汇总——Redis持久化操作
RDB持久化,是指在指定的时间间隔内,执行指定次数的写操作,将内存中的数据集快照写入磁盘中,它是Redis默认的持久化方式。执行完操作后,在指定目录下会生成一个dump.rdb文件,Redis 重启的时候,通过加载dump.rdb文件来恢复数据。AOF(append only file) 持久化,采用日志的形式来记录每个写操作,追加到文件中,重启时再重新执行AOF文件中的命令来恢复数据。可以这样理解,给当前时刻的数据,拍一张照片,然后保存下来。RDB,就是把内存数据以快照的形式保存到磁盘上。
2024-03-16 10:00:00
712
1
原创 面试知识汇总——Redis缓存穿透和缓存雪崩
每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。
2024-03-15 09:47:21
470
1
原创 面试知识汇总:Redis简介
List:如果列表的元素个数小于512个,列表每个元素的值都小于64字节(默认),使用ziplist编码,否则使用linkedlist编码Hash:哈希类型元素个数小于512个,所有值小于64字节的话,使用ziplist编码,否则使用hashtable编码。Zset:当有序集合的元素个数小于128个,每个元素的值小于64字节时,使用ziplist编码,否则使用skiplist(跳跃表)编码。String是Redis最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512M。
2024-03-14 14:18:24
638
原创 java自定义异常并使用API统一返回对象
在开发中,需要使用API统一返回对象保证后端返回的数据是固定并有格式的,便于前端进行解析,返回相应的信息给用户,这就要求不管程序抛出任何错误或异常,你所返回的对象都应该是:"status": ‘状态码’,"msg": "信息",“data”:“数据”
2024-02-26 21:21:33
1399
1
原创 Error creating bean with name ‘userController‘问题排查及解决
Error creating bean with name ‘userController‘问题排查及解决,由spring boot版本引发
2024-02-22 09:15:00
6796
5
原创 linux中提取jar包文件并对文件进行修改
场景:在linux服务上的jar包有问题,经过查看error.log,可以发现是因为数据库连接指向的网址不对,需要对application文件进行修改。可以看到会有很多文件,如果文件实在太多可以通过jar tvf xxxx.jar |grep 的方式去查找特定的文件。重新运行jar包即可解决问题。通过使用jar xf xxx.jar 对应的路径 去提取对应的文件,可以看到当前目录下已有相应的目录。使用vim命令去打开相应的文件,修改好对应的内容后,保存并退出。
2024-02-21 11:15:00
1446
原创 pgsql创建数据库及添加、修改、删除数据库字段命令
实际上,这样执行会报错,提示使用USING createtime ::timestamp,需要在后面加上USING createtime ::timestamp,最终语句是alter table quotation alter column createtime type timestamp USING createtime ::timestamp。修改示例:alter table quotation alter column createtime type timestamp。
2024-02-20 14:40:29
5040
1
原创 Pgsql常见命令操作:创建数据库,导入配置,打包成dump包
导出为dump包:./pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f /tmp/1.dump db。切换到数据目录:/usr/pgsql-10/bin目录下。导入配置:./psql -h localhost -p 5432 -U postgres -w -d db -f 完整路径如/tmp/1.sql。创建数据库命令:./createdb -h localhost -p 5432 -O postgres 数据库名称。
2024-02-19 12:45:00
1193
1
原创 postgresql-10无法正常启动
通过service postgresql-10 restart命令去启动pgsql后,提示job……,用journalctl -xe查看对应问题,并解决,如果是提示read only file,可以通过执行。去挂载文件系统,恢复可读写状态。
2024-02-18 12:15:00
792
原创 使用su – postgers切换用户,出现-bash-4.2$命令行
原因:我在安装postgresql时,先使用useradd添加了一个名为postgres用户,而在使用useradd的时候,都会将所有的配置文件从/etc/skel复制到新用户的主目录下,一般默认在home下面的新用户主目录下,而关于/etc/skel这个目录,是主要被useradd所用到。解决方法:使用su – postgres 切换,通过pwd命令查看用户所在路径,检查用户所在路径下,是否缺少了文件.bashrc文件,使用cp命令复制到用户所在路径就可以。
2024-02-17 10:45:00
1411
1
原创 Pgsql缺少dblink插件,使用dblink命令无法创建数据库连接
注意:Navicat Premium运行select dblink前应该在数据库查询中运行create extension dblink创建扩展,在这里我是已经运行了create extension dblink,仍然提示找不到该函数。建议先运行create extension dblink,确认是否是由服务器端引起的问题。初步判断是服务器端的pgsql缺少了dblink插件,需要找到pgsql的目录,找到contrlib目录,进入dblink,运行make,make install即可安装。
2024-02-16 12:00:00
673
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人