自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 fastjson改造,fastjson转jackson(真实项目案例,主要提供思路)

目前项目中大量的代码均使用了fastjson和json-lib两种框架(主要是fastjson),总计超过200个类中使用了这两种框架,且fastjson的代码api和jackson的相差较大,逐一改造十分困难,改造量巨大,想要改造的话需要先熟悉一下这两种框架,下面是二者的对比。的主要功能是进行数据之间的格式转化,即json字符串、具体的业务对象、json对象(JsonNode及其实现类)这三种数据之间的转化,其中json字符串和具体业务对象之间的转化比较简单,中数据的类型进行了类型的限制。

2024-03-14 11:36:46 1191 1

原创 计算机网络

我们把应用层交互的数据单元为报文。

2023-08-08 22:54:51 89

原创 Java面试-JVM

方法区和永久代以及元空间的关系很像 Java 中接口和类的关系,类实现了接口,这里的类就可以看作是永久代和元空间,接口可以看作是方法区,也就是说永久代以及元空间是 HotSpot 虚拟机对虚拟机规范中方法区的两种实现方式。在Java中,方法的调用是基于动态绑定的,也就是说方法调用的目标可能在编译时无法确定,需要在运行时进行解析。栈绝对算的上是 JVM 运行时数据区域的一个核心,除了一些 Native 方法调用是通过本地方法栈实现的,其他所有的 Java 方法调用都是通过栈来实现的。

2023-08-08 11:09:00 59

原创 Java面试-并发

JMM是Java内存模型(Java Memory Model)的缩写。JMM抽象了线程和主内存之间的关系Java虚拟机中的所有线程共享主存储器,每个线程有自己的本地内存。当线程访问变量时,它们首先将变量从主存储器复制到本地内存中,对该变量的所有操作都在本地内存中进行,最后将变量的最新值写回主存储器。主内存:所有线程创建的实例对象都存放在主内存中,包括成员变量和方法中的局部变量本地内存:每个线程都有一个私有的本地内存来存储共享变量的副本,并且,每个线程只能访问自己的本地内存,无法访问其他线程的本地内存。

2023-08-08 11:03:38 149

原创 Java面试-集合

数组下标的计算方法是“(n 代表数组长度)。取余(%)操作中如果除数是 2 的幂次方则等价于与其除数减一的与(&)操作。采用二进制位操作 &,相对于%能够提高运算效率,这就解释了 HashMap 的长度为什么是 2 的幂次方。

2023-08-08 11:01:14 41

原创 Java面试-基础

像我们平常运行的应用程序都是运行在用户空间,只有内核空间才能进行系统态级别的资源有关的操作,比如文件管理、进程通信、内存管理等等。也就是说,我们想要进行 IO 操作,一定是要依赖内核空间的能力。同步非阻塞 IO 模型中,应用程序会一直发起 read 调用,等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到在内核把数据拷贝到用户空间。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

2023-08-08 10:57:51 22

原创 Redis分布式锁

分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁就诞生了。在单体应用中我们通过锁解决的是控制共享资源访问的问题,而分布式锁,就是解决了分布式系统中控制共享资源访问的问题。与单体应用不同的是,分布式系统中竞争共享资源的最小粒度从线程升级成了进程。

2023-07-28 14:38:17 216 1

原创 线程池的使用

当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。

2023-07-15 17:21:09 50 1

原创 SQL 优化

GROUP BY 子句和 ORDER BY 子句一般都会进行排序,以对行进行排列和替换,不过如果指定带有索引的列作为这两者的参数列,由于用到了索引,可以实现高速查询,由于索引是有序的,排序本身都会被省略掉。比如现在有一个用户表,有人说身份证是唯一的,也可以用作主键,理论上确实可以,不过用身份证作主键的话,一是占用空间相对于自增主键大了很多,二是很容易引起频繁的页分裂,造成性能问题。因为ids太多,即使能快速查出数据,但如果返回的数据量太大了,网络传输也是非常消耗性能的,接口性能始终好不到哪里去。

2023-07-15 09:34:02 387 1

原创 CompletableFuture

CompletableFuture是由Java 8引入的,在Java8之前我们一般通过Future实现异步。Future用于表示异步计算的结果,只能通过阻塞或者轮询的方式获取结果,而且不支持设置回调方法,Java 8之前若要设置回调一般会使用guava的ListenableFuture,回调的引入又会导致臭名昭著的回调地狱(下面的例子会通过ListenableFuture的使用来具体进行展示)。

2023-07-13 17:27:54 44 1

原创 SpringBoot实现异步方法

​SpringBoot为我们默认提供了线程池(SimpleAsyncTaskExecutor)来执行我们的异步方法, 我们也可以自定义自己的线程池.第一步配置自定义线程池@EnableAsync // 开启多线程, 项目启动时自动创建 @Configuration public class AsyncConfig {// 设置核心线程数 executor . setCorePoolSize(8);// 设置最大线程数 executor . setMaxPoolSize(20);

2023-07-12 20:05:33 301

原创 线程创建的方法

面试面到过好多次,感觉要是深聊可以聊好久。

2023-05-06 18:51:15 104 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除