自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Docker入门必备知识

Docker的基本概念,隔离与限制,如何打一个镜像

2023-05-09 22:17:16 129

原创 Jvm面试题

类加载器有三种类加载器引导类加载器:BootstrapClassLoader,启动类加载器负责加载存放在JDK\jre\lib(JDK代表JDK的安装目录,下同)下,或被-Xbootclasspath参数指定的路径中的类。扩展类加载器:ExtensionClassLoader,扩展类加载器负责加载JDK\jre\lib\ext目录中,或者由java.ext.dirs系统变量指定的路径中的所有类库(如javax.*开头的类)。应用类加载器:ApplicationClassLoader,应用类加载器负

2020-11-11 18:53:05 862 1

原创 Redis面试题

redis都支持哪些数据类型?应用场景有哪些redis的key都是字符串类型的,而Value支持五种数据类型。string: redis 中字符串 value 最大可为512M。可以用来做一些计数功能的缓存(也是实际工作中最常见的)。list: 简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边),其底层实现是一个链表。可以实现一个简单消息队列功能,做基于redis的分页功能等。set: 是一个字符串类型的无序集合。可以用来进行全局去重等。sorted set

2020-11-10 11:22:35 373

原创 基于Netty实现一个简单的Http服务器

Netty-Http Demo这是一个基于Netty的简单Http服务器,主要目的用于熟悉Netty网络编程和Netty的一些组件。该服务器主要分为以下几个部分。服务启动类服务业务逻辑处理类客户端启动类客户端业务逻辑处理类项目代码的github地址服务启动类首先创建引导器,然后配置线程模型,通过引导器绑定业务逻辑处理类,再配置一些参数,最后绑定端口就可以启动了。public class HttpServer { public void start(int port) {

2020-10-30 13:42:33 385

原创 Java并发面试题

线程与进程区别主要区别进程是一个“执行中的程序”,是系统进行资源分配和调度的一个独立单位线程是进程的一个实体,一个进程中一般拥有多个线程。线程之间共享地址空间和其它资源(所以通信和同步等操作,线程比进程更加容易)线程一般不拥有系统资源,但是也有一些必不可少的资源(使用ThreadLocal存储)线程上下文的切换比进程上下文切换要快很多。线程上下文切换比进程上下文切换快的原因进程切换时:涉及到当前进程的CPU环境的保存和新被调度运行进程的CPU环境的设置线程切换时,仅需要保存和设置少量的

2020-10-07 21:57:08 1749 2

原创 Java基础知识面试题

java有几种基本类型,分别是什么?String是基本类型吗?java有8种基本数据类型数据类型长度boolean1short2byte1char2int4float4double8long8String是基本类型吗String是一个类,不是基本数据类型Final、 static 、this、super关键字Final用于修饰变量、类,方法修饰如果是基本数据类型 变量一旦初始化后便不能修改。如果是引用类型的变

2020-10-02 15:18:43 1580

原创 秒杀计算机网络面试题

网络模型和协议网络模型TCP/IP 4层模型 应用层 传输层 网络层 网络接口层TCP/IP 5层模型 应用层 传输层 网络层 数据链路层 物理层OSI 7层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层协议是指两个或者多个通信实体之间交换的报文的格式和

2020-09-27 11:20:42 892

原创 ThreadLocal面试必备基础知识

类结构public class ThreadLocal<T>ThreadLocal 定义类时带有泛型,说明 ThreadLocal 可以储存任意格式的数据。只要该线程处于活动状态并且实例是可访问的,每个线程都隐式引用threadlocal副本。只要线程消失,其所有threadlocal本地实例副本会受到垃圾回收(除非存在其他对这些副本的引用)关键属性基本属性// threadLocalHashCode 表示当前 ThreadLocal 的 hashCode,用于计算当前 Th

2020-09-15 19:54:51 147

原创 线程面试必备基础知识

当创建子线程时,怎么解决子线程是得不到父线程的 ThreadLocal,使用 InheritableThreadLocal 来代替 ThreadLocal,ThreadLocal 和 InheritableThreadLocal 都是线程的属性,所以可以做到线程之间的数据隔离,在多线程环境下我们经常使用,但在有子线程被创建的情况下,父线程 ThreadLocal 是无法传递给子线程的,但 InheritableThreadLocal 可以,主要是因为在线程创建的过程中,会把InheritableThrea

2020-09-09 22:03:11 191

原创 线程的Future和ExecutorService必知必会

CallableCallable 是一个接口,约定了线程要做的事情,和 Runnable 一样,不过这个线程任务是有返回值的。@FunctionalInterfacepublic interface Callable<V> { /** 运行得出结果,如果运行失败会抛出异常 */ V call() throws Exception;}返回值是一个泛型,可以定义成任何类型,但使用的时候,都不会直接使用 Callable,而是会结合 FutureTa

2020-09-07 14:34:18 311 1

原创 Jvm垃圾回收算法,相关概念和四种引用

Java的跨平台性相关指令javac xxx.java 可以得到 xxx.class文件java xxx 便可以编译这个文件得出结果javap -help 查看相关指令javap -c xxx 查看相关反汇编的源码如何实现平台无关性1各种不同的平台的虚拟机都使用统一的程序存储格式——字节码。而且Java虚拟机只与由自己码组成的Class文件进行交互。2因为javaclass可以再任何平台创建,也可以被任何平台的Java虚拟机装载并执行,所以才有了Java的平台无关性。3 java中基本数据

2020-09-06 09:20:00 334

原创 Spring必会的面试题

什么是Spring框架,Spring框架主要包含哪些模块​ Spring是一个开源框架,Spring是一个轻量级的Java 开发框架。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Sprin

2020-09-06 09:13:42 1155 1

原创 你必需会的List和Map的源码

ArrayList整体架构DEFAULT_CAPACITY 表示数组的初始大小,默认是 10,这个数字要记住;size 表示当前数组的大小,类型 int,没有使用 volatile 修饰,非线程安全的;modCount 统计当前数组被修改的版本次数,数组结构有变动,就会 +1。类注释是非线程安全的,多线程情况下,推荐使用线程安全类:Collections#synchronizedList;允许 put null 值,会自动扩容;size、isEmpty、get、set、add 等方法时

2020-09-06 09:10:11 244

原创 线程必会知识

Thread的特性每个线程都有优先级,高优先级的线程可能会比优先级低的优先执行。父线程创建子线程后,优先级、是否是守护线程等属性父子线程是一致的。JVM 启动时,通常都启动 MAIN 非守护线程,以下情况,线程会停止退出方法被调用,并且安全机制允许这么做(比如调用 Thread.interrupt 方法);所有非守护线程都消亡,或者从运行的方法正常返回,或者运行的方法抛出了异常;每个线程都有名字,多个线程可能具有相同的名字,Thread 有的构造器如果没有指定名字,会

2020-09-05 15:11:53 137

原创 IO文件读写具体操作

字符流OutputStream把内存中的数据写入到硬盘的文件1 写入单个字符public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("//Users/jiangcheng/Desktop/a.txt"); fos.write(97);//当写入硬盘的时候会把十进制的数据变成二进制 97---1100001

2020-07-23 16:48:16 219

原创 必需要知道的docker命名和概念

docker基本组成镜像只是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器,镜像类比于一个类。容器容器是可以独立运行的一个或者一组应用。容器是用镜像创建的运行实例。它可以被启动,开始,停止,删除。每个容器都是相互隔离,保证安全的平台。可以把容器看做简易版Linux的环境(包括用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视觉,唯一区别在于容器的最上面那一层是可读可写的。一个容器类比于一个对象。仓库存放镜

2020-07-18 16:42:41 806

原创 设计模式之单例模式

饿汉式(静态代码常量)class Singleton { //构造器私有化,防止new private Singleton() { } //本内部类创建实例 private final static Singleton instance = new Singleton(); //向外暴露一个静态的公共方法 public static Singleton getInstance() { return instance; }}

2020-05-21 11:30:21 110

原创 设计模式之策略模式

介绍策略模式是把代码变化部分和不变部分分开,核心思想是多用组合、聚合,少用继承;用行为类的组合,而不是行为类的继承。体现了对修改关闭,对扩展开放原则,客户端增加行为不用修改原代码,只用添加一种策略或者行为即可。策略模式把算法封装在独立的Strategy类中使得用户可以独立于Contex改变它,使它易于切换,易于理解,易于扩展,但是每添加一个策略就要添加一个类,策略过来会导致类多。uml图和代码Duck类public abstract class Duck { //策略接口

2020-05-18 20:22:55 113

原创 设计模式之原型模式

介绍原型模式是用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节.原理主要是通过将一个原型对象传给那个要发动创建的对象,这个药发动创建的对象通过请求原型对象拷贝他们自己来实施创建,即 对象.clone().uml图和代码Prototype:原型类,声明一个克隆自己的接口ConcretePrototype:具体的原型类,实现一个克隆自己的操作Client:让一个原型对象克隆自己,从

2020-05-15 15:16:55 78

原创 设计模式之组合模式

介绍又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构,属于结构型对象,使得用户对单个对象和组合对象的访问具有一致性,即组合能让客户以一致的方式处理个别对象以及组合对象。uml图和代码Component:这是组合中对象声明接口,在适当的情况下,实现所有类共有的接口默认行为,用于访问和管理Component子部件,Component可以是抽象类或者接口,如OrganizationComponent。Leaf:在组合中表叶子节点,叶子节点没有子节点,如DepartmentComposi

2020-05-14 18:06:51 108

原创 设计模式之建造者模式

原理1 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同的表现(属性)的对象2 是一步一步创建一个复杂的对象,它允许用户只通过制定的复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造模式的四个角色1 Product (产品角色) :一个具体的产品对象2 Builder(抽象建造者): 创建一个Product对象的各个部件指定的 接口/抽象类。3 ConcreteBuildr (具体建造者):实现

2020-05-13 16:01:17 108

原创 设计模式之桥接模式

原理将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变这是一种结构型设计模式桥接模式基于类最小设计原则,通过封装,聚合,继承等行为让不同的类层单不同的职责。主要特点是把抽象与行为实现分离开,从而保持各部分的独立性,以及对他们功能的扩展原理图Client 桥接模式的调用者抽象类(Abstraction) 维护了Implementor/即他的实现类ConcreteImplementorA 两者聚合关系,Abstraction充当桥接类RefineAbstraction,是Abstr

2020-05-12 20:30:53 111

原创 剑指offer题解 (java版本)

趁着难得的寒假,花了一个多月终于把剑指offer二刷完了,再过一段时间,再三刷一遍,现在准备开始学习java部分的源码和SpringBoot,Spring,在二刷过程中,还是有一些题,特别是动态规划那些还是不会的,再次证明自己的基础太差了。在第二次刷题过程中,明显感觉到第一次刷题的并没有完全学会和理解那道题的思想,在第二次刷题过程中才慢慢理解那道题应该怎么思考,怎么优化…,勉强能做到举一反一。...

2020-02-02 12:10:48 441 4

原创 剑指offer 翻转单词顺序列

题目牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路11 先判断条件字符是...

2020-02-02 10:43:56 121

原创 剑指offer 数组中的逆序对

题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size&lt...

2020-02-02 10:21:00 101

原创 剑指offer 正则表达式匹配

题目请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配思路 (动态规划)建立dp[i][j]数组 代表是str前i个能否被pattern[j]个匹配...

2020-02-01 15:57:39 128

原创 剑指offer 顺时针打印矩阵

题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路 按层来模拟矩阵1 设左上角元素为(r1,c1),右下角为(r2,c2)。2 首先遍历(r1,col) col...

2020-02-01 11:03:06 113

原创 剑指offer 字符串的排列

题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路1 回溯算法 假设字符为abc的时候2 首先,先固定第一个字符a,求后面两个字符bc的排列。3 当两个字符bc排列求好之后,...

2020-02-01 10:08:18 171

原创 剑指offer 删除链表中重复的结点

题目在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路1 创建一个节点pre,表示当前节点的前一个节点,当前节点时cur,next是当前节点的下一个节点。2 遍历链表,若当前节点和下一个节点相等,则next=next....

2020-01-31 14:08:59 89

原创 剑指offer 链表中倒数第k个结点

题目输入一个链表,输出该链表中倒数第k个结点。思路 11 先算出链表长度2 若链表长度小于k,则返回null3 倒数第k个节点相当于是返回顺数的length-k+1 个节点。public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null) ret...

2020-01-31 11:06:07 90

原创 剑指offer 复杂链表的复制

题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路1 遍历链表复制每一个节点,例如A节点,则复制A’到A节点的后面。2 重新遍历链表,复制随机节点,如A’.random=A.random.next。3 拆分链表,把...

2020-01-31 09:05:55 95

原创 剑指offer 序列化二叉树

题目请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序...

2020-01-30 11:45:03 88

原创 剑指offer 矩阵中的路径

题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩...

2020-01-30 10:57:31 117

原创 剑指offer 机器人运动范围

题目地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路 深度优先搜索1 创建一个数组visite...

2020-01-30 08:20:35 193

原创 剑指offer 最小的K个数

题目输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路1 利用大顶堆保存这k个数2 遍历input数组,每次与堆顶元素比较,若堆顶元素比较大,则删除堆顶元素,把input元素加入堆import java.util.*;public class Solution { public ArrayList&lt...

2020-01-29 12:38:39 97

原创 剑指offer 丑数

题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路1 丑数的定义:一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到。2 因此我们从1开始乘以2,...

2020-01-29 11:04:55 137

原创 剑指offer 重建二叉树

题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路 递归 前序遍历序列{1,2,4,7,3,5,6,8} 中序遍历 {4,7,2,1,5,3,8,6}1 每次递归根据根节点,把树分为左子树和右子...

2020-01-29 09:29:48 79

原创 剑指offer 树的子结构

题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路11 首先比较是否两者都不为null,若为空直接返回result即可2 如果找到了对应Tree2的根节点的点,利用bfs函数判断 Tree2是否为Tree1的子结构3 若找不到,再去以root的左孩子为开始节点来判断是否包含Tree24 若左子树找不到,就去右子树找5 最后返回resul...

2020-01-28 10:53:58 79

原创 剑指offer 按之字形顺序打印二叉树

题目请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路11 按照层序遍历的思路,然后利用count变量来标记当前是奇数层还是偶数层,若是奇数层则调用reverse函数翻转ArrayList。不过在海量数据的情况下,调用reverse函数效率是非常低的。import java.util.*;p...

2020-01-28 09:59:05 204

原创 剑指offer 二叉搜索树的第k个结点

题目给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路11 利用二叉搜索树的定义,中序遍历的数组是有序,利用中序遍历把数组保存在ArrayList后。2 直接返回第k小的元素。import java.util.*;public class Solution { ArrayList<Tr...

2020-01-27 15:31:27 112

空空如也

空空如也

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

TA关注的人

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