自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring 手写框架

提到 IOC,初次接触的人可能会觉得非常高大上,觉得是一种很高深的技术,然而事实呢?事实是 IOC 其实仅仅只是一个 Map 集合而已。IOC 全称为:Inversion of Control。控制反转的基本概念是:不用创建对象,但是需要描述创建对象的方式。

2023-07-31 21:56:13 148

原创 Mybatis手写框架

Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。

2023-07-31 21:45:51 390

原创 epoll & Select

而每次调用epoll_wait则没有这么罗嗦,epoll只在epoll_ctl时把current挂一遍(这第一遍是免不了的)并给每个fd一个命令“好了就调回调函数”,如果设备有事件了,通过回调函数,会把fd放入rdllist,而每次调用epoll_wait就只是收集rdllist里的fd就可以了——epoll巧妙的利用回调函数,实现了更高效的事件驱动模型。,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。

2023-07-27 19:03:27 111

原创 BigDecimal 原理

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。

2023-07-27 15:12:03 443

原创 二分法算法

探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。而且,我们就是要深入细节,比如不等号是否应该带等号,mid 是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找算法。答:首先,while 循环的终止条件是 left == right,所以 left 和 right 是一样的,你非要体现右侧的特点,返回 right - 1 好了。// 这样想: mid = left - 1。

2023-07-27 09:35:00 43

原创 滑动窗口算法

滑动窗口算法的本质是双指针法中的左右指针法,所谓滑动窗口,就像描述的那样,可以理解成是一个会滑动的窗口,每次记录下窗口的状态,再找出符合条件的适合的窗口。它可以将双层嵌套的循环问题,转换为单层遍历的循环问题。

2023-07-27 09:13:42 286

原创 JDK1.8 Stream流操作

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。特点不是数据结构,不会保存数据。不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可以修改流中元素)

2023-07-27 09:10:19 197

原创 Docker

Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。更加详细地来说,请您假定您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用依赖于您当前的配置,还要依赖于某些特定文件。与此同时,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。

2023-07-27 08:58:53 27

原创 Linux 常见命令

是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。使用 “+” 设置权限,使用 “-” 用于取消。(向一个命令启动的进程发送一个信号)pwd 显示当前工作的路径。

2023-07-27 08:56:43 29

原创 Spring MVC底层分析

MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)。模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的

2023-07-26 20:32:31 137 1

原创 Spring 框架底层原理

继承 DefaultSingletonBeanRegistry 默认的单例抽象类,同时也具备了使用单例注册类的方法。重点:实现了接口 BeanFactory 的实现,方法 getBean 的实现过程中可以看到,主要是对单例 Bean 对象的获取以及在获取不到时需要拿到 Bean 的定义做相应 Bean 实例化操作。那么 getBean 并没有自身的去实现这些方法,而是只定义了调用过程以及提供了抽象方法,由实现此抽象类的其他类做相应实现。那 AbstractBeanFactory 的实现类有哪些?

2023-07-26 19:49:04 596 1

原创 OAuth2

OAuth就是一种授权机制,数据的所有者告诉系统,统一授权第三方应用进入系统,获取部分数据。系统产生短期有实效和权限范围的令牌(token)给第三方应用,用来代替密码,供第三方使用。OAuth2.0授权的核心就是颁发访问令牌、使用访问令牌。也可以认为OAuth2.0是一个安全协议,按照OAuth2.0的规范来实施,就可以用来保护互联网中受保护资源。在OAuth2.0中“O”是Open的简称,表示“开放”的意思。

2023-07-17 14:18:22 95 1

原创 WebSocket

WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接, 并进行双向数据传输。WebSocket本质上一种计算机网络应用层的协议,用来弥补http协议在持久通信能力上的不足。WebSocket 协议在2008年诞生,2011年成为国际标准。现在最新版本浏览器都已经支持了。

2023-07-16 11:14:41 67 1

原创 Java异常篇

Java 的所有异常可以分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。受检查异常编译器要求必须处理的异常。正确的程序在运行过程中,经常容易出现的、符合预期的异常情况。一旦发生此类异常,就必须采用某种方式进行处理。除 RuntimeException 及其子类外,其他的 Exception 异常都属于受检异常。

2023-07-13 21:42:49 84 1

原创 SPI 服务提供发现机制

是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如 java.sql.Driver 接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL 和 PostgreSQL 都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦。Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。

2023-07-13 21:33:28 135 1

原创 进制转换篇

将某个十进制数除16得到的整数部分保留,作为第二次除16时的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为16就结束,将所有得到的余数最终逆序输出,则为该十进制对应的二进制数。将某个十进制数除8得到的整数部分保留,作为第二次除8时的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为8就结束,将所有得到的余数最终逆序输出,则为该十进制对应的二进制数。得到结果:12.534Q.将796除8取得第一个余数为4,将除8得到的整数部分99作为第二次的被除数,重复上述步骤,直至最终整数部分为0就结束。

2023-07-13 21:12:59 173 1

原创 前端开发手册

必须使用 camelCase 驼峰命名必须指定类型必须加上注释,表明其含义必须加上 required 或者 default,两者二选其一如果有业务需要,必须加上 validator 验证props: {// 组件状态,用于控制组件的颜色status: {return ['succ','info','error'== -1},// 用户级别,用于显示皇冠个数必须使用 camelCase 驼峰命名必须指定类型必须加上注释,表明其含义。

2023-07-13 20:56:45 579 1

原创 线程池 && 异步编排

Executors 的 4 个功能线程池虽然方便,但现在已经不建议使用了,而是建议直接通过使用 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。FixedThreadPool 和 SingleThreadExecutor:主要问题是堆积的请求处理队列均采用 LinkedBlockingQueue,可能会耗费非常大的内存,甚至 OOM。CachedThreadPool 和 ScheduledThreadPoo。

2023-07-13 20:51:48 293 1

原创 Synchronized 对象头

klass pointer存储对象的类型指针,该指针指向它的类元数据值得注意的是,如果应用的对象过多,使用64位的指针将浪费大量内存。仔细看一下偏向锁的组成,对照输出结果红色划线位置,你会发现占用** thread 和 epoch** 的 位置的均为0,说明当前偏向锁并没有偏向任何线程。你也可以理解为此时的偏向锁是一个。刚开始使用这段代码我是震惊的,为什么睡眠了5s中就把活生生的A对象由无锁状态改变成为偏向锁了呢?biased_lock:偏向锁标记,为1时表示对象启用偏向锁,为0时表示对象没有偏向锁。

2023-07-13 20:39:23 79 1

原创 RSA & ECDHE 算法

对称加密算法和非对称加密算法。对称加密在对称加密技术中,对信息的加密和解密都使用了相同的密钥Key,也就是说使用同一个密钥Key对数据进行加密和解密。这种加密方法可简化加解密的处理过程,信息交换双方都不必彼此研究和交换专用的加解米算法。如果在交换阶段,密钥Key没有泄露,那么加密数据的机密性和报文的完整性就可以得到保证。非对称加密在非对称加密中,不再只有一个密钥Key了。在非对称加密算法中,密钥被分解为一对,一个称为公开密钥,另一个称为私有密钥。对于公钥,可以通过非保密方式向他人公开,而私钥。

2023-07-13 19:33:04 681 1

原创 IO 模型篇

epoll 将文件描述符列表的管理交给内核负责,每次注册新的事件时,将 fd 拷贝仅内核,epoll 保证 fd 在整个过程中仅被拷贝一次,避免了反复拷贝重复 fd 的巨大开销。在 NIO 的基础上引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。但select、poll、epoll 本质上都是同步 I/O ,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步 I/O 则无需自己负责进行读写,异步 I/O 的实现会负责把数据从内核拷贝到用户空间。

2023-07-13 19:25:59 72 1

原创 常见设计模式

介绍了我们项目中能够常用的设计模式!

2022-11-30 01:39:06 241 1

原创 单点登录(SSO)

单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如,阿里旗下有淘宝、天猫等网站,还有背后的成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。

2022-11-29 19:11:18 820

原创 线程池 && 异步编排

文章主要是针对线程池和异步编排进行简单的使用讲解

2022-11-29 17:24:17 625

原创 了解JWT(跨域)

什么是JWT呢?1、JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。它定义了一种紧凑且独立的方式,可以在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。简单的讲就是,JWT是一个带签名及用户相关的信息加密成串,页面请求校验登录接口时,请求头中携带JWT串到后端服务,后端通过签名加密串匹配校验,保证信息未被篡改。校验通过则认为是可靠的

2021-11-22 19:28:43 993

原创 什么是多线程呢?

学习多线程聊到多线程,我们一定会联想到进程,那么它们两有啥关系呢??1、区分线程和进程1.1、 进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。下面的任务管理器就有进程的例子一1.2、线程线程是一条执行路径,是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共

2021-11-15 00:49:42 154

原创 SpringMVC框架

了解MVC框架的底层原理?1、什么是MVC?MVC是三个单词的首字母缩写,它们是Model(模型)、View(视图)和Controller(控制)。1.1、Model(模型)模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用

2021-11-11 01:39:21 594

原创 Java IO流的那些事

Java IO流介绍IO流的概念IO流的概念Java的IO是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在Java中把不同的输入/输出(Input/output)源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许Java程序使用相同的方式来访问不同的输入/输出源。stream是从起源(source)到接收的(sink)的有序数据。...

2021-05-22 23:31:02 295 3

原创 你能区分这几种Java集合类型?

你能区分这几种Java集合类型?Java集合的背景 ⒈Java知识中有一个类集框架的概念,每种文献各有各的说法,也有的叫做Java集合类,造成混乱。 并且概念中Collection翻译成中文又是类集的意思,Set翻译成中文是集合的意思, 混乱的翻译、指代不明的名词概念以及网络上copy的差错,导致初学者从入门到放弃。 现在本学习笔记将帮你梳理基础概念、供你参考解决疑惑。 ⒉JDK 1.2版本开始引入类集开发框架,提供一系列接口和实现子类,最初时JDK版本都是使用 Object类型实现数据接

2021-04-03 14:31:34 937 9

空空如也

空空如也

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

TA关注的人

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