Live My Life

淡而无味也是一种味道

[Java 杂记] List 的 remove() 方法陷阱以及性能优化

List 的 remove() 方法陷阱

Java List 在进行 remove() 方法是通常容易踩坑,主要有以下几点: 循环时:问题在于,删除某个元素后,因为删除元素后,后面的元素都往前移动了一位,而你的索引+1,所以实际访问的元素相对于删除的元素中间间隔了一位。 错误的写法 使用 for 循环不进行额外处理 123456//错误的方法for(int i=0;i<list.size();i++) { if(li......

[Java 杂记] @RequestBody 和 @RequestParam 区别

RequestBody 和 RequestParam 区别

前言 一直有这么一个疑问:在使用 postman 工具测试 api 接口的时候,如何使用 json 字符串传值呢,而不是使用 x-www-form-urlencoded 类型,毕竟通过 key-value 传值是有局限性的。假如我要测试批量插入数据的接口呢,使用 x-www-form-urlencoded 方法根本就不适用于这种场景。 那么如何通过 postman 工具使用 json 字符串......

[Java 杂记] 四种常见的 POST 提交数据方式

四种常见的 POST 提交数据方式

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主......

[Swagger2] Swagger2 接口文档引擎的配置和使用

Swagger2 接口文档引擎的配置和使用

手写文档存在的问题 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时。 接口返回结果不明确 不能直接在线测试接口,通常需要使用工具,比如:Postman 接口文档太多,不好管理 使用 Swagger 解决问题 Swagger 也就是为了解决这个问题,当然也不能说 Swagger 就一定是完美的,当然也有缺点,最明显的就是代码植入性比较强。Swagger 是一个规范和完......

[ThreadPool] 2 线程池的使用练习

线程池的使用练习

Executor 1234567891011121314/** * Executor:线程池中的顶层接口 */public class _01_T_MyExecutor implements Executor { public static void main(String[] args) { new _01_T_MyExecutor().execut......

[ThreadPool] 1 线程池的使用

线程池的使用

前言 在 Java 中,我们可以利用多线程来最大化地压榨 CPU 多核计算的能力。但是,线程本身是把双刃剑,我们需要知道它的利弊,才能在实际系统中游刃有余地运用。 在进入主题之前,我们先了解一下线程池的基本概念。 线程池,本质上是一种对象池,用于管理线程资源。 在任务执行前,需要从线程池中拿出线程来执行。 在任务执行完成之后,需要把线程放回线程池。 通过线程的这种反复利用机制,可以有效地避......

[Java 多线程高并发练习] 4 并发容器案例

ConcurrentLinkedQueue

案例 有 N 张火车票,每张票都有一个编号,同时又 10 个窗口对外售票,请写一个模拟程序。 线程不安全 12345678910111213141516171819202122232425/** * 有 N 张火车票,每张票都有一个编号,同时又10个窗口对外售票,请写一个模拟程序。 * * 分析下面的程序可能会产生那些问题? * 重复销售?超量销售? * * ArrayList 是线程不安......

[Java 多线程高并发练习] 3 经典面试题

wait、notify/notifyAll;Lock、Condition;CountDownLatch

面试题一 写一个固定容量同步容器,拥有 put 和 get 方法,以及 getCount 方法,能够支持 2 个生成者线程和 10 个消费者线程的阻塞调用。 wait、notify/notifyAll 方法 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051......

[Java 多线程高并发练习] 2 ReentrantLock、ThreadLocal、线程安全单例

多线程练习

ReentrantLock 练习一: 1234567891011121314151617181920212223242526272829303132333435/** * ReentrantLock 用于替代 Synchronized,本例中由于 m1 锁定 this,只有 m1 执行完毕的时候,m2 才能执行, * 这里是复习 Synchronized 最原始的语义。 */public c......

[Java 多线程高并发练习] 1 synchronized、volatile、AtomicXXX

多线程练习

synchronized 练习一: 12345678910111213//synchronized 关键词:对某个对象加锁public class _001_Synchronized_O { private int count = 10; private Object o = new Object(); public void m() { ......