自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

历乱的日记簿

想成为一名合格的程序员。

  • 博客(181)
  • 收藏
  • 关注

原创 【面经分析】mysql建立索引的几大原则、List,Set,Map、ConcurrentHashMap的实现原理

1、项目的超卖问题如何解决?首先超卖问题的出现有两个原因,第一个是一个用户同一时刻发出多次请求,当时库存是够的,然后就出现了一个用户秒杀多件商品;第二个是数据库底层逻辑没有对库存数量是否>0进行判断,从而导致库存数量减到了负数。因此解决方法有两个,在后台的秒杀表中,对用户id和商品id设置一个唯一索引,防止一个用户同时秒杀多件商品;第二就是在sql语句的逻辑中,对库存数量count进行判断是否>0才减库存。2、排序算法有哪些?快排、归并、堆、冒泡、选择、希尔、桶、计数排序、基数

2021-09-08 21:29:12 399

原创 【集合】HashMap的工作原理、扩容机制transfer、rehash

一、工作原理HashMap内部实现是一个桶数组,每个桶中存放单链表的头节点,其中每个结点存储的是一个键值对整体(Entry),hashMap采用拉链法解决哈希冲突。然后就是两个基本操作:put(K,V)和get(K)。由于哈希是一种压缩映射,也就是说每一个Entry结点无法对应到一个只属于自己的桶,当产生哈希冲突的时候就涉及到hashMap的扩容。二、扩容机制扩容的时机: 当map包含的Entry数量大于等于threshold = loadFactor * capacity 的时候,且新建的Ent

2021-09-03 16:52:11 734

原创 【面经分析】消息中间件、Redis的应用场景、concurrent包、线程池的七大参数

1、消息中间件什么是消息中间件?利用高效可靠的消息传递机制进行异步的数据传输,并基于数据通信进行分布式系统的集成。通过提供消息队列模型和消息传递机制,可以在分布式的环境下扩展进程间的通信。2、Redis的应用场景参考链接:https://zhuanlan.zhihu.com/p/29665317首先介绍redis的特点:读写性能优异;持久化;数据类型丰富;(string、hashmap、list、sortedset、set)单线程;数据自动过期;发布订阅;分布式然后根据每个特点

2021-09-03 15:30:02 366

原创 【面经分析】http与https、隔离级别、MVCC的底层原理、当前读和快照读、explain中的type字段、行锁、表锁

1、http与https的区别具体区别是什么?a、安全性HTTP是超文本传输协议,信息明文传输;HTTPS是具有安全性的SSL加密传输协议。b、端口和传输方式两者用的是不同的传输方式,端口号也不同。HTTP的端口号是80,后者的端口号是443c、连接HTTP的连接很简单,是无状态的;HTTPS的是由SSL和HTTP协议构建的,可进行加密传输、身份认证的网络协议。HTTPS的安全如何保证?HTTPS的安全基础是基于SSL协议的,SSL协议位于TCP/IP协议与各种

2021-08-22 13:27:03 288

原创 【面经分析】虾皮

1、数组、链表、栈、堆比较数组主要用于查询操作比较多的情况,可以直接通过下标进行定位链表主要用于删除、修改、添加操作比较多的情况栈的特点是先进后出堆分为小根堆、大根堆,可以用来构建优先队列2、什么是哈希表哈希表是基于哈希函数建立的一种查找表,存储的主要是K-V键值对,哈希函数为 映射位置 = F(key),自变量为key,因变量为entry数组下标。如何处理哈希冲突?① 开放定址法其中di有三种取法:线性探测再散列、平方探测再散列、随机探测再散列② 链地址法;将该位置冲突的数据

2021-08-17 22:30:31 159

原创 【面试相关】synchronized、编程判断大小端、聚集索引和非聚集索引、IO多路复用

1、JVM中锁的关键字1.1 synchronized① 作用范围:代码块方法(修饰普通方法锁的对象默认是当前对象this,修饰静态方法默认锁的是当前类)类(修饰类时,所有线程需要的锁是同一把)② 是如何保证线程安全的?加锁和释放锁的原理可重入原理:加锁次数计数器可见性原理:内存模型+happens-before③ 重量级锁,如何优化?锁的升级:无锁—>偏向锁—>自旋锁—>重量级锁锁的优化技术:锁粗化、锁消除、轻量级锁、偏向锁、适应性自旋

2021-08-11 10:12:55 75

原创 【面试相关】公平锁和非公平锁、Mysql的慢查询优化方式、BIO、AIO、NIO

1、BIO、AIO、NIOBIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成(一直在水壶旁边等着)NIO (New I/O):同时支持阻塞与非阻塞模式。(老板叫了个小弟来不断轮询水是否开)AIO ( Asynchronous I/O):异步非阻塞I/O模型。(水烧开了,水壶自动通知)2、Mysql的慢查询优化方式https://blog.csdn.net/qq_35571554/article/details/82800463首先开启慢查

2021-08-11 10:11:25 258

原创 【面经】MYSQL的锁、可重复读是怎么实现的、线程池

1、MySQL的锁参考:https://blog.csdn.net/qq_40378034/article/details/90904573全局锁给整个数据库实例加锁。例如全局读锁:Flush tables with read lock。应用场景:全库逻辑备份,将整个库的每个表都select出来存成文本。表级锁两种:表锁、元数据锁。表锁:lock tables…read/write。MDL(元数据)锁:当对一个表做增删改查操作的时候,加MDL读锁;当要对表结构做变更操作的时候,加MDL写锁。

2021-08-08 15:15:18 483

原创 【面经】RESTful风格、SpringMVC及其优势、SpringSecurity

1、RESTful风格一种软件架构风格、设计风格。主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更容易实现缓存等机制。每一个URI代表一种资源‘;客户端和服务器之间,传递这种资源的某种表现层;客户端通过四个HTTP动词,对服务器端资源进行操作,来实现“表现层状态转换”2、测试用例测试工具QMetry、TestRail、JIRA、qTest3、重载&重写重载:- 方法名相同- 参数不同(类型、个数、顺序)重写:- 两同:方法名相同、参数列表

2021-08-08 09:34:04 186

原创 【项目实战】个人博客系统(8)——博客详情首页显示

一、文章内容显示博客详情页面文章的显示格式、文章访问数量、评论数量的处理。接口实现类:文章显示格式:使用开源的Markdown编辑器:Editor,调用工具类方法来增加扩展访问数量:在持久层接口定义方法updateViews来更新文章访问数量,点击文章后数值自增评论数量:在持久层接口定义方法getCommentCountById来根据博客id查询出评论数量1、博客详情实体类public class DetailedBlog { //博客信息 private Long id

2021-07-20 17:02:00 492

原创 【Leecode Top 100】随机刷(1)

1、删除链表的倒数第N个节点注意三个点:1、假如链表为空,那么自然返回空;另外,假如只有一个节点,那么也应该直接返回空;2、slow应该停在被删除节点的前一个节点的位置;3、假如n在还>0时fast已经为空,那么说明要删除的节点是头结点,应该返回head.next。(例如1->2->3,删除倒数第3个节点)class Solution { public ListNode removeNthFromEnd(ListNode head, int n) {

2021-07-20 08:19:07 239 1

原创 【项目实战】个人博客系统(7)——博客首页显示

一、首页显示1、查询最新文章列表:定义实体类查询首页文章列表信息,并定义接口来关联SQL实现查询功能;2、查询最新推荐文章:3、根据关键字搜索博客;4、统计博客信息(博客总数、访问总数、评论总数、留言总数)【四个接口】二、实体类定义1、最新博客列表实体类public class FirstPageBlog { //博客信息 private Long id; private String title; private String firstPict

2021-07-19 15:19:20 333

原创 【项目实战】个人博客系统(6)——相册管理

一、持久层接口 pictureDao@Mapper@Repositorypublic interface PictureDao { //查询照片 List<Picture> listPicture(); //添加图片 int savePicture(Picture picture); //根据id查询照片 Picture getPicture(Long id); //编辑修改相册 int updatePicture(P

2021-07-19 10:27:54 527

原创 【项目实战】个人博客系统(5)——友链管理

一、友链DAO层1、增2、删3、改4、查:查询所有友链、根据网址查询友链、根据id查询友链@Mapper@Repositorypublic interface FriendLinkDao { //查询友链管理列表 List<FriendLink> listFriendLink(); //新增友链 int saveFriendLink(FriendLink friendLink); //根据网址查询友链 FriendLink

2021-07-19 09:59:21 477

原创 【项目实战】个人博客系统(4)——博客管理

一、博客的主要功能模块博客新增博客查询删除博客编辑修改搜索博客老样子:实体类、控制层、持久层、业务层(接口和实现类)、mapper齐活二、博客新增、查询新增博客包括:标题、内容、分类、首图地址、博客描述、推荐、转载、赞赏、评论、原创等设置。博客查询的内容包括:主键、标题、更新时间、是否推荐、是否发布、分类id、分类1、博客查询实体类(BlogQuery)public class BlogQuery { private Long id; private String

2021-07-15 14:36:24 1072

原创 【项目实战】个人博客系统(3)——分类管理

一、分页管理的各个模块查询分类:查询所有分类、修改分类时根据分类名称查询分类、跳转修改分类页面时根据id查询分类。新增保存分类修改编辑分类删除分类二、分页管理在三层架构中的分工1、TypeDao@Mapper@Repositorypublic interface TypeDao { //新增保存分类 int saveType(Type type); //根据id查询分类 Type getType(Long id); //查询所有分类

2021-07-15 12:46:12 436 1

原创 【项目实战】个人博客系统(2)——实体类构建

一、博客实体类的构建二、分类实体类三、评论实体类四、留言实体类和评论相比,少了博客id。五、友链实体类友链只是单表查询,变量就是属性。六、相册实体类

2021-07-15 12:08:34 391

原创 【项目实战】个人博客系统(1)——后台登录

一、MVC架构Model View Controller:是模型(model)-视图(view)-控制器(controller)的缩写模型model:用于封装数据;视图view:通常指的是jsp或者html,一般用于展示数据控制器Controller:应用程序中处理用户交互的部分,一般用于处理程序逻辑的二、关于登录:1、用户类的创建public class User { private Long id; private String nickname;

2021-07-15 11:19:37 336

原创 【项目实战】个人博客系统(0)——基本介绍、框架搭建

一、技术栈1.前端JS框架:JQueryCSS框架:Semantic UI官网Markdown编辑器:编辑器 Markdown代码高亮:代码高亮 prism动画效果:动画 animate.css文章目录:目录生成 Tocbot音乐盒:zplayer照片墙:lightbox插件2.后端核心框架:SpringBoot 2.2.5项目构建:jdk1.8、Maven 3持久层框架:Mybatis模板框架:Thymeleaf分页插件:PageHelper加密:MD5加密运行环境:腾

2021-07-14 20:18:00 569 1

原创 【JavaWeb】Servlet——ServletContext

用ServletContext存取数据,这些数据可以直接在整个WEB应用中获取,每个web应用都有一个单独的ServletContext对象。ServletContext的生命周期是从服务器的启动到关闭。1、ServletContext对象的获取request.getServletContext()直接调用ServletConfig中的getServletContext();2、Servlet常用功能① 多个servlet之间共享数据:setAttribute(String name,O

2021-07-11 20:00:19 119

原创 【JavaWeb】Servlet(GenericSevlet、HttpServlet)以及模板模式思想

设计模式中的模板模式1、GenericSevlet的底层实现2、HttpServlet的底层实现抽象出一个专门处理HTTP类型的请求和响应——处理Http的service方法,统一处理GET/POST请求,提供doGet和doPost方法。(继承GenericServlet类)public class MyHttpServlet extends MyGenericServlet { // 只能处理一般的请求 public void service(ServletRequest .

2021-07-11 19:44:33 87

原创 【算法专题】二分查找

1、x的平方根实现 int sqrt(int x) 函数。注意溢出的情况class Solution { public int mySqrt(int x) { if(x < 2){return x;} int left = 0,right = x; while(left <= right){ int mid = left +(right - left)/2; if(x/mid >

2021-07-11 09:06:12 61

原创 【Leecode】高频题随机刷(6.21-6.27)

1、最长连续序列class Solution { public int longestConsecutive(int[] nums) { if(nums.length == 0){return 0;} Set<Integer> numsSet = new HashSet<>(); for(int i = 0;i < nums.length;i++){ numsSet.add(nums[i]);

2021-06-28 08:54:00 134

原创 【数据库】数据类型、char和varchar的区别、索引使用的注意事项

1、数据库的数据类型?参考链接:https://www.runoob.com/mysql/mysql-data-types.html数值类型、日期和时间类型、字符串类型。2、数据库中char、varchar有什么区别?char固定长度,varchar长度可变。char和varchar最大的不同就是一个是固定长度,一个是可变长度.由于是可变长度,因此存储的是实际字符串再加上一个记录字符串长度的字节。如果分配给char或varchar列的值超过 列的最大长度,则对值进行裁剪.varchar(M)和

2021-06-24 21:52:02 1182

原创 【剑指Offer】排序

1、最小的K个数方法一:快排方法二:归并方法三:堆//第二遍用快排class Solution { public int[] getLeastNumbers(int[] arr, int k) { if(k >= arr.length){return arr;} if(k == 0){return new int[0];} quickSort(arr,0,arr.length-1); return Arrays.co

2021-06-17 09:33:13 79

原创 用户态和内核态、双亲委派机制

1、用户态和内核态CPU状态内核态——运行操作系统程序,操作硬件;用户态——运行用户程序指令划分特权指令:只能由操作系统使用、用户程序不能使用的指令。 举例:启动I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机。非特权指令:用户程序可以使用的指令。 举例:控制转移 算数运算 取数指令 访管指令(使用户程序从用户态陷入内核态)特权级别R0相当于内核态,R3相当于用户态;不同级别能够运行不同的指令集合;状态转换用户态—>内核态:唯一途径是通

2021-06-16 22:19:34 101

原创 【MySQL】varchar和char的区别,表级锁、行级锁

1、MySQL中varchar和char的区别① 定长和变长char表示定长,规定多少字长则存储多少字长,超过的长度只能截取对应的长度进行存储,子长不够空格补齐;varchar表示在规定字长之内,有多少存多少,无需补齐;超出的部分舍去即可。②存储容量不同char:最多存放255个字符,与编码无关;varchar最多存放65532个字符。2、表级锁、行级锁、页级锁表级锁特点:MySQL各存储引擎最大颗粒度的锁定机制。优点:实现逻辑简单,带来的系统负面影响最小,获取锁、

2021-06-16 21:18:21 200

原创 【面试】String的创建、线程池、深拷贝浅拷贝

1、String的两种创建方式以及存储方式第一种:双引号方式x和y都是指向同一个内存地址,他们的引用都是指向方法区的同一个内容。同一个String字面值无论被创建多少次,始终只有一个内存地址被分配,之后的都是这个String的拷贝,在java中称作“字符串驻留”。这种方式创建的时候首先会查看字符串池中是否已经存在,存在就直接返回PermGen中的该String对象,否则就会创建一个新的String对象,之后再放进字符串池中。String x = "abcd";String y = "abcd

2021-06-16 18:51:19 169

原创 【剑指offer】双指针(6.15)

1、删除链表的节点class Solution { public ListNode deleteNode(ListNode head, int val) { if(head == null){return head;} ListNode pre = new ListNode(0); pre.next = head; ListNode cur = pre; while(cur!=null){ if

2021-06-16 09:14:53 59

原创 【剑指Offer】位运算

1、二进制中 1 的个数public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int cnt = 0; while(n !=0){ n &= (n-1); cnt++; } return cnt; }}2、数组

2021-06-16 09:04:00 58

原创 【剑指offer】查找算法(6.15)

1、数组中重复的数字class Solution { public int findRepeatNumber(int[] nums) { int n = nums.length; int[] num = new int[n]; for(int i = 0;i < nums.length;i++){ num[nums[i]]++; if(num[nums[i]] > 1){

2021-06-15 10:30:26 55

原创 【剑指offer】搜索与回溯算法(6.13-6.14)

1、矩阵中的路径class Solution { public boolean exist(char[][] board, String word) { char[] words = word.toCharArray(); for(int i = 0; i < board.length; i++) { for(int j = 0; j < board[0].length; j++) { if(

2021-06-14 10:48:02 140

原创 【剑指Offer】动态规划篇(6.12)

1、斐波那契数列(动态规划版)class Solution { public int fib(int n) { if(n == 0 || n == 1){return n;} int[] dp = new int[n+1]; dp[0] = 0; dp[1] = 1; for(int i = 2;i <= n;i++){ dp[i] = dp[i-1]+dp[i-2];

2021-06-13 09:49:08 68

原创 【大厂春招高频题】腾讯(1)

1、LRU缓存机制2、反转链表整个链表翻转可以1、头插法;2、翻转指针;3、递归4、用栈class Solution{ public ListNode reverseList(ListNode head){ if(head == null||head.next ==null){return head;} ListNode pre = new ListNode(0); pre.next = head; ListNode

2021-06-12 10:33:48 131 1

原创 【计算机网络】HTTP消息结构、请求与响应

1、HTTP消息结构一个HTTP请求报文由请求行、请求头、空行、请求数据四个部分组成。请求行: 请求方法、URL字段、HTTP协议版本字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。根据HTTP标准,HTTP请求可以使用多种请求方法。HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。请求头:User-Agent:产生请求

2021-06-10 14:36:58 141

原创 【JavaWeb】关于Servlet(1)

1、Tomcat服务器1.1、将html页面拖进浏览器和在地址栏输入有什么不同1.2、默认工程和默认页面的访问1.3、web目录介绍2、Servlet2.1 什么是Servlet2.2 手动实现Servelt程序2.3 Servlet url地址如何定位到程序【服务器】首先,通过ip地址定位服务器;【端口号】然后,通过端口号定位Tomcat;【工程路径】然后,通过工程路径确定访问哪个工程;【资源路径】然后,通过资源路径定位配置文件2.4 Sevlet的生命周期

2021-06-09 22:21:55 127 1

原创 【MySQL】事务(隔离级别与实现原理)、索引、sql优化手段

1、MySQL 事务(隔离级别和实现原理)并发事务可能产生的问题:1、读 脏数据:事务A对数据进行了修改,在修改还没有提交时,事务B读到了未修改前的脏数据。2、丢失修改:事务A对数据进行了修改,在修改还没有提交时,事务B读到了未修改前的脏数据,并对其进行了修改,此时A的修改被B覆盖,从而丢失。3、不可重复读:一个事务对内对数据进行了多次读取,每次读到的都不一样。因为在事务A还没有结束时,事务B修改了数据,事务A读到的数据变化了。4、幻读:和不可重复读有点像,一个事务多次读取同一数据,发现数据量/

2021-06-09 21:25:21 197

原创 【JVM】GC算法、类加载机制

1、GC算法① 标记-清除算法可以标记需要清理的对象,也可以标记存活的对象。缺点: 1、执行效率不稳定;2、内存空间的碎片化问题。② 标记-复制算法将内存分成大小相等的两块,每次只使用其中的一块,当A面用完了,就将存活的对象复制到另外一面上,再将使用过的A面一次清理掉。优点: 对于多数对象都是可回收的情况,内存间复制开销较小,并且每次回收都是整个半区,因此不需要考虑内存碎片的情况,只需要移动堆顶指针,按顺序进行分配即可。缺点: 可用内存缩小为之前的一半,空间浪费太多。另外,适用于

2021-06-09 17:02:11 123

原创 【Redis】Redis常用的数据类型和使用方式、缓存击穿、缓存雪崩

1、Redis常用的数据类型和使用方式共五种:1、String2、hash这里value存放的是结构化的对象。博主在做单点登录的时候,就是用hash存储用户信息,以cookield作为key,设置30min为缓存过期时间,能很好地模拟出类似session的效果。3、list第一,可以做简单的消息队列的功能;第二,可以利用lrange命令,做基于redis的分页功能;第三,适用于生产者消费者场景,list可以很好地完成排队,先进先出的原则。4、set第一,可以全局去重;第

2021-06-09 15:33:17 175

原创 【Java并发编程的艺术】进程 VS 线程 VS 协程、上下文切换、避免死锁

1、进程、线程、协程分析:从定义、开销、环境、包含关系来展开说明。1、定义进程: 资源分配的基本单位;线程: 轻量级进程,操作系统调度和执行的基本单位;协程: 轻量级线程,调度由用户控制。2、开销进程: 每个进程都有自己独立的代码和数据空间,程序上下文切换开销较大,因此就有了线程线程: 同一个进程的各个线程是共享代码和数据空间的,因此线程之间切换的开销较小,但是切换需要在用户态和内核态之间,因此就有了协程;协程: 轻量级线程,涉及到的是函数的切换,协程不是由操作系统内核所管理的

2021-06-02 16:07:07 229 1

空空如也

空空如也

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

TA关注的人

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