自定义博客皮肤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)
  • 收藏
  • 关注

原创 String综述

1、Java内存模型与常量池1.1、Java内存模型程序计数器多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此,每个线程要有一个独立的程序计数器,记录下一条要运行的指令,其为线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。Java虚拟机栈Java虚拟机栈是线程私有的,与线程在同一时间创建,是管理JAVA方法执行的内存模型。栈中主要存放一些基本类型的变量数据

2020-10-27 21:05:56 228

原创 Java中的==,equals与hashcode的区别和联系

1、概述==:该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系。equals:Object 的 实例方法,比较两个对象的content是否相同。hashCode:Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数。2、关系操作符==2.1、操作数的值基本数据类型在Java中有八种基本数据类型:浮点型:float(4 byte), double(8 byte)整型:byte(1 byte),

2020-10-27 18:47:45 295

原创 Java泛型

1、概述

2020-10-27 17:12:42 173

原创 二分查找详解

1、二分查找框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = left + (right - left) / 2; if (nums[mid] == target) { ... } else if (nums[mid] < target) { lef

2020-09-12 21:57:12 755

原创 华为手撕代码

1、根据身高重建队列 /** * 解题思路:先排序再插入 * 1.排序规则:按照先H高度降序,K个数升序排序 * 2.遍历排序后的数组,根据K插入到K的位置上 * * 核心思想:高个子先站好位,矮个子插入到K位置上,前面肯定有K个高个子,矮个子再插到前面也满足K的要求 * * @param people * @return */ public int[][] reconstructQueue(int[

2020-09-11 19:50:35 3889

原创 Java位运算及左右移

1、异或运算定义:在java的位运算符中有一个异或的运算符,用符号(^)表示,其运算规则是:在两个二进制操作数的相同位中,相同则结果为0,不同则结果为1。异或运算有三个特征:1、一个是0与一个数做异或操作还是本身;2、本身与本身做异或操作为0;3、异或操作还满足交换率;2、与运算定义:在两个二进制操作数的相同位中,两个操作数中位都为1,结果才为1,否则结果为0。特征:1、根据与运算定义,设二进制数字n ,则有:若n&1=0,则n二进制最右一位为0;若n&1=1,则二进

2020-09-11 10:22:07 548

原创 剑指Offer

1、旋转数组的最小数字class Solution { public int minArray(int[] numbers) { if(numbers.length==1){ return numbers[0]; } int left=0; int right=numbers.length-1; while(left<right){ int mid=(left+r

2020-09-10 01:18:09 182

原创 DNS解析流程

关于DNS域名解析大致过程如下图所示:当一个用户在地址栏输入www.taobao.com时,DNS解析有大致十个过程,如下:1、浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。2、如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先

2020-09-06 21:33:04 1801

原创 TCP滑动窗口和拥塞机制

1、TCP之滑动窗口1.1、概述滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口和一个接收窗口。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决于对端通告的接收窗口,要求相同。滑动窗口解决的是流量控制的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。接收端的缓存传输数据给应用层(接收端和发送端都有一个缓存),但这

2020-09-06 12:21:12 567

原创 TCP粘包/拆包的产生原因和解决办法

1、粘包产生的原因如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况,这就是TCP协议中经常会遇到的粘包以及拆包的问题。传输层的UDP协议是否会发生粘包或者拆包问题?不会。UDP是基于报文发送的,在UDP首部采用了16bit来指示UDP数据报文的长度,因此在应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。传输层的TCP协议是否会发生粘包或者拆包问题?会。原因有以下两点:1、TCP是基于字节流的,虽然应用层和传输层之间的数据交互是大小不等的数据

2020-09-05 20:33:36 2114

原创 华为8.19笔试题目分析

1、题目一题目描述:已知有一堆人排成M行N列,(M,N均大于等于10小于等于1000),现在从这群人中挑选一些人出来。在这个M行N列的队伍中,每个人对应一个坐标,从最左上角的(0,0)到右下角的(M-1,N-1)。这些人还会进行一次报数,报数顺序是按照类似蜗牛壳形状的顺时针方向由外圈像内圈报数,当报数的个位数为7且十位数为奇数的人出列,按报数顺序输出这些人的坐标。例如:如下图所示一个5行5列的队伍,按顺时针顺序从外到里报数,其中17满足条件,因此需要输出17的坐标(1,1)。输入行数M和列数N:

2020-09-05 16:50:53 564

原创 MySQL联合索引

1、最左匹配原则最左匹配原则指的就是如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配,值得注意的是,当遇到范围查询(>、<、between、like)就会停止匹配。假设,我们对(a,b)字段建立一个索引,也就是说,你where后条件为:a = 1a = 1 and b = 2上面的两个查询条件都是可以走联合索引。但一定要注意的是:b= 2 and a =1也是能匹配到索引的,因为Mysql有优化器会自动调整a,b的

2020-09-03 18:26:12 906 1

原创 MySQLredo log、binlog、undo log 区别与作用

日志系统主要有redo log(重做日志)、undo log(回滚日志)、binlog(二进制日志)。redo log和undo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志。1、binlog(二进制日志)binlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的mysql数据库都会记录binlog日志。逻辑日志:可以简单理解为记录的就是

2020-09-03 16:44:56 450

原创 MySQL练习

1、数据库数据准备2、练习2.1、查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的信息分析:学生的全部信息存在于student表,分数存在于score表,将符合条件表格拼接进行查询。select s.*,b.s_score'课程01',c.s_score'课程02' from student s inner join (select * from score where score.c_id='01' )b on s.s_id=b.s_id inner join (select *

2020-09-02 17:02:49 183

原创 SQL多表查询

1、基础1.1、SQL查询的基本原理第一、单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。第二、两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。第三、多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的

2020-09-02 15:09:35 621

原创 单例模式和工厂模式

1、单例模式1.1、什么是单例模式?单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。1.2、单例模式的类型单例模式有两种类型:1、懒汉式:在真正需要使用对象时才去创建该单例类对象;2、饿汉式:在类加载时已经创建好该单例对象,等待被程序使用。1.3、懒汉式懒汉式创建对象的方法是在程序使用对象前,先判断该对象是否已经实例化(判空)

2020-09-01 00:23:59 331

原创 静态代理和动态代理

1、代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法。2、静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。下面举个案例来解释:模拟修改动作,定义一个修改动作的接口:IPersonDao.

2020-08-31 22:52:56 183

原创 面试常见的算法

常见排序算法1、冒泡算法冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n 次,就完成了 n 个数据的排序工作。public static void bubbleSort(int[] arr){ //如果只有一个元素就不用排序了 if(arr.length<2){ return; }

2020-08-30 23:02:26 903

原创 LRU算法

1、LRU算法介绍计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为「有用的」的数据呢?LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是是「有用的」,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。2、LRU算法描述首先要接收一个 cap

2020-08-30 22:25:24 206

原创 进制转换

1、进制转换概念十进制整数转换为二进制整数:方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除,直到商为0为止。二进制转十进制:方法为:把二进制数按权展开、相加即得十进制数。2、使用Java自带方法进行转换十进制任意转换为任意进制(2<=radix<=36):使用Integer.toString方法,第一个参数是要转换的数字,第二个参数是要转换成为的进制。public class Jinzhi { public static void main(

2020-08-30 22:13:20 126

原创 二叉搜索树和平衡二叉树的Java实现

1、搜索二叉树搜索二叉树Java实现2、平衡二叉树平衡二叉树Java实现

2020-08-29 20:54:52 140

原创 数独问题

1、有效的数独class Solution { //拿boolean[][] rows来举例 //row标识对应的行,col标识出现的数字,value标识是否出现 private final int L = 9; public boolean isValidSudoku(char[][] board) { boolean[][] rows = new boolean[L][L]; boolean[][] cols = new boolean

2020-08-19 15:59:13 153

原创 根据输入的字符串构造树

题目:给一个二叉树,然后计算树的最大路径;二叉树举例:1(2,3(4,5)) : 1是根,2和3是叶子,然后3又有4,5叶子。package test;import java.util.*;public class Tree { static class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val){

2020-08-19 15:49:48 542

原创 华为机试

1、素数伴侣import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int num=sc.nextInt(); //存储奇数 ArrayList<Integer> lis

2020-08-19 11:14:28 1210

原创 链表专区

1、知识点解决链表的问题,需要掌握的方法有双指针、快慢指针、递归等。1.1、使用快慢指针寻找链表的中间节点public ListNode getMid(ListNode head) { //使用快慢指针将链表分为两部分 ListNode low=head; ListNode fast=head; while(fast!=null&&fast.next!=null){ fast=fast.next.n

2020-08-17 10:48:53 120

原创 并查集算法

1、概念Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。2、问题介绍简单说,动态连通性其实可以抽象成给一幅图连线。比如下面这幅图,总共有 10 个节点,他们互不相连,分别用 0~9 标记:现在我们的 Union-Find 算法主要需要实现这两个 API:class UF { /* 将 p 和 q 连接 */ public void union(int p, int q); /* 判断 p 和 q 是否连通 */ publi

2020-08-15 15:24:33 142

原创 关于*匹配的问题

*匹配1、通配符匹配class Solution { //动态规划:dp[i][j]:表示s前i个字符串和p前j个字符串是否匹配 public boolean isMatch(String s, String p) { int len1=s.length(); int len2=p.length(); boolean[][] dp=new boolean[len1+1][len2+1]; dp[0][0]=true;

2020-08-15 15:23:56 428

原创 广度优先搜索(BFS)和深度优先搜索(DFS)

1、图的概念图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系。对象由顶点(V)表示,而对象之间的关系或者关联则通过图的边(E)来表示。图可以分为有向图和无向图,一般用G=(V,E)来表示图。经常用邻接矩阵或者邻接表来描述一副图。在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为广度优先搜索(BFS)和深度优先搜索(DFS)。2、广度优先搜索广度优先搜索在进一步遍历图中顶点之前(这一句话的意识是:在遍历另外一个顶点的相邻节点时,需要把当前顶点的相邻节点全

2020-08-12 17:04:32 827

原创 正则表达式

Java正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。replaceAll()知识补充:replaceAll和replaceFirst两个方法的介绍://把字符串s中不是"a"-"z","A"-"Z"的字母变为" "s.replaceAll("[^a-zA-Z]+", " ")splitJava中的 split 函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回。

2020-08-04 22:43:01 326

原创 常用算法案例分析(二)

1、动态规划专题1.1、0-1背包的问题问题描述:每篇动态规划文章都得重复一遍套路,步骤为:第一步要明确两点,「状态」和「选择」。先说状态,如何才能描述一个问题局面?只要给定几个可选物品和一个背包的容量限制,就形成了一个背包问题,对不对?所以状态有两个,就是「背包的容量」和「可选择的物品」。再说选择,也很容易想到啊,对于每件物品,你能选择什么?选择就是「装进背包」或者「不装进背包」嘛。明白了状态和选择,动态规划问题基本上就解决了,只要往这个框架套就完事儿了:or 状态1 in 状态1的所

2020-07-30 23:18:21 860

原创 常用算法案例分析(一)

1、动态规划动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤:第一步骤:定义数组元素的含义,上面说了,我们会用一个数组,来保存历史数组,假设用一维数组 dp[] 吧。这个时候有一个非常非常重要的点,就是规定你这个数组元素的含义,例如你的 dp[i] 是代表什么意思?第二步骤:状态转移方程,找出数组元素之间的关系式,我觉得动态规划,还是有一点类似于我们高中学习时的归纳法的,当

2020-07-29 10:13:41 1696

原创 滑动窗口算法

滑动窗口public String minWindow(String s, String t) { if (s == null || s == "" || t == null || t == "" || s.length() < t.length()) { return ""; } //维护两个数组,记录已有字符串指定字符的出现次数,和目标字符串指定字符的出现次数 //ASCII表总长128 in

2020-07-26 18:41:11 267

原创 Scanner类的基本用法

Scannerscanner类基本使用教程

2020-06-17 08:55:12 697 1

原创 常用算法汇总

回溯法回溯法教程动态规划动态规划教程滑动窗口滑动窗口教程

2020-06-09 19:39:10 213

原创 排列和组合

知识点补充排列组合是面试中的热门考点 因为看似简单的排列组合可以有挺多的变形,根据变形,难度可以逐渐递增,而且排列组合本身有挺多的解法,能很好地区分一个侯选者的算法水平,排列组合如果用递归挺不容易理解的。什么是排列排列的定义:从n个不同元素中,任取 m (m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,当 n = m 时,我们称这样的排列为全

2020-05-14 21:27:08 1382

原创 常用算法总结(一)

1、窗口滑动算法前言科普:什么是滑动窗口算法?滑动问题包含一个滑动窗口,它是一个运行在一个大数组上的子列表,该数组是一个底层元素集合。假设有数组 [a b c d e f g h ],一个大小为 3 的 滑动窗口 在其上滑动,则有:一般情况下就是使用这个窗口在数组的合法区间内进行滑动,同时动态地 记录一些有用的数据,很多情况下,能够极大地提高算法地效率。1. 滑动窗口最大值题目描述...

2020-04-21 17:28:15 225

原创 递归从入门到精通

递归的三要素第一要素:明白这个函数的功能对于递归,我觉得很重要的一个事就是,这个函数的功能是什么,他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不管函数里面的代码什么,而是要先明白,你这个函数是要用来干什么。例如,我定义了一个函数// 算 n 的阶乘(假设n不为0)int f(int n){}这个函数的功能是算 n 的阶乘。好了,我们已经定义了一个函...

2020-03-16 10:54:53 96

原创 二叉树的遍历方式(前序遍历、中序遍历、后序遍历的递归与非递归的Java实现)

预备知识点

2020-03-14 15:17:38 971 1

原创 剑指offer(一)

数组数组查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:1、暴力法,两个for循环,遍历数组的每一个元素;2、矩阵法,从左下角开始比较,大于目标值向上移动一位,小于目标值,向右移动一位;矩阵法的代码如下:publi...

2020-03-14 15:15:05 161

原创 排序算法(一)

排序算法冒泡排序冒泡排序链接:https://www.cnblogs.com/jyroy/p/11248691.html

2020-03-10 16:00:17 153

空空如也

空空如也

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

TA关注的人

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