- 博客(77)
- 资源 (1)
- 收藏
- 关注
原创 Redis面试题总结(带目录)
目录1、Redis简介2、为什么要使用Redis3、redis 常见数据结构以及使用场景分析4、redis 设置过期时间5、如果有大量的key需要设置同一时间过期,一般需要注意什么?6、redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)7、Redis分布式锁:详见我的博客。8、假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它...
2020-11-22 15:30:45 619
原创 Redis五种数据结构的底层原理
redis六种底层数据结构Redis作为一个开源的用C编写的非关系型数据库,基于优秀的CRUD效率,常用于软件系统的缓存,其本身提供了以下五种数据格式:string:字符串 list:列表 hash:散列表 set:无序集合 zset:有序集合string因为redis使用c语言开发,所以自然没有java和c++的那些字符串类库,在redis中,其自己定义了一种字符串格式,叫做SDS(Simple Dynamic String),即简单动态字符串。Redis 中的字符串是一种动态.
2020-11-22 12:14:31 330
原创 分布式锁
1. 基于表实现的分布式锁[非阻塞]CREATE TABLE `methodLock` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `method_name` varchar(64) NOT NULL DEFAULT '' COMMENT '锁定的方法名',`desc` varchar(1024) NOT NULL DEFAULT '备注信息', `update_time` timestamp NOT NULL DEFAULT CU
2020-11-22 01:42:08 184
原创 MyBatis 常见面试题总结
目录1、#{}和\${}的区别是什么?2、Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?3、最佳实践中,通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?4、MyBatis 是如何进行分页的?分页插件的原理是什么?5、简述 MyBatis 的插件运行原理,以及如何编写一个插件。6、MyBatis 执行批量插入,能返回数据库主键列表吗?7、MyB
2020-10-17 21:37:09 177
原创 Springboot面试常问问题
目录1. 什么是 Spring Boot?2. 说出使用Spring Boot的主要优点3. 为什么需要Spring Boot?4. 什么是 Spring Boot Starters?5. 如何在Spring Boot应用程序中使用Jetty而不是Tomcat?6. 介绍一下@SpringBootApplication注解7. (重要)Spring Boot 的自动配置是如何实现的?8. Spring Boot支持哪些嵌入式web容器?9. 什么是Spring Security ?1. 什么是 Sprin
2020-10-17 21:32:56 1411 1
原创 Spring面试常见问题
1、什么是 Spring 框架?Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 官网:https://spring.io/。我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和
2020-10-17 21:18:19 328
原创 jdk1.8新特性
Java8 新增了非常多的特性,我们主要讨论以下几个:java8新特性 Lambda 表达式− Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。 方法引用− 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。 默认方法− 默认方法就是一个在接口里面有了一个实现的方法。 新工具− 新的编译工具,如:Nashorn引擎 jjs、 类依赖...
2020-10-07 16:24:26 187
原创 tc_LeetCode
tc_LeetCode1.两数相加2.寻找两个有序数组的中位数4.整数反转5.字符串转换整数 (atoi)6.回文数7.盛最多水的容器8.最长公共前缀9.三数之和10.最接近的三数之和11.有效的括号12.合并两个有序链表13.合并K个排序链表14.删除排序数组中的重复项15.搜索旋转排序数组16.字符串相乘17.全排列18.最大子序和19.螺旋矩阵20.螺旋矩阵II21.旋转链表22.不同路径23.爬楼梯24.子集25.合并两个有序数组26.格雷编码27.二叉树的最大深度28.买卖股票的最佳时机29.买卖
2020-07-13 13:15:35 763
原创 LeetCode
一、挑战字符串1.无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: "bbbbb"a输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序
2020-06-10 14:19:09 983
原创 分布式系统唯一ID生成方案汇总
原文链接:https://www.cnblogs.com/haoxinyue/p/5208136.html分布式系统唯一ID生成方案汇总系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。1. 数据库自增长序列或字段最常...
2020-03-30 16:59:44 153
原创 在一个很大的日志文件中查找到出现最多的ip并且记录次数
在一个100G的日志文件中, 查找到访问最多的IP, 获得前3个IP, 限制内存只有 1G, 不能使用MapReduce, 请使用Java实现问题解析既然内存只有1G那么就不能直接使用HashMap进行统计, 可以使用MapReduce原理, 先切片, 通过Hash码进行分片, IP 相同的肯定在一个文件中, 分片不宜太大,也不宜太小, 就用1000片吧,之后统计每个...
2020-03-28 15:26:46 1205
原创 接口限流算法总结
在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场...
2020-03-19 16:16:17 334
原创 Redis面试题总结
目录:1、Redis简介2、为什么要使用Redis3、redis 常见数据结构以及使用场景分析4、redis 设置过期时间5、如果有大量的key需要设置同一时间过期,一般需要注意什么?6、redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)7、Redis分布式锁:详见我的博客。8、假如Redis里面有1亿个key,其中有10w个key是以某...
2020-03-10 23:38:26 166
原创 平衡二叉排序树、AVL树、红黑树、B树、B+树
1、平衡二叉排序树 二叉查找树定义:又称为是二叉排序树(Binary Sort Tree)或二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: 1) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2) 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; 3) 左、右子树也分别为二叉排序树; 4) 没有键值相等的节点。...
2020-03-08 16:29:55 761
原创 LinkedHashMap原理
先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:LinkedHashMap结构.png2.1 应用场景HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map<String, String> hashMap = new HashM...
2020-03-08 09:43:31 372
原创 synchronized代码块的底层实现
synchronized代码块的底层实现MDove:咱们先写一个简单的demo,然后看一下它们的字节码:MDove:根据虚拟机规范要求,在执行monitorenter指令时,首先要尝试获取对象锁,也就是上文我们提到了monitor对象。如果这个对象没有被锁定,或者当前线程已经拥有了这个对象的锁,那么就把锁的计数器(_count)加1。当然与之对应执行monitorexit指令...
2020-03-05 20:50:59 345
转载 深入浅出Java锁--Lock实现原理(底层实现)
深入浅出Java锁--Lock实现原理(底层实现)转载Linias最后发布于2018-12-21 16:25:53阅读数 2296收藏展开当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。synchronized是java...
2020-03-05 18:14:17 566
原创 Java设计模式——合成/聚合复用原则
一、什么是合成/聚合复用原则?合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。简述为:要尽量使用合成/聚合,尽量不要使用继承。二、合成和聚合的区别;依赖和关联合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类。用C语言来讲,合成是值的聚合(Agg...
2020-03-01 21:08:51 159
原创 在java中String类为什么要设计成final?
String很多实用的特性,比如说“不可变性”,是工程师精心设计的艺术品!艺术品易碎!用final就是拒绝继承,防止世界被熊孩子破坏,维护世界和平!1. 什么是不可变?String不可变很简单,如下图,给一个已有字符串"abcd"第二次赋值成"abcedl",不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。2. String为什么不可变?翻开JDK源...
2020-03-01 13:36:49 157
原创 String相关问题
String 对象可谓再熟悉不过了,与此相关的面试题经常会引出内存性能优化的问题,本篇主要以new String("123")创建了几个对象为例记录。一、你能回答正确吗Stringa="123";如上定义的为常量;Stringb=a+"456";如上 b 为变量,为啥? 难道常量拼接常量得到的是变量吗?不是,常量拼接常量得到的依旧是常量。但是此...
2020-02-28 13:46:13 567
原创 百度 oppo 滴滴出行 面试问题总结 阿里
(百度oppo)1.dns域名解析用的什么协议 域名是分层结构,域名服务器也是对应的层级结构。有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。由高向低进行层次划分,可分为以下几大类:分类 作用根域名服务器 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助...
2020-02-09 13:08:08 199
原创 生产者消费者3种实现方式
生产者/消费者问题的多种实现方式 1.使用阻塞队列实现 // Producer Class in javaclass Producer implements Runnable {private final BlockingQueue sharedQueue;public Producer(BlockingQueue sharedQueue) {this.sharedQueue =...
2020-02-06 17:55:20 263
原创 Redis分布式锁
一、分布式锁实现方式1. 数据库乐观锁。(增加字段版本标识version控制实现)2. Redis的分布式锁。(本文重点介绍)3. ZooKeeper的分布式锁。(ZooKeeper机制规定:同一个目录下只能有一个唯一的文件名,借助ZooKeeper的临时节点实现)二、Redis的分布式锁实现1. 使用jedis的2.7.x及以上版本。2. 获取锁: 命令:...
2020-02-06 16:28:52 203
原创 从下到上看五层模型
这是计算机网络相关的第一篇文章。要想了解HTTP协议,必然要从最基本的计算机网络知识开始入手。本篇文章从下到上具体介绍五层经典模型,极速入门计算机网络。经典五层模型下面我们先来了解一下各层做的事情!1.物理层电脑要组网,第一件事要干什么?当然是先把电脑连起来,可以用光缆、电缆、双绞线、无线电波等方式。这就叫做"物理层",它就是把电脑连接起来的物理手段。它主要规定了网络的...
2020-01-16 14:57:52 550
原创 JVM调优启动
Eclipse启动运行速度调优JVM 提供了各种用于调整内存分配和垃圾回收行为的标准开关和非标准开关。其中一些设置可以提高 Java IDE 的性能。注意:由于 -X (尤其是 -XX JVM)开关通常是 JVM 或 JVM 供应商特定的,本部分介绍的开关可用于 Sun Microsystems J2SE 1.4.2。以下设置在大多数系统上将提高Eclipse启动运行速度:-vmarg...
2020-01-09 13:46:44 212
原创 synchronize底层原理:
synchronize底层原理:Java 虚拟机中的同步(Synchronization)基于进入和退出Monitor对象实现, 无论是显式同步(有明确的 monitorenter 和 monitorexit 指令,即同步代码块)还是隐式同步都是如此。在 Java 语言中,同步用的最多的地方可能是被 synchronized 修饰的同步方法。同步方法 并不是由 monitorenter 和 m...
2020-01-09 13:45:50 232
原创 SpringMVC的工作原理图:
SpringMVC的工作原理图:SpringMVC流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet...
2020-01-09 13:43:21 113
原创 最新准备
字节跳动:Java中堆栈的区别: 1、栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要 在运行时动态分配内存,存取速度较慢。 ...
2020-01-09 13:42:10 301
原创 Java中的锁分类
Java中的锁分类在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。公平锁/...
2019-10-30 09:41:56 167
原创 为什么wait()和notify()需要搭配synchonized关键字使用
这是Java设计者为了避免使用者出现lostwakeup问题而搞出来的synchronized 的含义:Java中每一个对象都可以成为一个监视器(Monitor), 该Monitor由一个锁(lock), 一个等待队列(waiting queue ), 一个入口队列( entry queue).对于一个对象的方法, 如果没有synchronized关键字, 该方法可以被任意数量...
2019-10-27 22:37:45 298 1
原创 悲观锁和乐观锁的区别、什么情况下选择悲观锁和乐观锁?
悲观锁:时刻保持着一个悲观的态度,对谁都不信任,总想着别人会修改我的数据,所以为了防止别人修改,每次都会上锁,防止别人修改自己的数据,导致的后果就是每次想要拿到数据就必须等待拿到锁,是一个很浪费时间的过程,如果访问量巨大,悲观锁的存在就是一个致命的缺陷。乐观锁:相比于悲观锁,乐观锁对于这个世界都很乐观,对每个想要获取数据的操作,他都会认为大家都不会对自己的数据进行修改,所以不会上锁,在访问量巨...
2019-10-25 06:18:08 2324
原创 数据库sql查询
SQL常见面试题1.用一条SQL语句 查询出每门课都大于80分的学生姓名name kecheng fenshu张三语文 81张三数学 75李四语文 76李四数学 90王五语文 81王五数学 100王五英语 90A...
2019-10-08 09:11:48 451
原创 希尔排序
希尔排序(Shell Sort) 前言: 数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1; 数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3; 如果数据序列基本有序,使用插入排序会更加高效。 基本思想: 在要排序的一组数中,...
2019-10-06 14:15:31 99
原创 插入排序
在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。public static void insert_sort(int array[],int lenth){ int temp; for(int i=0;i<lenth-1;i++){ for(int j=i+1...
2019-10-06 13:20:57 92
原创 选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。public static void select_sort(int array[]...
2019-10-06 13:14:24 88
原创 享元模式
享元模式享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被...
2019-09-22 20:34:57 199
转载 策略模式
策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。介绍意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况...
2019-09-22 16:33:10 95
原创 补齐左括号
问题:编写一道程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )你的程序应该输出:((1 + 2) * ((3 - 4) * (5 - 6)))解: 1 + 2)应该变成(1+2),这里的操作数是1和2,运算符是+,这里的逻辑是 "操作数1+运算符+操作数2+)" 应...
2019-09-14 18:30:22 257
原创 为什么HashMap线程不安全
一、Map概述我们都知道HashMap是线程不安全的,但是HashMap的使用频率在所有map中确实属于比较高的。因为它可以满足我们大多数的场景了。Map类继承图上面展示了java中Map的继承图,Map是一个接口,我们常用的实现类有HashMap、LinkedHashMap、TreeMap,HashTable。HashMap根据key的hashCode值来保存value,需...
2019-09-10 16:53:26 683
原创 Redis系列:缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
一、缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。缓存正常从Redis中获取,示意图如下:缓存失效瞬间示意图如下:缓存雪崩的解决...
2019-08-23 12:15:19 246
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人