自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大数相乘--Java实现

1. 问题描述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。不能使用任何标准库的

2021-08-17 14:28:57 512

原创 实战篇--多线程实现组件加载

1. 场景介绍​ 启动一个服务之前,需要先加载多个组件,等到多个组件都加载完毕后,该服务的主线程方能正常运行。2. 技术点2.1 CountDownLatchCountDownLatch 使 主线程 在 count 个线程执行完毕之前阻塞在一个地方CountDownLatch的底层支持是AQS,当使用countDown()方法时,其实使用了tryReleaseShared方法以 CAS 的操作来减少 state,直至 state 为 0 。当调用 await() 方法的时候,如果 state

2021-08-15 15:21:30 204

原创 MySQL性能优化详解【精华篇】

MySQL性能优化详解【精华篇】0. 前置说明本文使用的数据库存储200万行的记录全文词数:6169sql文件下载地址:https://gitee.com/alizipeng/the-way-of-programming/blob/master/09-%E6%95%B0%E6%8D%AE%E5%BA%93/user.sql若希望看到其他技术笔记欢迎来访我的技术笔记项目:https://gitee.com/alizipeng/the-way-of-programmingmysql&

2021-08-11 16:19:14 957

原创 Java8新时间与日期类

Java8新时间与日期类1. 旧的时间日期类1.1 JDK1.0public class Date implements java.io.Serializable, Cloneable, Comparable<Date>1.2 JDK1.1public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> abstract public class TimeZo

2021-08-04 11:22:24 126

原创 Object类分析

Object类分析1. 概述​ Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.【类对象是类层次结构的根。每个类都有一个 Object 作为超类。所有对象,包括数组,都实现了这个类的方法】2. 类源码package java.lang

2021-08-03 20:11:17 145

原创 时间复杂度分析

时间复杂度分析1. 常用的时间复杂度量级常数阶:O(1)对数阶:O(logN)线性阶:O(n)线性对数阶:O(nlogN)平方阶:O(n^2)立方阶:O(n^3)k次方阶:O(n^k)指数阶:O(2^n)阶乘:O(n!)2. 常数阶O(1)int a = 1;a += 2;int b = 2;3. 对数阶O(logN)int i = 1;while(i<n){ i = i*2;}4. 线性阶O(n)int count = 0;for(int

2021-08-01 21:42:06 75

原创 B树 B+树和红黑树详解

1. 树1.1 2-3树​ 为了保证二叉查找树的平衡性,允许树中的一个节点保存多 个键。1.1.1 2-3树的定义一棵2-3查找树要么为空树,要么满足如下两个条件;2-节点:含有一个键和两条链,左链指向的2-3树中的键都小于该节点,右链指向的2-3树中的键都大于该节点3-节点:含有两个键和三条链,左链指向的2-3树中的键都小于该节点,中链指向的2-3树中的键都位于该节点的两个键之间,右链指向的2-3树中的键都大于该节点1.1.2 查找​ 将二叉查找树的查找算法一般化,可以得

2021-07-27 21:51:26 1431

原创 内存管理之虚拟内存管理

内存管理之虚拟内存管理为什么引入虚拟内存虚拟内存空间的大小由什么因素决定虚拟内存怎么解决问题,带来什么问题1. 基本概念1.1 传统存储管理方式的不足一次性:作业必须一次性装入内存才可以运行。导致大作业可能无法运行;导致当大作业量要求运行时,只能先运行部分驻留性:作业被装入内存后,其任何部分不能被换出,只能等待作业完成。1.2 局部性原理时间局部性:由于程序中充满了大量的循环操作,当某段代码或某些数据被执行或访问时,在一定时间内,有可能会被再次执行或访问。空间局部性:

2021-07-25 10:56:37 322 1

原创 内存管理之内存管理的概念

内存管理之内存管理的概念为什么进行内存管理页式管理中每个页表项大小的下限如何决定多级页表解决了什么问题,带来了什么问题1. 内存管理的基本原理和要求1.1 定义操作系统对内存的划分和动态分配就是内存管理的概念1.2 内存管理的功能内存空间的分配和回收:由操作系统完成对主存的分配和回收,对编程人员透明地址转换:使逻辑地址转换为真实的物理地址内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存存储保护:保证各道作业在各自的存储空间内运行,互不干扰1.3 程

2021-07-25 10:33:38 1905

原创 死锁产生的条件和预防方法

死锁产生的条件和预防方法1. 资源问题在系统中有许多不同类型的资源,其中可以引起死锁的主要是需要采用互斥访问方法的、不可以被抢占的资源[临界资源]。如打印机、数据文件、队列、信号量等根据是否可重用分为:可重用资源和消耗性资源根据是否可抢占分为:可抢占性资源和不可抢占性资源2. 计算机系统中的死锁死锁的起因通常是源于多个进程对资源的争夺,对不可抢占性资源和可消耗性资源的争夺都可能会引起死锁。竞争不可抢占性资源引起死锁竞争可消耗性资源引起死锁进程推进顺序不当引起死锁3. 死

2021-07-24 06:17:44 426

原创 反转链表合集

反转链表合集1. 反转整个链表package algorithm.list;/** * 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 */public class Reverse01 { public static void main(String[] args) { ListNode node01 = new ListNode(1); ListNode node02 = new ListNode(2); L

2021-07-24 01:18:04 91

原创 ping原理

ping原理1. 网际控制报文协议ICMP1.1 简介有效转发IP报文和提高交付成功的机会ICMP报文作为IP报文的数据部分被发送出去,属于网络层协议ICMP报文格式:ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告1.2 种类ICMP报文分为两种:ICMP差错报告报文 和 ICMP询问报文几种常用的报文类型:代码字段:进一步区分某种类型的几种不同的情况检验和字段:检验整个报文IP报文首部的检验和字段,并不检验数据部分,因此,经过IP报文传

2021-07-23 14:12:15 341

原创 进程线程与协程程详解

进程线程与协程程详解1. 进程1.1 简介进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。1.2 组成进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈

2021-07-22 22:23:05 80

原创 生产者消费者模式的多种实现

生产者消费者模式的多种实现1. synchronized方式1.1 方法简介Object.wait() 使当前的线程进入到等待状态【进入到等待队列】Object.notifyAll() 唤醒等待中的全部线程Object.notify() 随机唤醒一个线程1.2 代码package thread.consumer;import java.util.ArrayList;import java.util.List;/** * 消费者 */public class Consum

2021-07-22 18:24:34 109

原创 Lock、ReadWriteLock与Condition

Lock、ReadWriteLock与Condition1. 简介Lock 和 ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock。Lock 接口支持那些语义不同(重入、公平等)的锁规则,可以在非阻塞式结构的上下文(包括 hand-over-hand 和锁重排算法)中使用这些规则。主要的实现是 ReentrantLock。ReadWriteLock

2021-07-22 15:29:40 174

原创 synchronized详解

synchronized详解1. 简介解决多线程访问共享资源的同步性问题synchronized关键字保证被其修饰的方法或者代码块在任意时刻只能有一个线程在执行在 Java 早期版本中,synchronized 属于 重量级锁因为监视器锁【monitor】依赖操作系统的Mutex Lock,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成

2021-07-22 11:10:15 101

原创 MySQL大数据量分页查询方法及其优化

MySQL大数据量分页查询方法及其优化1. 直接使用数据库提供的SQL语句语句样式:select * from table_name limit offset, rows适用场景:数据量比较少的情况【百、千条记录】缺点:全表扫描,速度慢。limit限制的是从结果集的offset位置处取出rows条输出,其余抛弃-- 取前4条数据select * from table_name limit 0,5-- orselect * from table_name limit 5

2021-07-21 20:42:00 233 2

原创 MySQL事务隔离级别详解

MySQL事务隔离级别详解1. 什么是事务事务是逻辑上的一组操作,要么都执行,要么都不执行。假如小明要给小红转账1000元,涉及到两个关键操作:将小明的余额减少1000元,将小红的余额增加1000元。事务就是保证这两个关键操作要么都成功,要么都要失败。2. 事务的特性【ACID】原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性: 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;隔离

2021-07-21 17:01:39 83

原创 MySQL索引详解

MySQL索引详解1. 什么是索引索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树, B+树和 Hash2. 索引优缺点优点:能极大提高查询效率创建唯一索引可以保证数据库表中每一行数据的唯一性缺点:创建和维护索引比较耗时,当数据表频繁增删改时,对应的索引也要动态改变,会降低SQL执行效率索引需要使用物理文件存储,会耗费一定存储空间大多数情况下,索引查询都比全表扫描快。但是数据库数据量不大的话,使用索引不一定能提升查询效率3. 索引底层数据结构

2021-07-21 15:56:08 75

原创 HashMap底层实现原理

HashMap底层实现原理1. 简介HashMap 主要用来存放键值对基于哈希表的 Map 接口实现非线程安全的HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的JDK1.8 以后,当链表长度大于阈值(默认为 8)且数组长度大于等于64时,将链表转化为红黑树,以减少搜索时间HashMap 默

2021-07-21 15:06:53 93

原创 Java多线程与并发编程--ReentrantLock

Java多线程与并发编程–ReentrantLock1.1 底层原理public class ReentrantLock implements Lock, SerializableReentrantLock底层使用了 CAS + AQS队列1.1.1 CAS比较并交换,是一个原子操作【CPU指令】。当且仅当 当前值与预期值相等时,更新为新值。是乐观锁的实现机制在Java中,通过调用本地方法的方式实现CASCAS是整个JUC包的底层支持1.1.2 CAS的缺点ABA问题【

2021-07-20 13:47:42 62

原创 Nginx详解

Nginx详解1. 简介高性能的HTTP和反向代理web服务器稳定、丰富的功能集和示例配置文件、低系统资源的消耗轻量级web服务器和反向代理服务器电子邮件代理服务内容占有少,并发能力强专门为性能优化开发,能经受高负载的考验2. 什么是正向代理把局域网外的Internet想象成一个巨大的资源库,局域网中的客户端要访问Internet,就需要通过代理服务器来访问,这种代理服务就称为正向代理过程:在客户端(浏览器)配置代理服务器通过代理服务器进行互联网访问3. 反

2021-07-14 17:12:57 381

原创 Redis详解

Redis详解1. Redis简介使用C语言开发的内存数据库,读写速度快,广泛用于缓存方向可以用于分布式锁,甚至是消息队列提供多种数据类型来支持不同的业务场景支持事务、持久化、Lua脚本、多种集群方案2. Redis 和 Memcached 对比2.1 相同点都基于内存,一般都是用来当缓存使用都有过期策略两者性能都非常高2.2 区别Redis 支持更丰富的数据类型【key-value类型、提供l ist set zset hash等数据结构的存储】、更复杂的应用场

2021-07-14 10:45:40 75

原创 造轮子之极简版ORM框架

极简版ORM框架1. 概述实现@Table、@Column注解利用反射机制,解析对象,动态生成SQL语句2. 注解实现2.1 @Table注解package com.zipeng.annotation;import java.lang.annotation.*;/** * 自定义 @Table 注解 * * @author: zipeng Li * 2021/6/1 20:37 */@Inherited // 当该注解应用于一个类时,能自动被其子类继承@Targe

2021-06-02 21:34:13 87

原创 JVM概述

JVM概述1. 基本概念JVM 是可以运行 Java 代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆 和 一个存储方法域。JVM 运行在操作系统之上,与硬件没有直接交互。2. 运行过程Java源文件 ==》 编译器 ==》 字节码文件Java源文件能通过编译器产生响应的.class文件,也就是字节码文件字节码文件 》JVM》机器码字节码文件能通过JVM的解释器,编译成特定机器上的机器码每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也

2021-05-29 16:13:38 63

原创 Java基础面试题第三弹

Java基础面试题第三弹1. char型变量能不能存储一个中文汉字,为什么char类型可以存储一个中文汉字,因为Java使用的编码是Unicode【不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法】。一个char类型占2个字节【16比特】,所以放一个中文是没问题的。使用Unicode意味着字符在JVM内部和外部有不同的表现形式,在JVM内部都是Unicode。当这个字符被从JVM内部转移到外部时【例如,存入文件系统中】,需要进行编码转换。所以Java中有字节流和字符流,以及

2021-05-29 11:33:56 133

原创 JVM之类加载机制

1. JVM类加载机制JVM 类加载机制分为五个部分:加载、验证、准备、解析、初始化。1.1 加载JVM 在该阶段完成三个任务:通过类的全限定名获取该类的二进制字节流;将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;在内存中创建一个代表该类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。可以从多来源获取类的二进制流:可以从ZIP包读取,如 jar包、war包等;可以运行时计算生成【动态代理】;可以由其他文件生成【如JSP转为Clas

2021-05-28 17:03:43 134

原创 算法笔记之二分查找框架

二分查找框架1. 简单二分查找int binary_search(int[] array, int target){ int left = 0, right = array.length - 1; while(left <= right){ int mid = left + (right - left)/2; if(array[mid] > target){ right = mid - 1; }else if(array[mid] < tar

2021-05-27 18:59:41 100 1

原创 Java基础面试题第二弹

Java基础面试题第二弹1. Math.round(11.5) ?Math.round(-11.5)?/** * @author: zipeng Li * 2021/5/25 15:15 */class Test { public static void main(String[] args) { System.out.println(Math.round(11.5)); // 12 System.out.println(Math.round(-11.5

2021-05-27 15:40:29 60

原创 Java基础面试题第一弹

Java基础面试题第一弹1. 面向对象的特征有哪些方面抽象:抽象是将一类对象的共同特征抽离出来构造成类的过程。包括数据抽象和行为抽象两个部分,抽象只关注对象的属性和行为,并不关注行为的具体细节。【如狗都会叫,但是不同品种的狗的叫声有差异】继承:继承是从已有类,得到继承信息并创建新类的过程。提供继承信息的类被称为父类【超类、基类】,得到继承信息的类被称为子类【派生类】。继承让变化中的系统有了一定的延续性。封装:封装是把数据和操作数据的方法绑定在一起,对数据的访问只能通过已定义的接口。多态:多态指

2021-05-25 16:57:35 82

原创 Java设计模式之原型模式

原型模式1. 基本介绍原型模式【Prototype模式】,利用原型实例指定创建的对象种类,并通过拷贝原型实例来创建新的对象。是一种创建型设计模式,允许根据一个对象再创建一个可定制的对象,而无须知道其创建细节。工作原理:通过将原型对象传给要发动创建行为的对象,发动创建行为的对象通过调用原型对象拷贝自身的方法来实施创建。即 对象.clone()。2. UML类图描述Prototype:原型接口,声明一个拷贝自己的接口。ConcreteType:具体的原型类,实现一个拷贝自己的方法。C

2021-05-24 16:44:52 61

原创 Java设计模式之适配器模式

适配器模式1. 基本介绍适配器模式,将某个类的接口转换成客户端期望的另一个接口表示。主要目的是让原本接口不兼容的两个类可以协同工作。适配器的别名为包装器。属于结构型模式。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。2. 工作原理将一种接口转换成另一种接口,让原本接口不兼容的类可以兼容。从用户角度是无法看到被适配者的,因此是解耦的。用户直接调用适配器转化出来的接口,适配器再调用被适配者的接口。3. 类适配器模式3.1 基本介绍适配器类Adapter通过继

2021-05-23 17:54:47 445 2

原创 Java设计模式之策略模式

策略模式1. 基本介绍策略模式,定义了算法族并分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。该模式体现了几个设计原则:开闭原则:把变化的代码从不变的代码中分离出来;依赖倒转原则:针对接口编程而不是具体的类;合成复用原则:多使用组合/聚合,少使用继承。2. 策略模式原理类图3. 场景设定编写鸭子项目:有各自鸭子【野鸭、水鸭、小黄鸭、北京烤鸭】各种鸭子的行为【飞、叫、飞行、游泳】显示鸭子信息4. 策略模式解决鸭子项目4.1 思路

2021-05-22 11:10:56 110

原创 Java设计模式之模板方法模式

模板方法模式1. 简介模板方法模式又称模板模式。指在一个抽象类中定义了使用它的方法的模板,子类可以按需实现某些方法,但是方法的执行还是按照抽象类中定义的顺序【模板】进行。换言之,模板方法模式规定了一个操作的算法骨架,而部分细节实现则可以延迟到子类实现。该模式在保证算法骨架的不变性的同时,为其中的细节实现提供了可变性。该模式属于行为型模式。2.场景设定豆浆制作有固定的步骤:选材==》添加配料==》浸泡==》放到豆浆机打碎。除了添加配料在不同口味豆浆中的操作不一样外,其他步骤在每次制作

2021-05-21 22:24:33 539

原创 Java设计模式之代理模式

代理模式1. 代理模式基本介绍为一个对象A提供一个代理对象B,以控制对对象A的访问,以便可以在对象A的基础上扩展其功能。被代理的对象可以是远程对象、创建时开销大的对象和需要安全控制的对象。代理模式有三种:静态代理、动态代理【JDK代理、接口代理】和Cglib代理【可以在内存中动态创建对象,而不用实现接口。也属于动态代理】。代理模式的简单示意图2. 静态代理静态代理需要定义接口或者父类,被代理类和代理类均需要实现相同的接口或者继承相同的父类。2.1 例子类关系图

2021-05-21 11:47:43 100

原创 数据结构与算法之堆

数据结构之堆1. 堆排序堆排序是选择排序的一种。【选择排序:每次在待排序元素中选择最大/最小的一个元素,并加入到有序子序列中】1.1 什么是堆若n个关键字序列L[1…n]满足下面某一条规则,则称为堆【Heap】:若满足:L[i] >= L[zi] && L[i] >= L[2i+1],则称为大根堆【大顶堆】若满足:L[i] <= L[zi] && L[i] <= L[2i+1],则称为小根堆【小顶堆】1.2 二叉树的顺序

2021-05-20 17:27:02 174

原创 Java设计模式之职责链模式

职责链模式0. 定义职责链模式又称为责任链模式。为请求创建了一个接收者对象链,可以实现请求的发送者与接收者之间的解耦。每个接收者通常都包含另一个接收者,当当前接收者无法处理请求时,则把相同的请求转发到另一个接收者进行处理,依此类推。该模式属于行为型模式。1. 场景设定学校OA系统的采购审批项目:采购员采购教学器材,需要金额x0<x<=5000,由教学主任审批5000<x<=10000,由院长审批10000<x<=30000,由副校长审批3

2021-05-19 09:20:13 107

原创 Java设计模式之概述与七大设计原则

1.设计模式目的​ 编写软件过程中,程序员面临着来自耦合性、内聚性、可维护性、可扩展性、重用性、灵活性等多方面的挑战。而设计模式就是为了让软件具有更好的:代码重用性(相同功能的代码不用多次编写)可读性(编程规范,便于其他程序员的阅读和理解)可扩展性(当需要增加新的功能时非常方便)可靠性(当增加新的功能时,对原来的功能没有影响)使程序呈现高内聚、低耦合的特性2.设计模式七大原则2.1单一职责原则2.1.1 基本介绍​ 一个类只负责一个职责。如果一个类包含两个职责,如职责A和职责B,则修

2021-05-18 09:29:11 133

原创 Java设计模式之观察者模式

观察者模式我是一名大三本科生,专业是软件工程【一本】。目前,正在准备找实习以及秋招,意向岗位是Java后端开发工程师。为此,在码云托管了一个项目,以整理我所有所学知识。涉及内容:计算机网络、操作系统、Java基础、主流Java后端框架、设计模式、Web前端框架等内容。欢迎大家访问我的开源项目编程之路码云地址:https://gitee.com/alizipeng/the-way-of-programming以下内容均记载在我的开源项目中0. 简介​ 定义对象间的一对多的关系。当一个对象【被观

2021-05-17 17:27:13 71

原创 Java设计模式之装饰者模式

装饰者模式前言我是一名大三本科生,专业是软件工程【一本】。目前,正在准备找实习以及秋招,意向岗位是Java后端开发工程师。为此,在码云托管了一个项目,以整理我所有所学知识。涉及内容:计算机网络、操作系统、Java基础、主流Java后端框架、设计模式、Web前端框架等内容。欢迎大家访问我的开源项目编程之路码云地址:https://gitee.com/alizipeng/the-way-of-programming以下内容均记载在我的开源项目中1. 定义动态地将新功能附加到对象中,就是装饰

2021-05-17 08:35:11 88

空空如也

空空如也

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

TA关注的人

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