自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [Java] 如何理解和设置ThreadPoolExecutor三大核心属性?什么情况下工作线程数会突破核心线程数?任务拒绝策略都有哪些?

ThreadPoolExecutor是多线程编程中比较常用的一种工具类,熟练掌握其基本工作原理是非常重要的。希望通过本文你能了解到ThreadPoolExecutor是如何去把一个任务添加到其内部管理起来、同时在任务积压时又有哪几种基本的任务拒绝策略。

2022-12-18 09:00:00 1354 1

原创 [Java] 什么是锁?什么是并发控制?线程安全又是什么?锁的本质是什么?如何实现一个锁?

锁、并发控制和线程安全这几个概念是相辅相成的,通过本篇文章我们知道了锁其实是一种工具类,也知道其主要职责主要是负责维护锁状态以及加锁失败时阻塞线程,我们也简单地用Java自定义了一个我们自己的锁实现。理解锁的本质是理解多线程编程的基础。

2022-12-13 20:42:29 666

原创 [Java] HashMap是如何实现的?扩容机制是什么?树化机制知道吗?结合源码带你理解HashMap的原理。

HashMap的实现逻辑还是比较简单的,内部是散列表,散列表本质则是数组,散列表数组内的每一个元素都是一个哈希槽,多个哈希值取模后相同的数据会被存储在相同的哈希槽内,为了存储这些数据HashMap使用了链表和红黑树这两种数据结构,它们在数据量变化时通过树化反树化机制来互相转换。而扩容机制则是把HashMap内部的散列表进行倍增的一种处理。

2022-12-12 19:48:44 921

原创 [Java] 序列化(Serialization)的本质是什么?在Java中怎么实现?为什么要了解序列化技术?序列化技术选型要点是什么?

序列化技术本身与业务代码关系并不大,反而更多与企业系统架构关系更大一点。越是趋向于分布式架构的系统,对于好的序列化技术的需求越大,而业务压力小甚至不需要做分布式架构的系统则对于序列化技术的需求没有那么大。目前来看,大部分企业都在往分布式架构系统靠的大环境下,理解序列化技术的本质也变得越发重要。

2022-12-11 09:00:00 1193

原创 [Database] 关系型数据库中的MVCC是什么?怎么理解?原理是什么?MySQL是如何实现的?

在并发场景下,如果我们不对数据做保护,那么很容易出现不可预知的数据错误,在多线程中是如此,在数据库进程服务多个外部进程时也是如此,笔者将用本文去介绍数据库在面对并发场景时,是如何做并发控制的。同时也会简单介绍一下并发控制和锁的基础。

2022-12-06 21:11:05 775 5

原创 [Database] 脏读、幻读这些都是什么?事务隔离级别又是什么?MySQL数据库的事务隔离级别都有哪些?

事务之于数据库是非常重要的,而事务隔离级别之于事务也是一样,是非常重要的。理解几种事务隔离级别以及它们面临如脏读、幻读、不可重复读等问题,是更好地理解关系型数据库如何工作的基础。

2022-12-06 08:00:00 923

原创 [Java] 从内存的角度去理解ThreadLocal如何把不同线程间的访问隔离开来?ThreadLocal的内存泄露问题是什么?如何避免?

ThreadLocal的原理是什么?ThreadLocal的内存泄漏问题时什么?如何避免呢?本文带大家从内存的视角和源码去理解ThreadLocal的实现原理和如何避免出现内存泄漏问题。

2022-11-30 15:42:58 740

原创 [网络] TCP协议中的三次握手是什么?利用3次握手的SYN Flood DDOS攻击知道吗?

协议的设计者并不是神,它们能提供某项特性的同时,也一定需要额外的元信息,这些额外的元信息通常需要在两个通信组件中做数据同步,这个同步的过程被称为握手(handshake)。理解了这一点,笔者相信咱们再去理解其他网络协议的握手处理时,就能把握住其最主要的目的,能够更好更快速地理解协议设计者为什么设计。

2022-11-28 16:54:56 1016

原创 [网络] TCP协议是什么?套接字Socket是什么?它们是什么关系?

TCP协议是当今互联网最重要的基础设施之一,正确理解TCP协议与操作系统进程、Socket文件、网卡和用户进程之间的关系,对于帮助我们去理解当今越来越复杂的企业系统架构会非常有帮助。

2022-11-27 19:01:07 1678 2

原创 [网络] https是什么?https是怎么保障我们信息传输的安全的?

HTTPs总的来说并不难,如果能很好的理解TLS之于HTTPs的作用,那么理解TLS之于其他协议的作用就很简单了,甚至你可以为自己开发私有协议添加TLS的使用,使其变得更加安全。而TLS保证通信安全的根本是加密,而三种加密方式,TLS通常使用对商业环境最友好的混合加密来完成安全通信工作。

2022-11-24 15:33:11 1131

原创 [Java] 浅析rpc的原理及所用到的基本底层技术

通过本文笔者希望我们大家都能理解rpc的本质到底是什么,这样无论是面对阿帕奇的dubbo、谷歌的gRPC亦或是老旧的SOAP,咱们都能快速的理解其到底是在干什么。商业产品无穷无尽,唯有理解其本质才能以不变应万变。

2022-11-23 20:17:49 1898

原创 [Java] Spring Boot Auto Configure(Spring Boot自动装配)的原理

Spring Boot能帮助我们Java开发者快速开发基于Spring框架的应用,除了其作为依赖管理好帮手的一众Spring-Boot-Starter之外,其自动装配(Auto Configure)特性也起到了非常重要的作用。那么Spring Boot是如何实现自动装配的呢?本文将结合源码去讲解其原理。

2022-11-21 08:45:00 2346

原创 [Java] 什么是IoC?什么是DI?它们的区别是什么?

学习应用程序框架永远绕不过的一个话题就是控制反转(IoC)和依赖注入(DI),这两个概念总是令初学者感到困惑,然而这两个概念却是贯穿现代应用程序框架(Application Framework)的最基本的概念,必须要掌握。所以笔者将通过本文带大家了解一下什么是IoC、什么是DI。

2022-09-29 03:06:23 1296

原创 [Java] 乐观锁?公平锁?可重入锁?盘点Java中锁相关的概念

锁相关的概念很多,如乐观锁、公平锁等之外还有独享锁、共享锁、自旋锁、分段锁、偏向锁等大量概念,通常看得人眼花缭乱,笔者将利用本文尽可能地盘点梳理这些概念。

2022-09-19 00:15:50 281

原创 [Java] VSCode Maven项目提示java.lang.NoClassDefFoundError的解决方案

VSCode运行Maven项目时出现java.lang.NoClassDefFoundError错误?有两个原因!该怎么解决?!

2022-08-21 18:10:21 3225

原创 [JVM] 浅析JVM的垃圾回收机制的相关概念

JVM垃圾回收机制概念太多?分代?垃圾回收器?Minor GC、Major GC、ParNew GC、Serial Old GC、CMS GC查下来眼花缭乱迷迷糊糊?一篇文章文章带你分清楚这些概念。

2022-08-14 12:55:43 286

原创 数据结构之 - 散列表(Hash table)

散列表是什么?改如何理解散列表?散列表的基本概念是哪些?Map里的散列表是如何扩容的?一篇文章带你看清散列表的本质。

2021-06-24 14:46:37 252

原创 [排序算法] 归并排序的原理及其Java实现

你知道什么是归并排序算法吗?怎么实现这种排序?听说还有并行版的归并排序,怎么实现呢?本文将带你了解归并排序算法和其并行版的实现。

2020-02-29 20:55:01 235

原创 [排序算法] 插入排序的原理及其Java实现

插入排序,其实现方式,通过逐渐扩大数组头部有序部分的方式,逐渐令整个数组变得有序。具体是通过每一轮 **“插入”** 有序部分外的一个元素(下标:SortedBoundle + 1)到有序部分[0, SortedBoundle]的合适位置pos来实现,因为[0, SortedBoundle]这一部分是有序的,所以可以通过二分查找的方式来加快计算pos的所要时间。这样经过N次插入之后整个长度N的数组就变得有序了。

2020-02-25 23:13:40 194

原创 [排序算法] 冒泡排序的原理及其Java实现

**冒泡排序**,其实现方式,是在每一轮操作中从头部开始把相对较大的数组后部移动,这途中如果遇到更大的元素,那就选择更大的元素向后移动。这样能保证每一轮移动都能让最大的元素“冒泡”到数组尾部。也正是因为这个特性,这个算法被命名为冒泡排序。

2020-02-24 19:41:51 226

原创 [排序算法] 选择排序的原理及其Java实现

文章目录背景选择排序 (Selection Sort)什么是选择排序?选择排序的空间时间复杂度选择排序的实现结语背景本来想一口吃个大胖子。直接一篇文章搞定所有常见排序,发现水平不够,篇幅超过控制。故而决定一篇一篇先单独写,之后再发排序算法的总和篇(社畜像现实低头orz.)选择排序 (Selection Sort)本文要讲的排序算法是排序算法中最基本算法之一的选择排序(Selection...

2020-02-24 17:57:11 202

原创 [小知识] Copyright该如何写?

我们做一个软件、网站的时候经常会遇到需要书写Copyright的时候,那么这个Copyright是什么以及该如何写呢?有必要写吗?看完本文你将知道...

2020-02-14 18:28:30 8648 2

原创 什么是一方库、二方库、三方库

正文项项(En)说明一方库1st party library指项目组内的各个模块,不会被项目组外所使用。通常被使用的版本都是最新版本,不太需要进行严格地版本管理。二方库2nd party library指代公司内部的公共库,需要由公司内部某部门进行维护和版本升级,因会被公司内各个项目组共同所用,且每个项目组所依赖的库版本不一定一致,需要进行严格地版本管理。...

2020-02-11 16:37:34 2151

原创 [Java] 理解框架的基础之什么是Annotation

Java中注解究竟是干什么的? 如何写一个注解?注解的信息又是如何被框架利用的。本文讲简单探讨这几个问题。

2020-01-20 22:44:05 235

原创 [Java] 细数几种单例的实现方式

盘点6种Java单例实现。E.g. 懒汉饿汉实现、双重检查锁定实现、枚举实现等

2020-01-11 22:41:18 256

原创 [Java] 为什么要重写toString方法?如何写?

你知道该如何正确重写toString方法吗?阅读本文你将知道正确地写一个toString方法的原理和了解现已有的开源工具去生成正确的toString方法。

2019-12-15 02:55:10 2366

原创 [Linux Network I/O] 你的电脑是如何接受来自网络的数据的?

文章目录前言TCP/IP 4层模型OSI 7层模型参考前提知识网络数据包的接收流程1. 硬件接收(Hardware Reception)2. 硬中断请求(Hard IRQ)Q: 网卡是如何通知CPU的?Q: 中断处理器(Interrupt Handler)是什么?3. 软中断请求(Soft IRQ)4. 应用接收(Application receive)Socket文件bash重定向参考文档(图片...

2019-12-08 00:18:21 583

原创 [Java] 如何实现一个不可变类(Immutable class)

不可变类在日常工作中经常用到,如JDK中的String类和所有的包装类。使用不可变类有很多好处,如何实现一个不可变类呢?本文将介绍在Java中如何实现一个不可变类并用实战代码来帮助读者理解。

2019-12-01 19:11:45 2803

原创 [Linux] whoami命令与其继任者的id命令

笔者一度很喜欢使用的whoami命令其实是已经过时的命令。所以对其做了一番调查,并写下本文介绍其后任者。

2019-11-28 18:19:24 613

原创 [Mac] 如何放大缩小光标

文章目录前言正文Step1: 打开系统偏好设置 (System Preference)Step2: 打开辅助功能 (Accessibility)Step3: 选择显示器(Display)栏前言本文是一篇极短的文章,仅介绍如何在Mac下如何控制光标(Cursor)大小。笔者写本文的原因仅因为水果不知道搞什么,在系统偏好设置里居然没有光标大小的设定。正文为了能把屏幕上的光标放大,你需要下面...

2019-11-24 19:16:55 1190

原创 [Java] .class文件格式与其内部结构

通过阅读本文,你将知道java源代码、class文件里的bytecode,其实没有那么神秘,你也能对其内容做解析。

2019-11-10 17:23:43 234

原创 [Java] 用C编写你自己的native方法

native关键字到底的作用是什么呢?native方法的实现源码又放在什么地方呢?如何实现一个自己的native方法?本文讲简单介绍native背后的原理和实现一个简单的Helloworld native方法。

2019-11-09 13:09:33 1237 1

原创 [Linux] 盘点I/O 重定向符与使用例

如果你已经对I/O重定向符非常了解,也不妨看看本文。也许会有新的发现。如果你对I/O重定向不太了解,那么推荐你仔细看完本文,你将对I/O重定向有最基本的了解。

2019-11-04 23:49:12 397

原创 [Unicode] Unicode的上标与下标

本文整理了用于标注引用和参考的Unicode上下标字符。供需要的时候查询。

2019-11-03 17:19:22 8747

原创 [小技巧]如何使用Mac命令行建立一个TCP连接?

想知道一个在互联网中的服务器都开放了哪些端口吗?通过本文你可以知道如何用NetCat命令行工具进行最基础的端口扫描。

2019-10-24 20:43:14 6626

原创 [密码学]对称密钥加密、非对称密钥加密和混合加密的基本原理

理解“对称密钥加密”、“非对称密钥加密”、“混合加密”的基本工作原理。意识到TLS等加密技术背后的”男人“...

2019-10-22 23:26:20 9232

原创 [计算机基础]整理计算机的数据计量单位

整理了一下计算机中的数据计量单位(KB、MB等)的缩写和其对应的三种语言(中英日)的全称。方便查询使用。

2019-10-20 23:16:11 579 3

原创 【闲谈】E-mail是怎么发送和接收的?

电子邮件的工作原理电子邮件(E-mail)是什么?相关的通信协议SMTPPOP & IMAPPOPIMAPIMAP 和 POP的区别?电子邮件如何工作的?总结在现在生活和工作中,我们几乎离不开电子邮箱。那么电子邮件到底是怎么工作的呢?笔者对此产生了兴趣。决定去探寻一下电子邮件的工作原理。那么首先我们得明确一下电子邮件是什么。电子邮件(E-mail)是什么?电子邮件,又经常被称为E-m...

2019-09-02 21:03:31 10058

原创 [Java小记] 记一下Log的各个级别及其用法

1. Log级别参考下列表格Log级别说明用法error错误:系统运行错误,无法自行恢复,并且会影响到如下游系统或系统的使用者。一般需要人为干预才能恢复正常运行。凌晨2点法则(2AM Rule):当发生这个错误时,你觉得有必要在2点熟睡之际叫醒的时候,log级别设为error。warn警告:系统运行异常,能自行恢复,继续运行。有可能异常会影响到使用者。但一般不...

2019-07-02 23:16:28 1543

原创 粗谈Java虚拟机是如何创建一个类的实例的?

本篇将简单探讨一下,JVM是如何一步一步创建一个对象的。1. Class Loading在一个特定的类能被实例化之前,JVM要做的第一步是需要将描述这个类的文件也就是.class文件给加载到内存里。一般的做法是根据指定的classpath在文件系统里搜索.class文件。这个处理过程被称为class loading。熟知的朋友们知道这里还有别的class loading方法,比如通过URL...

2019-05-19 23:46:28 441

空空如也

空空如也

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

TA关注的人

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