JavaSE笔记
JavaSE笔记
ThinkPet
青年码农一枚
展开
-
【编程题】给定一个数组找出其中大于0的数字中倒数第二小的数字的下标
【代码】【编程题】给定一个int型数组找出其中大于0的数字中倒数第二小的数字的下标。原创 2024-06-14 14:24:22 · 200 阅读 · 0 评论 -
AOP技术详解
面向切面编程,是对面向对象编程的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现,在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率用于定义哪些方法调用应该被拦截或通知的表达式。这些表达式基于方法签名和运行时信息来定义切点,允许你精确地指定哪些方法或方法的组合应该触发通知(advice)常见的切点表达式元素和用法方法签名匹配。原创 2024-05-27 13:12:45 · 1077 阅读 · 1 评论 -
盘点Java中的排序操作方案
/ 假设Person类有一个静态方法用于比较年龄// 初始化人员列表// 使用方法引用进行排序。原创 2024-05-24 14:31:56 · 274 阅读 · 0 评论 -
java算法题42502
然后,它使用两个指针i和j分别指向字符串a和b的末尾,并初始化进位carry为0。在循环中,它计算当前位的和(包括进位),然后将和的个位数添加到结果字符串中,并更新进位值。最后,它返回反转后的结果字符串,因为我们是从最低位开始构建的。Java中的BigInteger类提供了大整数的运算功能,包括加法。我们可以先将二进制字符串转换为BigInteger对象,然后进行加法运算,最后再将结果转换回二进制字符串。从字符串的末尾(最低位)开始,逐位相加,并处理进位。原创 2024-04-25 14:08:43 · 195 阅读 · 0 评论 -
java算法题42501
使用HashSet或HashMap的解法时间复杂度都是O(n),其中n是数组的长度。这是因为这两种数据结构都提供了常数时间复杂度的插入和查找操作。检查元素是否已经在HashSet或HashMap中(O(1)时间复杂度)。如果不在,将其添加到HashSet或作为键添加到HashMap中(O(1)时间复杂度,在平均情况下)。因此,整体的时间复杂度是O(n),因为你只遍历了数组一次,并且对于数组中的每个元素都执行了常数时间的操作。在Java中,无论是使用HashSet还是HashMap。原创 2024-04-25 13:55:20 · 314 阅读 · 1 评论 -
【代码笔记】一种http方式下载文件且支持重试的方法
代码笔记-一种http方式下载文件且支持重试的方法原创 2023-12-27 23:06:27 · 544 阅读 · 0 评论 -
【机试题】LazyIterator迭代器懒加载问题
工具类提供了一个ValueLoader接口,用于获取数据,其中ValueLoader的接口定义为:public interface ValueLoader { List load(long offset, int limit);使用该工具类的地方,需要提供ValueLoader的实现类。将下面这个未完成的Java工具类补充完成,实现懒加载的功能,该类需要实现Iterable接口,能够遍历所有数据。工具类需要支持懒加载,即遍历时按需获取数据,而非一次性获取所有数据到内存之后,再进行遍历;原创 2023-11-10 15:59:36 · 640 阅读 · 0 评论 -
【机试题】队列并发消费问题
编写一个队列,生产者生产消息(消息内容是1,2,3,…,n),消费者消费消息,并将消息打印到控制台。原创 2023-11-10 15:55:04 · 178 阅读 · 0 评论 -
【机试题】队列生产消费问题
编写一个队列,生产者生产消息(消息内容是1,2,3,…,n),消费者消费消息,并将消息打印到控制台。1.生产者以每秒10个的速率生产消息,队列满了后阻塞等待;3.消费者以每秒1个的速率消费消息;生产者和消费者在不同的线程;2.队列长度为100;原创 2023-11-10 15:52:20 · 156 阅读 · 0 评论 -
【机试题】CompletableFuture编排
使用CompletableFuture编排 AService.get()、BService.get()、CService.get(int i) (ABC三个服务返回结果都是int),满足使用A、B的结果相加,再作为参数传给C,取得C的结果后乘以 100 后返回。2.处理异常情况,异常情况返回0。原创 2023-11-10 15:48:32 · 170 阅读 · 0 评论 -
【机试题】两个链表相减,并以相同形式返回一个表示相减结果的链表
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照顺序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相减,并以相同形式返回一个表示相减结果的链表。输入:l1 = [9,8,7], l2 = [5,1,2]1)除了数字 0 之外,这两个数都不会以 0 开头。2)给定的第一数字一定比第二个数字大。解释:987-512 = 475。输出:[4,7,5]原创 2023-11-10 15:46:09 · 224 阅读 · 0 评论 -
【机试题】获取三个整数,然后将这三个整数累加,最终返回累加的值
编写一个Java函数,通过调用AService.get()、BService.get()、CService.get()三个接口,获取三个整数,然后将这三个整数累加,最终返回累加的值。2.累加操作需要在获取三个整数的操作完成后进行,因此需要保证三个整数均已获取后才能进行累加操作;1.调用三个接口的操作需要并行执行,以提高效率;3.考虑多线程安全问题。原创 2023-11-10 15:43:15 · 212 阅读 · 0 评论 -
【机试题】编写一个Java函数,实现批量获取数据的功能
2)在BService.get((List ids)函数内部,需要将传入的id列表分批(每批10个id)进行调用AService.get(List ids)函数获取数据;3)BService.get((List ids)函数需要返回所有批次获取的数据的合并结果,即一个包含所有数据的List;题目:编写一个Java函数,实现批量获取数据的功能(BService.get(List ids))。1)提供一个函数BService.get(List ids),支持最多传入100个id;原创 2023-11-10 15:41:06 · 1279 阅读 · 0 评论 -
【面经】排查cpu占用100%的操作方法
4. 使用jstack 分析 进程pid,即可找到问题代码位置。将堆栈打印到x.txt,可以查看x.txt即可找到问题代码位置。1.top命令查看cpu100%的进程pid。92156 的16 进制是167fc。原创 2023-11-09 09:56:55 · 191 阅读 · 0 评论 -
【面经】synchronized和lock的区别
synchronized是Java语言内置的关键词,依赖于JVM的解释器来锁定,而lock是一个接口,由代码实现加锁和解锁原创 2023-11-09 09:16:25 · 74 阅读 · 0 评论 -
【面经】死锁是什么?如何避免死锁?
死锁是指多个线程相互等待对方释放资源,导致程序无法继续执行的情况。原创 2023-11-09 08:49:35 · 85 阅读 · 0 评论 -
【面经】讲一下你对jvm和jmm的了解
Full GC是Java虚拟机中的一种垃圾回收方式。它会在整个堆空间中执行垃圾回收,清理所有不再被引用的对象所占用的内存空间。通常,Full GC会在堆空间或者整个堆空间被占满时触发,它会清理所有的年老代对象和永久代对象。这是一种比较耗时的操作,因为它需要扫描整个堆空间,找到所有不再被引用的对象,并将它们标记为可回收的。堆空间不足:当堆空间的可用空间不足以分配新对象时,会触发Full GC。在这种情况下,Full GC会清理整个堆空间。原创 2023-11-09 00:44:52 · 673 阅读 · 0 评论 -
【面经】讲一下线程池的参数和运行原理
通过以上参数和运行原理可以看出,线程池可以有效地控制线程的数量和任务队列的大小,从而避免过多创建和销毁线程带来的开销,提高系统的性能和稳定性。线程池通过预先创建一定数量的线程,并将任务提交给这些线程执行,从而避免了频繁创建和销毁线程的开销。如果非核心线程执行完任务后,任务队列中没有待执行的任务,且非核心线程数量小于最大线程数,则创建一个新的非核心线程来执行任务;如果未满,则创建一个新的核心线程来执行任务。如果核心线程执行完任务后,任务队列中还有待执行的任务,则核心线程会从任务队列中取出任务并执行。原创 2023-11-08 23:52:46 · 221 阅读 · 0 评论 -
【面经】讲一下synchronized锁升级的过程
synchronized锁升级是指从偏向锁到轻量级锁,再到重量级锁的过程原创 2023-11-03 18:15:26 · 145 阅读 · 0 评论 -
JAVA适配器模式-案例
【代码】JAVA适配器模式-案例。原创 2023-10-21 13:13:01 · 87 阅读 · 0 评论 -
JAVA建造者模式-案例
【代码】JAVA建造者模式-案例。原创 2023-10-21 12:54:33 · 77 阅读 · 0 评论 -
JAVA原型模式-案例
【代码】JAVA原型模式-案例。原创 2023-10-21 12:37:38 · 79 阅读 · 0 评论 -
JAVA模版模式-案例
【代码】JAVA模版模式-案例。原创 2023-10-21 12:32:20 · 74 阅读 · 0 评论 -
JAVA观察者模式-案例
【代码】JAVA观察者模式-案例。原创 2023-10-21 12:23:57 · 300 阅读 · 0 评论 -
JAVA策略模式-案例
【代码】JAVA策略模式-案例。原创 2023-10-21 12:19:11 · 73 阅读 · 0 评论 -
JAVA工厂模式-案例
【代码】JAVA工厂模式-案例。原创 2023-10-21 12:17:10 · 66 阅读 · 0 评论 -
JAVA单例模式-案例
【代码】JAVA单例模式-案例。原创 2023-10-21 12:11:56 · 69 阅读 · 0 评论 -
guava-retry使用笔记
guava-retry重试框架的使用原创 2023-08-04 07:34:45 · 774 阅读 · 0 评论 -
Java中使用Gson操作json数据
【代码】Java中使用Gson操作json数据。原创 2023-07-29 08:04:35 · 517 阅读 · 0 评论 -
Java实现RSA加解密
【代码】Java实现RSA加解密。原创 2023-07-29 07:42:39 · 1432 阅读 · 0 评论 -
windows系统安装ArtemisMQ
【代码】windows系统安装ArtemisMQ。原创 2023-07-26 06:08:38 · 800 阅读 · 0 评论 -
一种软件license授权设计案例
整体设计思路license服务器端:--负责根据客户端systemSign颁发证书。--使用dom4j生成lic.xml证书--使用AES对xml关键节点进行数据加密--lic证书生成时设定信息包括:-----客户端systemSign-----生效起始时间-----生效截止时间-----上一次校验时间-----项目版本号-----license文件生成路径license客户端:--负责生成systemSign客户端系统签名--证书检验/定时验证/自助更新(手动替换)--A原创 2023-07-25 06:05:17 · 1099 阅读 · 0 评论 -
SQL调优教程
什么是好的sql语句:1.尽量简单,模块化2.易读,易维护3.节省资源(内存/cpu/扫描的数据块要少/少排序)4.不造成死锁。原创 2023-07-20 20:38:40 · 441 阅读 · 0 评论 -
一个基于NioServer的TCP通信实现方案
一个基于NioServer的TCP通信实现方案原创 2023-07-20 20:32:31 · 759 阅读 · 0 评论 -
一个UDP通信案例
一个Java编写的UDP通信案例原创 2023-07-20 06:46:24 · 368 阅读 · 0 评论 -
一种轻量级websocket实现方案
log . info("一个新客户端打开连接...");");//客户端ip String ip = conn . getRemoteSocketAddress() . getAddress() . getHostAddress();log . info("客户端请求的ip:{}" , ip);log . info("客户端的port:{}" , port);原创 2023-07-12 22:32:40 · 1031 阅读 · 0 评论 -
spring-retry笔记
log . info("收到请求参数:{}" , param);throw new IllegalArgumentException("参数异常");} else {throw new RemoteAccessException("远程访问异常");} } }log . info("收到请求参数:{}" , param);throw new IllegalArgumentException("参数异常");} else {原创 2023-07-12 22:29:53 · 358 阅读 · 0 评论 -
Java中的RMI
rmi 是 java中的一种rpc实现 ,提供了一种机制来实现分布式应用的通信和调用远程方法的能力.rmi的独特优势。原创 2023-07-11 07:44:25 · 624 阅读 · 0 评论 -
Guava中的EventBus使用笔记
};//双重锁单例模式 private static AsyncEventBus getAsynEventBus() {} //双重锁单例模式 private static EventBus getEventBus() {} //异步方式发送事件 public static void asyncPost(Object event) {} }} }原创 2023-07-05 23:31:26 · 419 阅读 · 0 评论 -
SpringBoot运行中动态修改logback日志级别
这里提供2个接口,分别是修改logback全局日志级别 ,和单独修改某个package包的日志级别。思路:写一个api接口,通过api接口调用的方式动态修改logback的log日志打印级别。原创 2023-07-01 16:04:32 · 1401 阅读 · 0 评论