自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HTTP协议报文结构

HTTP协议报文结构HTTP报文结构客户端请求报文构成服务器响应报文构成HTTP状态码状态码类别代表性状态码(1)2XX成功(2) 3XX重定向(3) 4XX客户端错误(4) 5XX服务器错误HTTP它是超文本文件传输协议,是互联网上应用最广泛的一种网络协议,它提供了一种发布和接收HTML页面的方法。比如说要打开一个网页,过程中就会用到HTTP协议。它的具体的过程是这样的:(1)首先浏览器查找域名的IP地址,使用DNS协议获取域名对应的IP;(2)然后浏览器与服务器中间通过TCP协议建立连接;(3

2021-09-03 17:34:41 791

原创 多线程可能带来的问题

多线程可能带来的问题1 内存泄漏1.1 Java程序中容易发生内存泄露的场景1.2 解决内存泄漏问题:内存溢出和内存泄漏的区别?问题:ThreadLocal 内存泄露问题了解不?1.3 Java中的几种引用方式2 上下文切换3 死锁3.1 产⽣死锁的四个必要条件3.2 如何避免线程死锁并发编程的⽬的就是为了能提⾼程序的执⾏效率提⾼程序运⾏速度,但是并发编程并不总是能提⾼程序运⾏速度的,⽽且并发编程可能会遇到很多问题,⽐如:内存泄漏、上下⽂切换、死锁 。1 内存泄漏在Java中,内存泄漏就是存在一些被

2021-09-03 16:34:36 3847

原创 Java语言中的线程安全

Java语言中的线程安全1 互斥同步(悲观锁)1.1 synchronized1.2 ReentrantLock2 非阻塞同步(乐观锁)3 无同步3.1 可重入代码(Reentrant Code)3.2 线程本地存储(Thread Local Storage)volatile关键字的作用java.lang.ThreadLocal类问题1: 说说 synchronized 关键字和 volatile 关键字的区别?4 锁优化机制4.1 自旋锁和适应性自旋锁(Adaptive Spinning)4.2 锁消除(

2021-09-03 15:58:57 242

原创 Java中的抽象类和接口

Java中的抽象类和接口1 抽象类1.1 抽象类的作用1.2 注意1.3 抽象类的设计原则2 接口2.1 接口的特点2.2 接口和抽象类的异同2.3 抽象类和接口的好处1 抽象类类的继承中,子类拥有父类的所有属性和方法,父类的某些方法实现在子类 中可能不够全面,而要求在子类中重写,这时父类经常设计为抽象类,抽象类的某些方法只有声明没有实现。子类除了继承父类的属性和方法外,每个类还包含很多其他的功能(也就是方法),这时经常把功能方法抽象为接口,接口中只声 明方法,要求具体的类实现该方法。Java 中每一

2021-09-03 15:45:45 408

原创 Java中的类、对象和方法

Java中的类、对象和方法1 类2 对象3 方法3.1 构造方法3.2 普通方法构造方法与普通方法的区别1 类类是一系列具有相同特征和行为的对象的集合。 在程序设计中,对象由其属性和方法组成,类面对的是对象的结构,因此, 类的定义需要包含属性和方法的定义,属性和方法一起构成了类程序的主体。类的属性称为类的成员变量,是一个全局变量,类的方法称为类的成员方法。注意:在一个 java 文件中可以存在多个类,但是 public 修饰的类只能有一个。成员变量和普通变量的区别(1)成员变量定义的时候要求一个一

2021-09-03 15:24:34 1961

原创 Java的三大特性

Java的三大特性1 封装1.1 概念1.2 好处1.3 权限修饰符2 继承2.1 继承的特点2.2 继承的优点2.3 继承的语法3 多态3.1 理解多态3.2 多态的优点3.3 多态的使用4 方法的重写与重载4.1 方法的重写4.2 方法的重载面向对象是 java 的核心思想,面向对象的三大特征:封装、继承、多态。1 封装1.1 概念面向对象的封装可以把对象的属性和方法组合在一起,统一提供对外的访问权限,封装就是将对象的使用者和设计者分开,设计者可以设计出外部可以操作 的内容和只能内部操作的内容。

2021-09-03 14:58:55 1181

原创 HTTP和HTTPS的区别?

HTTP和HTTPS的区别?HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。HTTP协议通过请求/响应的方式,在客户端和服务端之间进行通信。HTTPS = HTTP+ 加密 + 认证 + 完整性保护,HTTPS 采用混合加密机制:在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。它们之间的区别:(1) 端⼝ :HTTP的URL由“http://”起始且默认使⽤端⼝80,⽽HTT

2021-09-02 17:55:03 129

原创 字符串匹配

字符串1 常见题目1.1 (lee-JZ19) 正则表达式匹配2 练习链接1 常见题目1.1 (lee-JZ19) 正则表达式匹配请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.'表示任意一个字符,而’*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"aba"均不匹配。输入: s = “aa” p = “a”输出: false解释: “a” 无法

2021-08-30 16:27:24 110

转载 跳表(SkipList)

跳表(SkipList)1 什么是跳表?2 跳表的插入3 跳表的删除4 跳表的代码实现1 什么是跳表? 大黄:给定一个有序数组,如何根据元素的值进行高效率查找? 小蓝:可以使用二分查找。 大黄:如何进行二分查找呢? 小蓝:首先根据数组下标,定位到数组的中间元素,如果要查找的元素大于中间元素,则定位到右半部分的中间元素进行查找,如果要查找的元素小于中间元素,则定位到左半部分进行查找,以此类推,直到查找到目标元素。如果数组的长度是 n ,二分查找的时间复杂度是 O(nlogn) ,比起从左到右

2021-08-14 14:57:07 173

原创 常见排序算法详解

常见排序算法详解

2021-08-12 10:23:23 1185

原创 MySQL存储引擎与索引优化

MySQL存储引擎1 MySQL体系结构概述1.1 网络连接层(Client Connectors)1.2 服务层(MySQL Server)1.3 存储引擎层(Pluggable Storage Engines)1.4 系统文件层(File System NTFS ext4 SAN NAS)2 MySQL主要文件2.1 配置文件2.2 日志文件**(1)错误日志(Error log)****(2)慢查询日志(Slow query log)****(3)通用查询日志(General query log)**

2021-08-03 16:18:34 810

原创 B树和B+树详解

Mysql调优之B树和B+ 树详解

2021-07-22 19:45:45 38923 13

原创 排序(sort)

排序(sort)

2021-07-22 09:56:29 317

原创 数组&数学(array&Math)

数组&数学(array&Math)

2021-07-22 09:35:08 984 1

原创 双指针 (doublePointer)

RandomLeecode1 常见题目1.1 (lee-02) 两数相加1.1.1 (lee-02) 两数相加1.1.2 (NC-40) 两个链表生成相加链表1.21.31.41.51.61.71.81.92 练习链接1 常见题目1.1 (lee-02) 两数相加1.1.1 (lee-02) 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两

2021-07-21 15:01:27 1019

原创 递归(recursion)

递归(recursion)常见题目类型1 (lee-509) 斐波那契数1.1 迭代(自底向上)1.2 递归(自顶向下)1.3 DP1.4 DP优化常见题目类型1 (lee-509) 斐波那契数通常用F(n) 表示,形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)= 0, F(1) = 1F(N)= F(N - 1) + F(N - 2), 其中 N > 1.给定N,计算F(N)。输入:2输出:1解释:F(2) = F(1) +

2021-07-17 10:51:40 111

原创 滑动窗口(SildeWindow)

滑动窗口(SildeWindow)1 滑动窗口的思想滑动窗口算法框架伪代码 void slidingWindow(String s, String t) { HashMap<Character, Integer> need = new HashMap<>(); HashMap<Characte,Integer> window = new HashMap<>(); for (char c : t.t

2021-07-15 21:57:09 612

原创 动态规划(DP)

动态规划(DP)(JAVA版本)博文中对于第四部分背包问题还会单独拎出来讲解一期,这里只是部分。1 DP1.1 递归和动规关系递归是一种程序的实现方式:函数的自我调用动态规划:是一种解决问 题的思想,大规模问题的结果,是由小规模问 题的结果运算得来的。动态规划可用递归来实现(Memorization Search)。1.2 DP的使用场景满足三个条件:最优子结构(子问题的最优解是原问题的最优解),无后效性,重复子问题。简单来说就是满足以下条件之一:求最大/最小值(Maximum/M

2021-07-15 20:14:29 261

原创 栈和队列(queue & stack)

栈和队列(queue & stack)1 栈和队列栈的特点是后入先出,根据这个特点可以临时保存一些数据,之后用到依次再弹出来,常用于 DFS 深度搜索。队列的特点是先入先出,一般常用于 BFS 广度搜索,类似一层一层的搜索。2 栈常见题目2.1 (lee-155) 最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin(

2021-07-13 20:24:42 179

原创 回溯(backtrack)

回溯(backtrack)(JAVA版本)1 回溯法思路常用于遍历列表所有子集,是 DFS 深度搜索一种,一般用于全排列,穷尽所有可能,遍历的过程实际上是一个决策树的遍历过程。时间复杂度一般 O(N!),它不像动态规划存在重叠子问题可以优化,回溯算法就是纯暴力穷举,复杂度一般都很高。思路:核心就是从选择列表里做一个选择,然后一直递归往下搜索答案,如果遇到路径不通,就返回来撤销这次选择。伪代码结构: int[] result = new int[size]; void backtrack(选

2021-07-13 18:06:24 1323

原创 二分搜索(binary_search)

二分搜索(JAVA版本)关于二分搜索部分还可以去Leecode分类卡片找,对于模板描述比较详细,这里只是按照个人习惯。1 二分搜索模板二分搜索模板的不同之处在于:左、中、右索引的分配。循环或递归终止条件。后处理的必要性。1.1 简单模板 /** * 1.最简单模板----无重复元素搜索时,更方便 * left<=right * *二分查找的最基础和最基本的形式。 * *查找条件可以在不与元素的两侧进行比较的情况下确定(或使用它周围的特定元素)。 * *不需要后

2021-07-13 17:32:29 1405 2

原创 位运算(binary_op)

面试笔试算法之位运算(JAVA版本)1 常见二进制操作基本操作a = 0 ^ a = a ^ 00 = a ^ a由上面两个推导出:a = a ^ b ^ b交换两个数a = a ^ bb = a ^ ba = a ^ b移除最后一个 1a = n & (n-1)获取最后一个 1diff = (n & (n-1)) ^ n位运算符号描述运算规则&与两个位都为1时,结果才为1|或两个位都为0时,结果才为0^异或

2021-07-08 17:03:38 893

原创 JVM内存结构

JVM内存结构面试问题:JVM运行期内存空间、每块的作用?Java 虚拟机在执⾏ Java 程序的过程中会把它管理的内存划分成若⼲个不同的数据区域。在JDK1.8之前,java运行时数据区域分为程序计数器、虚拟机栈、本地方法栈、堆和方法区5个部分。在JDK1.8之后,去掉了之前的方法区,而增加了元空间。线程私有的:程序计数器、虚拟机栈、本地⽅法栈。线程共享的:堆、⽅法区、直接内存 (⾮运⾏时数据区的⼀部分)。下面分别介绍一下各部分:1.程序计数器程序计数器是⼀块较⼩的内存空间,可以看作是当前线

2021-07-06 21:07:03 118

原创 链表(LinkedList)

面试笔试算法之链表JAVA版本1 链表操作基本技能null 异常处理dummy node 哑节点快慢指针插入一个节点到排序链表从一个链表中移除一个节点翻转链表合并两个链表找到链表的中间节点1.1 单链表结构 /* * 链表节点 */ public static class Node{ int data; Node next; Node(int data){ this.data = data; } }1.2 链表插入元素 private No

2021-07-06 18:10:39 190

原创 二叉树和二叉搜索树(binary_tree)

由于博主主要使用java语言编程,因此算法都是java版本,如果想查看其他版本语言,可以根据提示的Leecode题目标号去查看。本博文算法部分仅为个人需要笔试面试而总结的适用于个人的版本,大家可以作参考也可以提出错误,博主来改进。

2021-07-06 16:15:07 316

原创 HTTP通信以及会话机制(Cookie和Session)

HTTP通信以及会话机制(Cookie和Session)1.客户端与服务器之间的通信客户端发出请求,服务器发出响应。1.1 请求和响应客户端请求报文构成(请求方法、请求 URI、协议版本、可选的请求首部字段、内容实体)服务器响应报文构成(协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段、实体主体)1.2 指定请求 URI 的方式HTTP 协议使用 URI 让客户端定位到资源,当客户端请求访问资源而发送请求时,URI 需要将作为

2021-06-11 22:12:23 733

原创 HTTP与TCP/IP

计算机网络——HTTP与TCP/IP感兴趣的可以去阅读《图解HTTP》一书,本博文主要参考该书并且加入一些面试的知识点。1.使用HTTP协议访问webWWW(World Wide Web,万维网)是 Web 浏览器当年用来浏览超文本的客户端应用 程序时的名称。现在则用来表示这一系列的集合,也可简称为 Web。3 项 WWW 构建技术,分别是:把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的 HTML(HyperTex

2021-06-11 17:54:35 960 1

原创 JVM类加载机制

JVM类加载机制类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始 化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。本文参考《深入理解JAVA虚拟机》一书进行归纳和总结,有兴趣的建议阅读该书。1.类加载的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initializat

2021-05-21 17:15:39 122

原创 Java网络编程

Java网络编程在介绍Java网络编程之前,我们首先了解一下基于网络的软件开发模式。1.基于网络的软件开发模式目前流行的基于网络的软件开发的两种模式为C/S和B/S:C/S : client/server 客户端/服务器模式,例如:QQ程序B/S : Browse/Server 浏览器/服务器模式,例如:网页程序两种模式之间的区别:硬件环境不同C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务 。B/S 建立在广域网之上的, 不必是专门的

2021-05-13 10:34:36 224

原创 java垃圾回收机制

java垃圾回收机制(Garbage Collection,GC)本文参考书籍**《深入理解JAVA虚拟机》**,对java中垃圾回收机制进行整理和分析。我们从三个问题着手来探究java中垃圾收集。哪些内存需要回收?什么时候回收?如何回收?1.判断对象是否回收判断对象是否可以被回收的两个经典算法分别是引用计数算法(Reference Counting)和可达性分析算法。1.1 引用计数算法思想:给对象中添加一个引用计数器,每当有 一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减

2021-05-12 19:13:41 1179

原创 线程的生命周期

java线程1. 线程与进程(1)进程一个在运行中的程序。进程是操作系统分配cpu资源的最小单位,一个进程就是一个独立的执行环境。进程有着完整的,私有的基本的运行时资源,尤其是每个进程都有自己的内存空间。一个进程包含1–n个线程。大多数的java虚拟机的实现都是作为一个单独的进程的。多进程是指操作系统能同时运行多个任务(程序)。(2) 线程线程有时被称为是轻型的进程。进程和线程都提供了一种运行环境。但是创建一个新的线程比创建一个新的进程需要更少的资源。线程存在于进程之中——每个进程中至少有一个线

2021-05-11 14:10:05 428

原创 Java集合之HshTable与ConcorrentHashMap

Java集合之HshTable与ConcorrentHashMap2.3 HashTableHashTable和HashMap的操作是相同的,区别如下:(1)HashTable是线程安全的,HashMap是非线程安全的。所以HashMap比HashTable的性能更高。(2)HashTable不允许用于null值作为key或者value,但是HashMap是可以的。2.3.1 HashTable底层实现原理HashTable和HashMap的实现原理几乎一样,差别无非是以上两点,但是HashTa

2021-05-10 11:31:06 162

原创 Java框架开发技术之SpringMVC

Java框架开发技术之SpringMVC1. SpringMVC首先看下Spring的架构图从Spring的架构图可以看到,Spring MVC 是Spring的一部分,Spring MVC是一个基于MVC模式开发的表现层框架(与用户打交道),它是类似于 Struts2 的一个 MVC 框架,在实际开发中,接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示,但是上手难度却比 Struts2 简单多了。而且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了大多数企业优先

2021-04-29 11:29:21 198

原创 Java基础之IO流

Java基础之IO流1.流的概念Java使用流的概念进行文件的读取和写入。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。2.流的分类2.1 常用IO流结构图2.2 字节流和字符流按照处理数据的对象(操作数据)不同分为字节流和字符流。(1)字符流字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表

2021-04-27 11:31:26 223

原创 Java基础之String、StringBuffer、StringBuilder的区别?

Java基础之String、StringBuffer、StringBuilder的区别?1.可变与不可变String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。private final char value[];StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。char[

2021-04-27 11:00:28 117

原创 Java集合之 HashMap底层实现原理(JDK1.8)

HashMap底层实现原理(JDK1.8)首先复习一下数组和链表数组特点存储区间是连续,且占用内存严重,空间复杂也很大,时间复杂为O(1)。优点:是随机读取效率很高,原因数组是连续(随机访问性强,查找速度快)。缺点:插入和删除数据效率低,由于插入数据的时候插入的位置后面的数据在内存中要往后移动,且大小固定不易动态扩展。链表特点区间离散,占用内存宽松,空间复杂度小,时间复杂度O(N)。优点:插入删除速度快,内存利用率高,没有大小固定,扩展灵活。缺点:不能随机查找,每次都是从第一个开始遍历(查

2021-04-21 17:15:21 518 1

原创 Java集合之TreeSet

Java集合之TreeSet2.2 TreeSet2.2.1 TreeSet底层实现和构造函数package java.util;public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable{ private transient NavigableMap<E,Object> m;//

2021-04-20 11:19:49 121

原创 Java集合之HashSet

Java集合之HashSet注意:文章中的源码分析均根据JDK1.8版本来分析2.1 HashSet2.1.1 HashSet底层实现和构造函数package java.util;import java.io.InvalidObjectException;public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable

2021-04-20 11:16:15 73

原创 Java集合之Vector

Java集合之Vector2.3 VectorVector和Stack在集合中用的特别少,因此这里只是简单介绍一下。2.3.1 Vector底层原理和构造方法public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ protected Object[] elementData;

2021-04-19 11:29:11 272

原创 Java集合之LinkedList详解

Java集合之LinkedList详解2.2 LinkedList从集合框架图就可以看到,LinkedList既是List接口的实现也是Queue接口的实现(Deque),它可以根据索引来随机的访问集合中的元素,还实现了Deque接口,它还是一个队列,可以被当成双端队列来使用。故其和ArrayList相比LinkedList支持的功能更多。在介绍LinkedList之前我们先复习一下有关链表的知识:链表是由一系列非连续的节点组成的存储结构,简单分类的话,链表分为单向链表和双向链表,而单向和双向链表又

2021-04-19 11:17:55 268 2

空空如也

空空如也

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

TA关注的人

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