自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 排序算法总结篇(Java版)

学习来源:https://blog.csdn.net/meibenxiang/article/details/92796909稳定:冒泡、插入、归并、计数、基数、桶不稳定:选择、希尔、快速、堆1.冒泡排序比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。public class bubblesort { p

2021-09-26 11:25:11 122

原创 【Leetcode】合并区间

剑指 Offer II 074. 合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;public class jz074 { public int[][] me

2021-09-25 10:44:29 115

原创 【设计模式】装饰器模式 & 原型模式

装饰器模式动态地给一个对象添加一些额外的功能。就增加功能来说,装饰模式比生成子类更为灵活。。原型模式

2021-09-21 21:13:58 131

原创 【Leetcode】二叉树前中后遍历

1. 前序遍历递归法class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); preorder(root, res); return res; } public void preorder(TreeNode root,

2021-09-21 10:50:12 69

原创 【设计模式】简单工厂模式、工厂模式、抽象工厂模式

简单工厂模式简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Methad)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。缺点:增加一个product 就要修改Factory中的方法 修改他的判断逻辑。工厂模式定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。增加产品时

2021-09-17 15:43:34 50

原创 【Java】基础面试题总结(二)

1.同步、异步的区别?同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。异步,与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、通知和回调来通知调用者。2.mybatis是什么?有什么特点?它是一款基于JDBC的半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低什么是ORM?Object Relation

2021-09-15 20:28:55 86

原创 【Java】基础面试题总结!(一)

1.为什么重写equals方法,还必须要重写hashcode方法?equals()和hashCode()都是Object类中自带的方法,原生的equals()是利用==比较俩对象的内存地址,hashCode是native方法,不同对象得到的hashCode不同。Object的一个子类,如String。重写了equals()方法,目的是将内容相同的对象都看做是一样的东西。那为什么要重写hashcode()呢?因为当我们在使用HashMap或HashSet的时候,调用的是该对象的hashcode()方法,也

2021-09-13 20:36:04 224

原创 【Leetcode】动态规划 之 子序列问题(连续)

674. 最长连续递增序列(连续)给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr

2021-09-13 10:14:04 240

原创 【Leetcode】动态规划 之 子序列问题(不连续)

300. 最长递增子序列(不连续)给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-increasing-subsequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class

2021-09-12 17:42:51 408

原创 【Leetcode】最近笔试遇见的题

剑指 Offer 48. 最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。class Solution { public int lengthOfLongestSubstring(String s) { if(s.length()==0)return 0; if(s.equals(" "))return 1; HashSet<Character> set = n

2021-09-12 16:00:08 60

原创 【MySQL】最最最基础的增删改查操作!面试必备!

学习来源:link.查看数据库show databases;创建数据库create database db5;删除数据库drop database db5;创建表CREATE TABLE student( NAME VARCHAR(10) NOT NULL PRIMARY KEY, age INT NOT NULL, address TEXT NOT NULL ); 删除表drop table student;修改表修改列名Alter table 表名

2021-09-11 11:20:21 677

原创 【MySQL】面试官:你说说一条查询/更新SQL的执行过程?

学习来源:link.Mysql的三层架构第一层作为客户端和服务端的连接,连接器负责处理和客户端的连接,还有一些权限认证之类。比如客户端通用用户名密码连接到Mysql服务器,还有对于数据库表的执行权限。第二层是核心层,基本上Mysql大部分的核心功能都在这一层,包括查询缓存、解析器、优化器之类,比如SQL解析、优化、索引选择,到最后生成执行计划。第三层则是存储引擎了,Mysql通过执行引擎直接调用存储引擎API查询数据库中数据。一个SQL的大概的执行过程。首先客户端发送请求

2021-09-08 16:31:06 101

原创 【java】面试时被问到的基础题

接口和抽象类和区别⼀个类可以实现多个接⼝,但只能实现⼀个抽象类。接⼝⾃⼰本身可以通过 extends 关键字扩展多个接⼝。接⼝的⽅法默认是 public abstract ,他是抽象方法的集合 ,所有⽅法在接⼝中不能有实现(Java 8 开始接⼝⽅法可以有默认实现),⽽抽象类除了抽象方法之外,可以有⾮抽象的⽅法。接⼝中除了 static 、 final 变量,不能有其他变量,⽽抽象类中则不⼀定。接⼝⽅法默认修饰符是 public ,抽象⽅法可以有 public 、 protected 和 defa

2021-09-07 17:16:48 76

原创 【Redis】五种基本数据类型!三种特殊类型!

五种基本数据类型Stringstring 数据结构是简单的 key-value 类型。常⽤命令: set,get,strlen,exists,dect,incr,setex 等等。应⽤场景 :⼀般常⽤在需要计数的场景,⽐如⽤户的访问次数、热点⽂章的点赞转发数量等等。listRedis 的 list 的实现为⼀个 双向链表,即可以⽀持反向查找和遍历,更⽅便操作常⽤命令: rpush,lpop,lpush,rpop,lrange,llen 等。应⽤场景: 发布与订阅或者说消息队列、慢查询。

2021-09-07 10:24:23 100

原创 【MySQL】面试题之mysql索引失效的几种情况

学习来源: link.最佳左前缀原则——如果索引了多列,要遵守最左前缀原则。指的是查询要从索引的最左前列开始并且不跳过索引中的列。不在索引列上做任何操作(计算,函数,(自动或者手动)类型装换),会导致索引失效而导致全表扫描存储引擎不能使用索引中范围条件右边的列,范围之后索引失效。(< ,> between and)mysql使用不等于(!= 或者<>)的时候,无法使用索引,会导致索引失效 mysql中使用is not null 或者 is null会导致无法使用索引

2021-09-06 09:53:55 287

原创 【框架】Spring!面试疯狂被问到的 Spring中Bean的生命周期

学习来源:link.link.在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了。一旦bean不再被使用,则由Java自动进行垃圾回收。Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了一个Bean的构造过程初步分四个阶段:Bean的实例化阶段Bean的设置属性阶段Bean的 初始化阶段Bean的销毁阶段在初始

2021-09-05 12:09:09 116

原创 彻底明白Java中的值传递和引用传递!

学习来源: link.Java的数据类型有哪些?- 基本类型:编程语言中内置的最小粒度的数据类型。它包括四大类八种类型:4种整数类型:byte、short、int、long2种浮点数类型:float、double1种字符类型:char1种布尔类型:boolean- 引用类型:引用也叫句柄,引用类型,是编程语言中定义的在句柄中存放着实际内容所在地址的地址值的一种数据形式。它主要包括:类接口数组值传递:在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内

2021-09-05 10:35:05 150

原创 【集合】HashTable &ConcurrentHashMap

学习资料来源: link.HashMap在多线程环境下存在线程安全问题,怎么解决?使用Collections.synchronizedMap(Map)创建线程安全的map集合;HashtableConcurrentHashMapCollections.synchronizedMap是怎么实现线程安全的?在SynchronizedMap内部维护了一个普通对象Map,还有排斥锁mutex我们在调用这个方法的时候就需要传入一个Map,可以看到有两个构造器,如果你传入了mutex参数,则将对

2021-09-03 20:52:35 98

原创 【多线程】JUC包下的原子类 Atomic

基本类型使用原子的方式更新基本类型,Atomic包提供了以下3个类。AtomicBoolean: 原子更新布尔类型。AtomicInteger: 原子更新整型。AtomicLong: 原子更新长整型。数组类型通过原子的方式更新数组里的某个元素AtomicIntegerArray: 原子更新整型数组里的元素。AtomicLongArray: 原子更新长整型数组里的元素。AtomicReferenceArray: 原子更新引用类型数组里的元素。引用类型

2021-09-03 11:03:32 77

原创 【多线程】JUC包下的并发工具类

学习链接:https://blog.csdn.net/kisscatforever/article/details/106503355(计数器)CountDownLatchCountDownLatch 类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自

2021-09-03 10:12:06 65

原创 【计网】Http常见面试题

学习来源:链接: link.Http基本概念HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。Http状态码1xx1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。2xx2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。200 OK是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返

2021-09-02 20:46:17 150

原创 【多线程】两个线程交替输出1-100的数

无锁实现(类似CAS自旋)public class Test11 { volatile static boolean flag=true; public static void main(String[] args) { new Thread(()->{ for (int i = 1; i <100 ; i++) { //flag==false时 进入循环进行空转 while(!flag

2021-09-02 11:57:23 253

转载 【Redis】缓存穿透、缓存击穿、缓存雪崩

学习来源:link.原文链接:https://blog.csdn.net/hnjsjsac/article/details/116023173缓存穿透理解redis缓存和数据库中没有相关数据(例用户直接携带id<=0的参数不断发起请求),redis中没有这样的数据,无法进行拦截,直接被穿透到数据库,导致数据库压力过大宕机。解决方案对不存在的数据缓存到redis中,设置key,value值为null(不管是数据未null还是系统bug问题),并设置一个短期过期时间段,避免过期时间过长影

2021-09-02 10:58:32 57

原创 【集合】HashMap的resize问题

学习来源:链接: link.put方法的过程什么时候扩容(resize)?当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值,即当前数组的长度乘以加载因子的值的时候,就要自动扩容。当然Java里的数组是无法自动扩容的,方法是使用一个新的数组代替已有的容量小的数组。JDK1.7 扩容举例(put操作是头插法)hash(){ return key % table.length; }假设了我们的hash算法就是简单的用key mod 一下数组的大小。其中的哈希桶数组tabl

2021-09-01 16:41:45 161

原创 【Leecode】动态规划篇 之 打家劫舍(一)

动态规划对于动态规划问题,我将拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够

2021-09-01 10:38:14 95

原创 【Leetcode】字典树篇

208. 实现 Trie (前缀树)Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。b

2021-08-31 17:42:29 103

原创 【Leetcode】贪心算法篇(二)plus

45. 跳跃游戏 II给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。class Solution { public int jump(int[] nums) { if(nums==null ||nums.length==0 || nums.length==1){ return 0;

2021-08-30 16:40:22 122

原创 【设计模式】动态代理(JDK代理)

动态代理代理对象不需要实现接口,但是目标对象要实现接口,否则不能用动态代理代理对象的生成,是利用JDK的API,动态代理在内存中构建代理对象动态代理也叫做JDK代理、接口代理1.接口public interface ITeacherDao { //授课方法 void teach(); void sayhello(String name);}2.目标对象(被代理对象)public class TeacherDao implements ITeacherDao {

2021-08-29 11:53:37 45

原创 【设计模式】静态代理Proxy

学习链接: link.基本概念为对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式,主要有三种代理模式、静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口,他属于动态代理的范畴)静态代理静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理

2021-08-29 11:05:22 133

原创 【Leetcode】用栈实现队列!用队列实现栈!

232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/

2021-08-29 10:21:18 447

原创 【Leetcode】贪心算法篇(二)

122. 买卖股票的最佳时机 II给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii著作权归领扣网络所有。商业转载请联系官方授权,非商

2021-08-27 15:40:31 67

原创 【JVM】JVM内存模型中发生OOM的情况有哪些

Java虚拟机栈Java虚拟机栈会出现两种错误:StackOverFlowError和OutOfMemoryError 。StackOverFlowError ︰若Java 虚拟机栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前Java 虚拟机栈的最大深度的时候,就抛出StackOverFlowError错误。OutOfMemoryError :若Java 虚拟机堆中没有空闲内存,并且垃圾回收器也无法提供更多内存的话。就会抛出OutOfMemoryError 错误。本地方法栈⽅法执⾏

2021-08-23 16:58:10 376

原创 【Leetcode】贪心算法篇(一)

贪心算法贪心算法一般分为如下四步:将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子

2021-08-22 11:36:51 103

原创 【多线程】集合多线程安全问题

ConcurrentModificationExceptionArrayList集合不安全add方法的源码: /** * Appends the specified element to the end of this list. * * @param e element to be appended to this list * @return <tt>true</tt> (as specified by {@link Colle

2021-08-19 21:19:50 122

原创 【多线程】Synchronized 和lock的区别

来源:link.

2021-08-19 20:20:02 42

原创 【数据库】binlog的三种模式

binlog日志的模式分三种statement Level模式每一条会修改数据的sql都会记录到master的binlog中,slave在复制的时候,sql进程会解析成和原来master端执行过的相同的sql再执行。即 只保存sql语句优点:不需要记录每一行的变化,较少bin-log日志量,节约IO,提高性能。缺点:由于它是记录执行语句, 所以,为了让这些语句在slave端也能正确执行, 那么它还必须记录每条语句在执行的时候的一些相关信息, 也就是上下文信息, 来保证所有语句在s

2021-08-18 17:51:57 340

原创 【Leetcode】回溯算法篇 之排序问题(四)

46. 全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。class Solution { List<List<Integer>> res = new ArrayList<>(); List<Integer> list = new ArrayList<>(); int[] used; public List<List<Integer>&

2021-08-16 11:20:35 66

原创 【Leetcode】回溯算法篇 之子集问题(三)

78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。class Solution { List<List<Integer>> res = new ArrayList<>(); List<Integer> path = new ArrayList<>(); public List<List<Inte

2021-08-16 10:56:54 60

原创 【多线程】CAS机制

CAS(Compare and swap)CAS(Compare And Swap 比较并且替换)是乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的。CAS 是怎么实现线程安全的?线程在读取数据时不进行加锁,在准备写回数据时,先去查询原值,操作的时候比较compare原值是否修改,若未被其他线程修改则swap写回,若已被修改,则重新执行读取流程。CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A

2021-08-15 15:11:57 124

原创 【Leetcode】回溯算法篇 之分割问题(二)

131. 分割回文串给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。class Solution { List temp=new ArrayList<String>(); List res = new ArrayList<List<String>>(); public List<List<String>> partitio

2021-08-14 10:21:00 128

空空如也

空空如也

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

TA关注的人

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