
JAVA
Myueye
这个作者很懒,什么都没留下…
展开
-
【无标题】
B接口只有简单逻辑,当超过10个请求访问A时,10个线程池都在A中,并且要请求B,这时由于没有空闲线程,因此对于B的请求进入了排队队列里,这时就形成了死锁。2.对文件名进行取模,如果文件名含有中文,可以进行base64编码或者其他,然后再进行运算,然后每个机器处理一部分: 两个机器,则对2取模,A机器处理0,B机器处理1的。可以是加一个时间戳后缀;当多线程处理时,就要考虑锁的问题,这里用一个简单的方案:就是对文件以重命名的方式进行锁。2.对于同个线程池的服务,以函数调用的形式,而不是以接口的形式。原创 2024-03-29 16:20:41 · 375 阅读 · 0 评论 -
【无标题】
SM2加密; 依赖包为 bcprov-jdk15on-1.58.jar原创 2024-03-29 16:16:42 · 276 阅读 · 0 评论 -
多线程demo
*** 自定义线程池/*** 任务队列-使用阻塞队列throw new RuntimeException("线程池大小至少为1");i < size;i ++) {throw new RuntimeException("线程池大小至少为1");i < size;i ++) {try {//获取排队队列的任务,如果没有则阻塞,直到有任务进来 run = queue . take();i < 10;原创 2023-04-11 17:42:16 · 160 阅读 · 1 评论 -
自定义非公平锁-demo
先竞争资源看看能否获得锁,如果不能则进入队尾进行排队,并且该线程阻塞,以免一直在while循环中运行占用cpu资源。因为当竞争锁时如果直接获得锁,不会进入排队队列,因此释放锁时需要判断。进行释放锁操作,先把当前线程的资源释放,然后再唤醒队列的头部。当调用unlock时。原创 2023-04-04 14:15:36 · 155 阅读 · 0 评论 -
大文件切割
场景:在window上编辑器查看过大的日志看不了,也懒得找其他编辑器或者工具,写了个代码,把日志文件切分成n个小文件。原创 2023-03-24 15:06:05 · 200 阅读 · 1 评论 -
java rmi使用
远程服务调用,可以在client端运行server端的java代码。原创 2023-02-10 10:33:58 · 172 阅读 · 0 评论 -
tomcat探究四默认连接器(tomcat4)
由于代码量过多,因此只放简单的图解。原创 2022-10-17 16:18:55 · 263 阅读 · 0 评论 -
tomcat探究三使用连接器(参考tomcat4)
写好测试类后,可以发请求进行测试 http://localhost:8080/servlet/TestControllerServlet。连接器就是管理连接的,可以理解为连接池–现在都是使用这个;HttpRequestFacade – 提供外部操作请求对象。HttpHeader–存储请求头部分的信息,暂时没用到。HttpConnector–连接器,管理请求的。HttpRequestLine–存储请求行信息。HttpProcessor–请求处理。HttpRequest–请求对象。原创 2022-10-08 15:38:29 · 473 阅读 · 0 评论 -
tomcat探究二搭建简单的servlet容器
TestControllerServlet:模拟测试类,实现servlet接口。Request:对请求报文做处理,获取http请求报文第一行的资源路径。ServletProcessor:请求servlet资源的处理。HttpServer:容器服务入口,监听一个端口。Response:延续 探究一 的内容。Servlet:自定义servlet。在同一个包还可以创建其他类似的类。原创 2022-09-29 17:23:09 · 352 阅读 · 0 评论 -
tomcat探究一搭建简单的web容器
Request对请求进行处理,拿到http请求报文,获取第一行,拿到请求资源路径。HttpServer作为web入口,监听一个端口,作为web的入口。Response对响应进行处理,返回静态资源或者错误信息。这里的web程序只是一个静态资源的web程序。原创 2022-09-29 17:09:46 · 149 阅读 · 0 评论 -
简单记录使用org.slf4j.MDC进行日志追踪
d{yyyy-MM-dd HH:mm:ss.SSS} : 是时间格式。%logger{15}:%line : 在哪个类,并且显示行号。%X{TraceId}:自定义的一个唯一线程请求id。%m%n :输出信息并换行。这里使用的是log4j2。%thread:线程名称。[%p] : 日志级别。原创 2022-09-26 17:27:08 · 1310 阅读 · 0 评论 -
静态负载均衡常见算法demo实现
【代码】静态负载均衡常见算法demo实现。原创 2022-08-29 17:47:19 · 160 阅读 · 0 评论 -
字符串的编码格式转换
主要的思路就是先将字符串正常化,然后就可以按照指定编码进行编码解码。开发工具是STS,默认的编码格式是UTF-8。本次主要是UTF-8和GBK之间的相互转换。原创 2022-08-18 17:11:22 · 4822 阅读 · 0 评论 -
SpringBoot 使用SQL Server
springboot 使用sql server原创 2022-06-28 11:09:28 · 1713 阅读 · 0 评论 -
基础排序算法
排序算法快速排序选择排序归并排序插入排序基本概念:代码:快速排序选择排序归并排序插入排序基本概念:通过一趟排序将记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的代码:/**** * 快速排序 * @throws Exception */ @Test public void testQuickSort() throws Exception{ int[] arr = {3, 44, 38,原创 2022-06-28 11:07:12 · 111 阅读 · 0 评论 -
socket流的关闭
在使用socket进行全双工通信时,原本以为输入流和输出流是分开关闭的,然而不管关闭哪个都会直接关闭socket;可以使用socket.shutdownInput()和socket.shutdownOutput()客户端使用InputStream进入bebug模式,在执行到 inputStream.close()后进入SocketInputStream的close()方法,而这个方法是关闭socket流执行reader.close()后,最后也是执行SocketInputStream的close(原创 2022-06-15 11:17:56 · 2722 阅读 · 0 评论 -
简单心跳检测
简单的心跳检测原创 2022-06-14 23:08:11 · 246 阅读 · 0 评论 -
java socket
单向通信就是一方发,一方收例如下面的代码就是客户端发,服务端收服务端处理类客户端半双工简介可双向通信就是,但是一次只能有一方发送服务端处理客户端全双工简介服务端和客户端可以同时发送数据...原创 2022-06-14 22:56:54 · 509 阅读 · 0 评论 -
Redis分布式锁的初实现
Redis分布式锁的初实现思路测试代码思路使用setnx 命令setnx命令当key不存在时,会set进去,当已存在则返回falseset完之后使用 exprie命令对key设置过期时间释放锁的时候主动调用del释放锁测试代码public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10); Random random = new Ran原创 2022-03-17 18:18:27 · 1316 阅读 · 2 评论 -
redis插入大量key
redis插入大量key工具代码顺序插入多线程&资源池插入使用pip测试结果工具代码import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import redis.clients.jedis.Jedis;i原创 2022-03-17 16:18:47 · 2925 阅读 · 0 评论 -
RabbitMQ初使用
RabbitMQ地址使用Docker安装个人简单总结java代码使用hello word流程生产者消费者Work queues流程生产者消费者消费者1消费者2Publish/Subscribe流程生产者消费者Routing流程生产者消费者Topics流程生产者消费者地址官方地址:https://www.rabbitmq.com官方代码demo地址:https://www.rabbitmq.com/getstarted.html使用Docker安装docker安装RabbitMQdocker pu原创 2022-03-14 17:38:34 · 3360 阅读 · 0 评论 -
字符串专项练习1
字符串专项练习1字符串反转字符串整数反转字符串中的第一个唯一字符有效的字母异位词验证回文串字符串反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。class Solution { public void reverseString(char[] s) { if(s.length == 1){ return ;转载 2022-03-14 17:00:47 · 118 阅读 · 0 评论 -
数组专题练习2
数组专题两数之和加一移动零两数之和 /*** * 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 * 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 * 逻辑: * 遍历一遍数组,使用哈希表记录数组元素的值 * 遍历元素时,使用目标值减去该值,并判断哈希表中是否存在需要的值 * @param nums * @param target转载 2022-03-14 16:47:23 · 128 阅读 · 0 评论 -
构造二叉搜索树
节点public class TreeNode { int val; TreeNode right; TreeNode left; public TreeNode() {}; public TreeNode(int val) { this.val = val; } public int getVal() { return val; } public void setVal(int val) { this.val = val; } public TreeNo原创 2022-03-08 15:43:49 · 336 阅读 · 0 评论 -
redis 消息队列
redis stream基本使用redis操作listpub/substreamjava Jedismaven依赖list生产者消费者pub/sub生产者消费者监听消费stream生产者消费者redis操作list基本使用从左边入队lpus从左边出队lpop从右边入队rpush从右边出队rpop查询长度llen keypub/subPUBLISH channel message //将信息 message 发送到指定的频道 channelPUBLISH channel原创 2022-03-08 11:46:39 · 540 阅读 · 0 评论 -
简单链表操作-java实现
链表操作节点结构链表队列节点结构class Node{ int val; Node next; public int getVal() { return val; } public void setVal(int val) { this.val = val; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public No原创 2022-03-05 22:24:10 · 410 阅读 · 0 评论 -
bitmap练习
/*** * 自定义工具类 * */public class BitMapUtil { /*** * 存储数组 */ private int[] bitArray; private static final StringBuffer STRING_BUFFER = new StringBuffer(); public BitMapUtil(long size) { bitArray = new int[(int)(size/32+1)]; } /** * 将数原创 2022-03-04 13:49:13 · 104 阅读 · 0 评论 -
顺序存储结构-java实现
顺序存储结构列表--整型列表--泛型队列测试用例列表–整型/*** * 列表 */class MyList{ Integer[] vals = null; int size = 0; public MyList() { vals = new Integer[10]; } public MyList(int size) { this.vals = new Integer[size]; } /*** * 获取长度 */ public int length() {原创 2022-03-03 11:19:45 · 216 阅读 · 0 评论 -
使用redis简单模拟抢购
使用redis简单模拟抢购使用inc自增使用队列使用inc自增/*** * 测试redis inc并发 * */public class RedisThreadInc { private static AtomicInteger SUCCESS = new AtomicInteger(1); //原子操作类 private static Random random = new Random();//生成随机结果 public static void main(String[] ar原创 2022-02-24 16:35:28 · 660 阅读 · 0 评论 -
Comparator基础使用
class SortTest{ int index; int count; public SortTest(int index,int count) { this.index = index; this.count = count; } }Arrays.sort(st, new Comparator<SortTest>() { /**** * o1 后一个数 * o2 前一个数 * * 0 不排序 * -1原创 2022-02-22 17:02:29 · 201 阅读 · 0 评论 -
在4G文件中查询出出现频率最多的数
生成测试文件import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.util.Random;public class WriteBigFile { public static void main(String[] args) throws Exception { long star原创 2021-11-17 15:49:12 · 274 阅读 · 0 评论 -
BufferedOutputStream 自动刷新缓冲区
BufferedOutputStream需求背景代码结果源码探究需求背景使用BufferedOutputStream 写文件,考虑到这个有缓冲区,因此想要试一下,当缓冲区满了之后会怎么样?1.自动刷新2.报错代码public static void main(String[] args) throws Exception { File file = new File("D:\\test.txt"); OutputStream out = new FileOutputStream(file原创 2021-11-11 11:44:29 · 764 阅读 · 1 评论 -
数组专题练习
数组删除排序数组中的重复项买卖股票的最佳时机旋转数组存在重复元素只出现一次的数字删除排序数组中的重复项 /*** * 1、给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 * 逻辑: * 由于是有序数组,因此使用可以直接使用指针 * 定义一个指针,指向的是真实的数组长度 * 遍历数组时,当遇到相同的元素,则进行跳过,当遇到不同的元素时,将指针往后移动一位,并将新的元素填入 * 最后需要将指针+1--数组长度的数组下标转载 2021-10-30 22:21:29 · 130 阅读 · 0 评论 -
使用位运算计算和
public static void main(String[] args) { int sum = getBitSum(100,200); System.out.println(sum); } //a^b 不进位相加 //(a&b) <<1 进位 //(a^b) ^ ((a&b) <<1) 进位相加 //为什么需要循环呢, //因为当把进位相加后,有可能产生新的进位,因此只有当进位为0的时候才是加完了; public static int .原创 2021-10-24 16:49:05 · 83 阅读 · 0 评论 -
可怜的小猪--进制数的妙用
可怜的小猪--进制数的妙用题目代码解题逻辑题目有1000个桶,有且仅有一个桶里面装了毒药,其他的都装了水。这些桶从外面看上去完全相同。如果一只猪喝了毒药,它将在15分钟内死去。在一个小时内,至少需要多少只猪才能判断出哪一个桶里装的是毒药呢?代码 /*** * @param buckets 桶的数量 * @param minutesToDie 毒药发作时间 * @param minutesToTest 最短测试时间 * @return */ public static in原创 2021-05-26 17:02:08 · 166 阅读 · 0 评论 -
水仙花数Java
本想着优化一下这个水仙花数的算法,谁知,算法的运行时间越写越长。。。。暂时先记录一下 /*** * 传统水仙花数 可以传入数的位数以及起始值 */ public static void tradition(long start_num, int n) { long start = System.currentTimeMillis(); if (n < 0) { // 抛异常或者什么,提示位数需要大于1 return; } double total = Mat原创 2021-05-14 16:36:39 · 208 阅读 · 0 评论 -
二叉树 前序 中序 后序 遍历
先理解前序 中序 后序的概念再来看下面直接放代码/*** * 二叉树对象 * @author myk * */public class Node { public Object data;// 节点数据 public Node right; //右孩子 public Node left; //左孩子 //构造器 public Node(Object data,Node right,Node left){ this.data=data;原创 2021-05-14 11:05:53 · 119 阅读 · 0 评论 -
MongodbMapReduce的简单使用
MongodbMapReduced的简单使用简单理解:mongodb shell原数据mongo shell 执行结果springboot 使用mongodb MapReduceJava代码执行结果简单理解:mongodb 的mapReduce 很类似于分组语句(group by) ,map 函数按照key进行分组而后reduce函数进行计算。reduce的语法是类似于JavaScript,不知道在哪看到的。因为用的少,所以很复杂的用法不是很清楚,但是如果是使用分组聚合操作,那么使用MapReduce是原创 2021-05-11 16:50:39 · 720 阅读 · 0 评论 -
list remove add 操作的小尝试
在循环体内remove 集合list的元素存放数据增强for循环Iterator 方式普通循环存放数据 List<String> list = new ArrayList<String>(); //存放数据 for (int i = 0; i < 10; i++) { list.add("数据"+i); } //debug测试循环并添加数据 int index = 0; //报错 java.util.ConcurrentModific原创 2021-04-23 11:45:50 · 218 阅读 · 0 评论 -
jar包在docker 里面,操作生成文件,该文件是会在docker目录下
遇到这一个小bug,搞了半天才搞清楚原因解决思路:将要生成的文件目录,映射到宿主机目录即可;暂未进行操作,仅记录一下原创 2021-04-09 11:36:54 · 308 阅读 · 0 评论