
笔记
文章平均质量分 55
LSZXZNJ
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java项目结构简要说明
6. 在 main / test 文件夹下 再建两个文件夹,名为 java / resources ,java 文件夹下 存放 java源码文件,resources 文件夹下存放 资源文件。5. 在src 文件夹下,建立两个文件夹,名为 main / test ,main 文件夹 放源码文件,test文件夹放测试相关的源码文件。3. 再当前文件夹下建立一个 src 名字的 文件,所有 源码相关的都是再这个文件夹下,包括 java文件 和 属性文件。在开发一个Java项目时,项目文件是如何组织的?原创 2024-11-01 17:36:42 · 579 阅读 · 0 评论 -
ES面试题
2022最新ES面试题整理(Elasticsearch面试指南系列)-优快云博客原创 2024-11-26 19:35:44 · 120 阅读 · 0 评论 -
mysql排序问题
mysql 会根据 主键的 排序 来插入数据的,因此,如果主键不是 自增的,那么再插入的时候就会 存在 分页等问题。另外,如果 查询语句 不指定排序字段,默认是用主键升序排序的。虽然是 d 先插入表中,a后插入表中,但是 在 表中存储的数据 是 a 在 d 之前,这就是 排序规则的作用。mysql 建数据库时,需要指定 字符集 和 排序规则。安照下面的sql顺序执行插入,它们的排序是什么样的?也可以指定具体的字段。原创 2024-12-12 10:48:55 · 207 阅读 · 0 评论 -
spring @Async
1. 需要在类路径存在 ThreadPoolTaskExecutor,这个类是 是spring context模块下的类,也就是 需要引入 spring context 依赖,这个基本都会引入。如果不存在TaskExecutorBuilder类型的bean,这在这里注册默认的TaskExecutorBuilder。这个Executor 是 jdk中的线程池的顶级父类,也就是 如果 容器中存在这个线程池bean,就不构建了。此时,不论是 用默认的 还是 自定义的,线程容器中已经存在了 一个 线程池。原创 2024-11-22 15:47:50 · 531 阅读 · 0 评论 -
应用服务可以接收的连接数是多少
tcp全连接队列大小 由 应用程序 指定的 和 操作系统两个参数 取最小。Linux操作系统 默认 128。当全连接队列满了之后,新的连接 发起tcp连接 是再半连接队列中保存,如果半连接队列 过小 也会影响并发连接。操作系统tpc全连接队列中会有 7个 连接 等待tomcat accept取出。现有使用spring boot项目,tomcat设置如下。这个配置理论上,可以同时并发 9 个连接。一个服务启动后,最大可以并发多少个连接?tomcat 会处理 2个连接。原创 2024-11-13 13:52:44 · 250 阅读 · 0 评论 -
BIO是怎么实现的
需要注意的是,这里accept 和 socket的读写操作都是 阻塞型的,也就是 会消耗掉一个 线程。这也就是 BIO 效率低的原因。操作系统 此时 仍然在 1440 上监听 连接请求,如果有新的连接过来,会再返回一个 新的数字,比如 1880,以此类推。操作系统就会在 1440 上监听 连接请求,当接收到连接请求时,会返回一个 新的数字,比如 1864。1440 是固定的 一个用于服务端监听连接的,新的连接生成的 是 随机的。一个网络连接,就是 一个 int 型的 数字,一个数字 代表一个连接。原创 2024-11-07 15:59:18 · 183 阅读 · 0 评论 -
源码级梳理Web服务流程
ServletContextInitializer接口好像不是 servlet规范里的接口,纯粹是 spring boot 2.3.12自己定义的接口,方便扩展。WebApplicationInitializer接口好像不是 servlet规范里的接口,纯粹是 spring web模块自己定义的接口,方便扩展。web服务的规范,不得不提Servlet,Servlet指定了web应用的规范,其中定义了servlet相关的接口和filter相关的接口。原创 2024-11-02 22:25:11 · 655 阅读 · 0 评论 -
VMWare NAT 模式下 虚拟机上不了网原因排查
编辑网卡配置:/etc/sysconfig/network-scripts/ifcfg-ens33。vmware 按照了Linux之后 无法上网,搞定后,记录一些信息。VMnet1 对应的是 Host-Only(仅主机模式)另外,一个原因是,VMware 的 NAT服务没有启动。VMnet8 对应的是 NAT(网络地址转换模式)在NAT模式中,需要设置NAT和DHCP。理论上,走到这里,是可以通的。需要保证这两个服务是启动的才行。window有两个虚拟网卡。原创 2024-10-16 13:24:30 · 2626 阅读 · 0 评论 -
linux 安装docker
【代码】linux 安装docker。原创 2024-08-14 21:09:33 · 182 阅读 · 0 评论 -
kotlin简介
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。上述 定义了 main 方法, 和一个 普通的方法。在 kotlin 文件下 创建 一个名为 FirstKotlin.kt 的文件。新建一个 名为 kotlin 的 文件夹,作为 kotlin 代码的目录。可以看到,使用的 jdk 来运行的。原创 2024-08-08 17:11:49 · 647 阅读 · 0 评论 -
protobuf protostuff 区别
如果你正在构建一个需要跨语言通信的大型系统,或者你希望在编译时就定义好数据结构,那么protobuf可能是更好的选择。如果你正在寻找一个更轻量级、更灵活的解决方案,或者你的应用程序需要在运行时动态定义数据结构,那么Protostuff可能更适合你。protobuf 在 进行反序列化时,如果是 String -> long ,那么得到的是 0protostuff 在进行反序列化时,如果是 String -> long ,那么得到的是 string 最后一个 char 的 ASCII吗。原创 2024-07-23 15:48:58 · 712 阅读 · 0 评论 -
cglib
在AOP框架中,如Spring AOP,默认情况下使用JDK动态代理,但若目标对象没有实现接口,则转而使用CGlib来创建代理对象,实现在方法前后插入自定义逻辑(如日志记录、事务管理等)。不同于ASM库直接操作字节码,CGlib采取了更高层次的抽象,使得开发者可以以面向对象的方式创建代理类或者子类,而无需了解底层字节码的细节。操控和分析框架,它允许开发者在运行时或者编译时期动态地生成、改变或者分析类。(仅能代理实现了接口的类)时,CGlib可以创建目标类的子类作为代理,因此适用于没有实现接口的类的增强。原创 2024-07-03 21:59:50 · 403 阅读 · 0 评论 -
简单了解雪花算法
ID 由多个数据组合拼接成64位,分别是 时间戳 + 服务器节点ID + 序列号,每个数据项占的位数不固定,可以根据实际需求设置。所以,时间戳移位 的结果 和 服务器节点ID 移位的结果 进行 按位或运行。将时间戳,节点ID,序列号 三个 long 型的 数字 进行 移位 和 按位或 运算,就得到最终的UID。移位 和 按位或 操作 都是 二进制 位操作,操作的对象 是 一个 二进制位 0或者1。对于十进制的 long 型 数值,移位操作 是 先转为 二进制数 再进行移位操作。原创 2024-06-21 18:01:24 · 283 阅读 · 0 评论 -
vs code 搭建 vue 开发环境
vue-cli : 输入 npm install -g @vue/cli。nodejs:官网下载安装后 输入 node -v 验证是否安装成功。以管理员身份打开 vs code ,导入 vue 项目。-project-name ,创建vue 项目。安装后,vue --versoin 验证。终端执行 npm run serve。vs code 环境准备好。进入目标文件夹,输入。现在开发越来越简单了。原创 2024-06-01 19:26:06 · 1479 阅读 · 0 评论 -
org.apache.kafka.clients.consumer.CommitFailedException
如果消费者A 处理数据 超时,kafka 会将 A 消费者消费的数据分区 重新分配给另一个消费者B 并且 消费者B 会 重新消费 A 没有 提交的数据。调整 max.poll.interval.ms 或者 max.poll.records 能够解决,但是依然避免不了这种问题。3. 解决方案 是 增加 max.poll.interval.ms 设置的时间 或者 减少 max.poll.records 设置的数量。上面两种情况,数据都不会丢,但有可能被重复处理。当然,数据也不会丢,会被其他消费者消费。原创 2024-05-31 17:47:49 · 1242 阅读 · 0 评论 -
vscode 编程工具配置Java开发环境
File -> open Folder, 选择项目文件,打开后,再启动类上会有 按钮,直接点就可以运行了。,进入setting, 3:配置 maven安装目录,4:配置maven setting.xml 目录。1. 安装JDK/安装maven/安装vs code。,进入setting, 3: 配置 JDK安装目录。首先安装好vs code 之后,vs code 开发环境配置。原创 2024-05-30 20:55:46 · 1999 阅读 · 0 评论 -
HttpURLConnection使用基本操作
http请求 一般包括 请求参数/header/cookie等参数的设置。原创 2024-04-26 17:12:21 · 2457 阅读 · 0 评论 -
Integer i1 = 128;Integer i2 = 128;boolean b = i1 == i2; 是ture 还是 false
可以看到,缓存的数组 默认 最大值是127,所以 128 是会重新new新的integer对象。用 == 比较 自然是不相等的。自动装箱,是把一个 基础类型 比如 int 包装成一个 对象类型Integer,先不讨论这是怎么实现的。看一下 Integer 类,内置了一个 Integer类型的数组。所以,默认情况下,-128 -- 127 之间的数值,用 == 比较是相等的,超出范围就不相等了。当一个int 变量值 在数组中存在,则直接取出来用,否则就new 一个 ingeter对象了。原创 2023-10-08 15:45:38 · 234 阅读 · 0 评论 -
org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessor
然后,再找到所有的BeanDefinitionRegistryPostProcessor,依次处理 PriorityOrdered、Ordered、其他,进行排序后调用 postProcessBeanDefinitionRegistry,然后加入到registryProcessors 集合中。集合变量也挺多的,看着看着就晕了。这个集合,记录了 找到的所有的的BeanDefinitionRegistryPostProcessor,用来在后面调用BeanFactoryPostProcessor时进行过滤。原创 2023-10-08 11:21:42 · 284 阅读 · 0 评论 -
写时 复制
就是 更新数据的时候 先复制一份数据,然后再副本中进行更新,更新后再替换原数据。这样可以保证只有更新数据的时候对数据加锁,读数据依然读原数据而不用加锁,提高读数据的性能。写时复制策略应用很广泛,JDK 提供的 CopyOnWriteArrayList 就是写时复制的一种应用。在使用时,需要根据具体使用场景 来选择 是否 使用写时复制策略。写时复制,是一种空间换时间的策略。原创 2023-09-15 10:57:30 · 250 阅读 · 0 评论 -
mysql 插入更新数据
需要根据具体的业务场景来选择,一般都是 先 select,如果存在,则通过 upate 来更新指定字段,很少 利用 replace into 或者 insert into on duplicate key update 来操作,如果是唯一索引字段已存在,那么这两种都是会删除原来的行 再插入新的行,如果表的主键id 是增的话,岂不是 就变了。1)主键或唯一索引 已存在,则删除已存在的记录,插入新的记录,Affected rows: 2。2)如果主键或者唯一索引不存在,则直接插入行,影响行数:1。原创 2023-09-08 10:47:15 · 975 阅读 · 0 评论 -
new HashMap{{put(“a“,“b“)}}
前面提到,这种写法是属于 定义了一个匿名内部类,继承了 父类,所以,这里直接使用一个 语句块 来调用 父类的方法。不光是HashMap,像list也可以。比如:下面这个就是 定义了一个 匿名的Test子类,旁边那个向下的箭头就是说明有子类。对于new HashMap{{}};上面这种写法大家不陌生吧,实际上 就是 定义了一个匿名内部类。为什么要搞一个语句块在哪里?别只知道静态语句块。原创 2023-09-06 16:52:23 · 416 阅读 · 0 评论 -
mysql group by 字段 与 select 字段
一顿操作,复现了 select 字段 和 group by 字段 不一致 导致sql报错的问题。所以,问题是 sql_mode 的设置。sql2 和 sql1 的区别是 分组少了 sex字段,那么 返回的结果 就是只有 name分组结果 并且 返回分组后的第一条记录。ONLY_FULL_GROUP_BY,限制了 group by 字段 和 select 字段一致的要求。sql 1 根据 name,sex 两个字段分组,查询 所有字段,返回结果。sql 2 根据 name 字段分组,查询所有字段,返回结果。原创 2023-09-01 10:54:52 · 713 阅读 · 0 评论 -
关于类和接口
抛开具体的设计模式,在看不同框架的源码时,一般他们都是遵循了面向接口编程的,也就是依赖倒置。在变量类型、方法返回类型、入参类型都是接口或者抽象类,这样就实现了依赖倒置,也就是依赖接口。这样做的优点,就是可以有不同的实现类型,而不用改动高层次的逻辑。如果要实现里氏替换,那边必须是依赖倒置的,如果遵循了依赖倒置,那么也实现了里氏替换原则。驱动管理类,获取连接的方法,就是依赖倒置原则的实现,面向的接口编程,依赖抽象。关于设计模式,经常会说面向接口编程,而面向接口编程,对应的是哪一个原则呢?原创 2023-08-31 10:53:52 · 733 阅读 · 0 评论 -
JDBC使用了哪种设计模式
所以,可以将JDBC中定义的接口看成是 抽象部分,而mysql 、oracle看成是具体的实现,这种将抽象和实现分开,就是桥接模式的定义啊。所以,不能只关注 实际的接口类或者实现类之间的关系,应该从宏观上来看他们之间的关系,因此,JDBC就是使用了桥接模式。可以看到,不论是mysql 还是 oracle,都对 JDBC接口进行了实现。看一下策略模式类图(图解设计模式),好像是挺像的。将抽象部分与它的实现部分分离,使它们都可以独立地变化。不同的数据库厂商提供操作自己数据库的驱动包,立于使用它的客户而变化。原创 2023-08-30 15:20:11 · 897 阅读 · 0 评论 -
springboot日志文件名称为什么叫logback-spring.xml
如下代码完成 日志配置文件的定位,最终获取到 logback-spring.xml日志配置文件咯。如题,为什么springboot日志配置文件叫logback-spring.xml?在整个项目中搜索 logback-spring.xml 并没有搜索到。原创 2023-08-22 11:19:58 · 1227 阅读 · 0 评论 -
远程debug竟如此简单
idea选择 remote 模式,host 填上 远程服务的ip,port 填上 debug 端口,就行了。红框 框起来的是 idea自动生成的 jvm启动参数,需要 启动的时候 在服务器环境变量加上。一张图告诉你如何远程debug。原创 2023-08-17 14:34:06 · 120 阅读 · 0 评论 -
clone浅拷贝
2. 如果值 是 引用类型,那么就是 copy一份该引用,那么,此时,新对象和老对象 都持有 该引用,其中一方修改改引用对象的数据,另一方也是拿到最新修改的值。通过调用 clone() 方法,完成 对象拷贝。该方法是Object类中的方法,所有对象都继承该方法。我们经常用的 BeanUtils进行对象属性copy,也是浅拷贝。1. 如果值 是 基本类型,那么就是 copy 一份 该值。通过一个实例对象 生成另一个对象,称为 拷贝。3. clone 方法 不会调用 构造函数。该接口是一个 标记接口。原创 2023-06-27 17:10:39 · 249 阅读 · 0 评论 -
JVM-GC日志
通过GC日志,可以看出来,每次GC 后面括号里都有原因,像 Allocation Failure。这就是 GC的触发原因,当分配空间失败,也就是 当前内存不足了,就会触发GC。第二行:因为 Metadata GC Threshold 引发的 Full GC,年轻代、老年代、元空间 都进行GC。第一行:因为 Metadata GC Threshold 引发的GC,年轻代 空间进行了GC。没有Full GC了,原来是因为 元空间太小,触发了 Full GC。每个空间用 [] 扩起来,不同空间用 ,分割。原创 2023-06-21 16:33:41 · 841 阅读 · 0 评论 -
开发工具介绍
Visual Studio :适用于 Windows 上 .NET 和 C++ 开发人员的最全面 IDE。完整打包了一系列丰富的工具和功能,可提升和增强软件开发的每个阶段。Visual Studio for Mac :面向 .NET 开发人员的 macOS 原生的综合 IDE。Visual Studio 是 IDE,是一套集成开发工具,Visual Studio Code是编辑器。以上介绍的 基本都可以使用 主流的编程语言,c/c++/java等等。对于c/c++还有其他的开发工具,比如 Dev-C ++原创 2023-06-15 15:23:03 · 591 阅读 · 0 评论 -
virtual-machine shutdown hook 不执行
将应用打包后,上传至 linux 服务器,执行 java -jar xxx.jar 运行。因为 kill -9 ,是强制退出,这个时候jvm没办法执行hook了。如果用 kill -9 pid,hook 是不会执行的。添加一个 线程时,用于在结束应用时关闭资源。原创 2023-06-12 14:08:52 · 560 阅读 · 0 评论 -
spring boot MVC 流程简单梳理
实际上就是 遍历 List列表 ,而列表的初始化,是在 Servlet第一次加载的init中完成的。首先是 容器启动,把Handler 和 url 之间的映射 加载好。首先从容器中获取,容器中没有获取到时,再从配置文件中获取。这些准备工作做完之后,第一步的 查找 Handler 才能完成。而这些准备工作,也是在应用启动时完成的。找到handler后,再把handler的 所有 mapper方法找到,包装成。所以,在容器启动之后,容器中已经加载了 默认的。在查找handler这一步,是怎么做的呢?原创 2023-05-24 21:56:42 · 1142 阅读 · 0 评论 -
这是JWT 简单使用
使用和 生成 JWT 相同的 秘钥,因为 token中已经有 算法信息了,所以不用再设置算法。确定 使用的加密算法,jjwt 工具包已经 给我们提供好了各种加密算法的枚举。如果 token 失效 或者 加密 秘钥和解密秘钥 不同,都会解析失败。解析获取到 Claims 对象,可以获取 body 中的数据。另外,可以构建 JWT 的创建时间 和 失效时间。OK,Java工具包如下,使用 jjwt。构建Body部分,该部分 是一个 Map。头部,记录 使用的 加密算法的类型。Body,记录一些额外信息。原创 2023-05-24 18:02:59 · 1025 阅读 · 0 评论 -
MySql连接数
mysql连接数相关的命令,针对数据库服务器的,不是数据库实例。几个小命令,作用很大。2. 查看当前连接命令,该命令返回所有正在连接的连接。返回的行数就是 当前连接数。3. 修改数据库支持的最大连接数。1. 查看最大连接数命令。原创 2023-05-17 10:35:45 · 226 阅读 · 0 评论 -
从数据库连接到Mybatis到spring到springboot梳理
不论mybatis,还是spring,还是spring boot,其实,都是 在一层一层的包装,使操作越来越简单。JDK提供的驱动接口,指定了获取连接的标准接口,任何数据库厂家,都需要提供一个Java版本的驱动包并实现驱动接口,来完成改数据库的连接操作。对于数据库操作,很多都是重复的工作,Mybatis包装了这些重复的工作,开发人员只需要编写SQL语句,就可以完成数据库的操作了。经过一系列的包装,调用,最终代码会走到上面提到的,获取连接、获取statement、执行SQL、结果处理等。原创 2023-05-12 17:57:06 · 776 阅读 · 0 评论 -
Maven打包项目
可以看到,标签,是把 console 模块的 jar包,也就是 spring boot 项目的jar包,copy到了定制化打包的 target目录下。一般我们 编写了 spring boot 项目后, 直接打包,会得的一个 jar,然后运行 java -jar xxx.jar 来 运行这个spring boot 项目。这是 nacos的文件目录,进入bin目录,执行 startup.sh 或者 startup.cmd 命令,就可以运行 nacos服务了。那么,这是怎么做到的呢?原创 2023-02-13 17:52:52 · 2225 阅读 · 0 评论 -
maven 打包报错
报错的版本 是用了 3.0.2的 plugin, 指定版本 为 2.1.x ,重新执行就OK 了。一开始不知道是啥情况,定睛一看,可能跟 java 编译版本有关系。原因是 没有指定 plugin版本,默认使用最新的版本。原创 2023-02-13 16:48:46 · 340 阅读 · 0 评论 -
elasticsearch小白入门
elasticsearch解压后,运行 bin目录下的 elasticsearch-7.10.2\bin>elasticsearch.bat。解压后修改配置 kibana-7.10.2-windows-x86_64\config\kibana.yml。一般再项目中都会用到 搜索,如果直接查询数据库,性能会存在瓶颈。执行 kibana-7.10.2-windows-x86_64\bin>kibana.bat。以上是 windows安装elasticsearch,kibana,用来开发环境测试用。原创 2022-12-23 17:30:03 · 690 阅读 · 0 评论 -
揭秘Mysql到Java字段类型转换
把字段A的类型修改成bit类型,再读取时,获取的Java类型就是Boolean类型,这是怎么做到的呢?数据库驱动 从 数据库服务 获取到 数据流之后,也就是字节数组,会根据 字段的实际类型,从字节数组中 读取 指定的 字节数,将字节转换成对应的Java对象类型。读取某个字段的值时,首先会获取 对应字段的 Field 对象,该对象中定义了 当前字段的类型,根据不同的类型,使用不用的方式来读取数据。如果读取的字段想转成自己指定的类型,那么可以在获取字段数据时指定具体的期望转换的类型就可以了。原创 2022-10-20 14:17:48 · 1419 阅读 · 0 评论 -
Fegin使用客户端负载均衡器Ribbon
在微服务之间调用,spring cloud 使用 ribbon 来进行负载均衡。如果说 负载均衡 算法,有很多种,那么 ribbon 是怎么拿到 服务列表的呢?那么是怎么从注册中心拿的?FeignClientFactoryBean 实例化时,通过 FeignClientFactoryBean#getObject 来获取代理对象,handler: feign.ReflectiveFeign.FeignInvocationHandler。4. 接口请求时,走负责均衡器,从注册中心获取服务列表。原创 2022-10-13 16:01:27 · 201 阅读 · 0 评论