- 博客(103)
- 资源 (16)
- 收藏
- 关注
原创 Java中的四种引用类型及其使用方式
本文详细介绍了Java中的四种引用类型:强软弱虚引用,并通过代码展示了它们的用法,有助于大家加深对Java的理解。
2023-04-06 22:38:53 2890 1
原创 汇编系列03-不借助操作系统输出Hello World
通过将汇编程序作为主引导扇区的内容,从而绕过操作系统,在屏幕上打印Hello, world。有助于理解计算机的工作方式。
2023-03-05 21:20:25 731
原创 汇编系列02-借助操作系统输出Hello World
通过汇编在x86-64 CPU上的Linux操作系统的系统调用来实现输出hello world这个小例子,详细剖析syscall指令和系统调用是怎么利用寄存器传递参数的。
2023-03-04 19:36:27 1924
翻译 Rust模块系统的清晰解释
本文通过三个例子来讲解Rust的模块系统与文件系统之间没有隐式映射关系,让Rust学习者能够清晰地理解Rust模块系统。
2022-11-06 20:09:35 465
原创 C语言Socket编程为什么要将sockaddr_in强制转换成sockaddr?
通过C语言的Socket编程,分析C语言的结构体指针强制转换的用法。
2022-10-08 19:55:35 2462
原创 Spring框架新手快速上手系列:(二)体验一把自己配置低级容器
Spring框架快速上手系列二:手动配置低级容器,感受Spring框架内部的工作原理,开启源码研究之路。
2022-08-24 19:38:11 403
原创 Elasticsearch常用的相关操作汇总
本文总结了Elasticsearch常用的一些命令,涉及更新mapping、根据查询更新、创建脚本、根据脚本过滤等。
2022-07-06 19:00:01 574
原创 聊一聊Java中的线程中断
Java中的线程在运行的时候,有办法强制让它中断运行么?在JDK的Thread类中有stop和destroy方法,但是已经被标记为过时的,stop方法之所以不推荐使用是因为它是不安全的,比如它会让线程释放它持有的锁,这样可能会导致它保护的资源处于不一致的状态,destroy方法则直接抛出NoSuchMethodError异常。正确的、优雅的中断线程的方式应该是给线程发出中断信号(即调用线程实例的interrupt方法,用余春龙大佬的话来说,interrupt这个词很容易让人产生误解,从字面含义看好像是线程
2022-05-04 16:17:03 1969
翻译 为什么Java的wait和notify必须要在synchronized代码块中调用?
让我们看一个例子,如果我们不在synchronized代码块中调用wait()方法会发生什么问题。假设我们要自己实现一个阻塞队列(当然JDK中已经有了BlockingQueue,这儿只是为了说明问题)。没有同步(synchronization)的代码可能像下面这样:class BlockingQueue { Queue<String> buffer = new LinkedList<String>(); public void give(String
2022-05-04 12:30:59 1177 1
原创 一次线上频繁FullGC的排查
背景一日,线上的某个服务的某个节点突然告警,频繁地FullGC,这个服务已经有半个月没有进行过发布和容器重启了。处理步骤首先将告警的容器隔离,从网关上摘掉这个节点,让流量不再进入到这个节点。通过jmap将节点的内存快照dump下来。通过jprofiler分析hprof文件。分析原因有很多工具可以方便地分析hprof文件,如MAT、JProfiler。我们通过JProfiler分析,在JProfiler的启动中心打开单个快照。选择下载到本地的hprof文件,等待一会解析,然后直奔“最大
2022-03-12 13:29:53 3864
原创 javassist中的类名前缀Ct是什么意思?
javassist中有CtClass、CtField、CtBehavior等类,那么这些类名中的Ct是什么意思呢?Ct是Compile Time的缩写,即“编译时”的意思。因为CtClass表示一个class还没有被装载进java虚拟机,而java.lang.Class表示一个运行时class,它已经被装载进java虚拟机。刚开始的时候Javassist不能和类加载器一起配合工作,所以Ct也不是什么坏的叫法。那么为什么不叫Lt(Load Time)呢?作者Shigeru Chiba也想重命名,但是为时
2021-11-22 20:05:05 664
原创 用java8 API实现列表元素去重
import lombok.AllArgsConstructor;import lombok.Data;import java.util.Arrays;import java.util.List;import java.util.function.Function;import java.util.stream.Collectors;/** * @author pilaf * @description 用java8 API实现列表元素去重 * @date 2021/7/29 12:55
2021-07-29 15:20:10 222
原创 MongoDB分组取每组中一条数据
需求背景有一个mongo collection,里面存放了运送货物的司机位置信息,字段主要有_id: mongodb默认的主键字段orderId:订单idpositionTime:位置上报时的时间戳lon:经度信息lat:纬度信息现在需要支持根据一批订单id,查询它们最新位置的经纬度。需求分析根据需求背景,可以知道,查询的条件是按照订单id作为分组,每个分组内按照positionTime降序排序,然后将分组内的第一条记录的所有字段返回即可。在NoSQL Booster中查询的语句:db
2021-05-29 08:43:06 5390 1
翻译 ContextLoaderListener vs DispatcherServlet
在基于XML的Spring MVC配置中,在web.xml中你需要有ContextLoaderListener和DispatcherServlet的声明。下面让我们来理解一下它们在框架中的作用和不同。根上下文和子上下文首先,我们需要知道下面这两个知识:Spring在同一时刻可以有多个上下文(contexts)。其中一个是根上下文(Root Context),其它的是子上下文(Child Context)。所有的子上下文可以访问根上下文中定义的bean,但是反过来则不行,即根上下文是不能访问子上下文
2020-12-31 13:15:45 385
原创 牛客网设计LRU缓存结构Java实现
题目描述设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。若opt=1,接下来两个整数x, y,表示set(x, y)若opt=2,接下来一个整数x
2020-12-09 18:50:01 646 2
原创 IDEA Download Sources报错 Connection refused的解决方法
IntelliJ IDEA 2020.2.2 (Ultimate Edition)maven项目,.class文件点击Download sources的时候报错:java.rmi.ConnectException: Connection refused to host: 127.0.0.1把/etc/hosts文件(mac的hosts路径)中除了127.0.0.1 localhost::1 localhost之外的127.0.0.1或localhost的配置都去掉,重
2020-10-09 15:42:30 10023 2
原创 一台Linux机器上启动多个redis实例
说明:磁盘上的redis程序只有一份,可以启动多个redis实例,每个实例的端口不一样。进入redis官网找到要下载的版本:https://redis.io/download先在linux机器上安装gcc(用yum install gcc安装),如果没安装的话后续make会报错。比如我要安装在/root/software目录下,进入该目录。1.下载tar包wget http://download.redis.io/releases/redis-5.0.9.tar.gz2.解压tar包tar
2020-09-13 11:24:01 1587
原创 MySQL执行Alter table xx add column报Duplicate entry错误
DDL:alter table mytable add column ...(省略了部分字段),add column price int NOT NULL DEFAULT '0' COMMENT '价格';mysql版本是5.7.25-28-log,表的存储引擎是InnoDB。执行Alter table xx add column报了错误ERROR 1062 (23000): Duplicate entry '9277700--1' for key 'spu_sku'Thu Sep 3 1
2020-09-04 11:33:55 3016
原创 非科班程序员迅速理解TCP连接的本质
首先,网络是基于IP的。IP协议给网络中的每个节点分配了一个地址,并且允许你从某个节点发送少量数据到另一个节点,但是这并没有什么太大价值,因为我们没法确认数据是否真的到达对方节点了,并且是否按照正确的顺序到达了。如果我们想要一套抽象的机制来传输任意数量的数据,并且保证它们顺序到达对方节点,我们需要在IP协议上方增加一个协议,用于处理传输中的顺序和保证到达,这正是TCP协议的目标。和TCP并列的,是另一个传输层协议——UDP,UDP协议不做任何检查,不保证数据一定到达,不保证顺序。UDP仅仅是在原始IP数
2020-07-27 17:52:54 505
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人