2 wenyixicodedog

尚未进行身份认证

我要认证

本博客为个人笔记留存

等级
TA的排名 6w+

Redis 常见面试问题

说一说 Redis 哈希槽的概念 ?Redis集群没有使用一致性hash,而是引入了哈希槽的概念。Redis集群中有16384个哈希槽,每个key 通过CRC16校验后对16384取模来决定存储在那个槽。集群的每个节点负责一部分hash槽。Redis 为什么需要管道技术?Redis 提供了一种管道技术,可以让客户端一次发送多条命令。期间不需要等待服务器端的响应,等所有的命令发送完成后,再依次响应。这样节省了时间,提升了效率。Redis 分布式锁是什么 ?先拿...

2020-06-01 00:16:30

Java 逃逸分析

记得几年前有一次栈长去面试,问到了这么一个问题:Java中的对象都是在堆中分配吗?说明为什么!当时我被问得一脸蒙逼,瞬间被秒杀得体无完肤,当时我压根就不知道他在考什么知识点,难道对象不是在堆中分配吗?最后就没然后了,回去等通知了。。这个面试题很经典,我最近也分享到了知识星球上面:回答很精彩,大家可以加入一起搞技术,我现在将答案总结一下给大家。什么是逃逸分析?关于 Java 逃逸分析的定义:逃逸分析(Escape Analysis)简单来讲就是,Java Hotspot 虚拟.

2020-05-31 23:08:13

ThreadLocal 面试问题

「问点一:为什么使用线程的id来作为ThreadLocalMap的key值呢?」这个很容易理解,不使用Thread的id来作为ThreadLocalMap的key主要是为了解决存储多value的情况。一个线程就对应一个ThreadId,假如有多个value需要存储,就没办法存储,而已ThreadLocal作为key,每个ThreadLocal的唯一性使用threadLocalHashCode来区分,就可以对应多个value进行存储。「问点二:线程之间如何传递ThreadLocal对象呢?」在

2020-05-31 21:54:59

23种设计模式

23 种设计模式的分类。GoF 的 23 种设计模式的分类表 范围\目的 创建型模式 结构型模式 行为型模式 类模式 工厂方法 (类)适配器 模板方法、解释器 对象模式 单例 原型 抽象工厂 建造者 代理 (对象)适配器 桥接 装饰 外观 享元 组合 策略 命令 职责链 状态 观察者 中介者 迭代器 访问者 备忘录 23种设计模式..

2020-05-31 01:06:57

多线程开发常用的集合操作

在实际开发中,一般使用java.util.concurrent包中的相关类如果使用List集合, 就是使用java.util.concurrent.CopyOnWriteArrayList如果使用Set集合,不需要排序, java.util.concurrent.CopyOnWriteArraySet如果使用Set集合,需要排序, java.util.concurrent.ConcurrentSkipListSet如果使用Map集合,不需要根据键排序, java.util.concu...

2020-05-30 23:54:46

Redis为什么这么快?

Redis是单线程的, 采用了多路复用io阻塞机制 数据结构简单,操作节省时间 运行在内存中,自然速度快①、Redis为什么是单线程的?因为Redis的瓶颈不是cpu的运行速度,而往往是网络带宽和机器的内存大小。再说了,单线程切换开销小,容易实现既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。如果万一CPU成为你的Redis瓶颈了,或者,你就是不想让服务器其他核闲置,那怎么办?那也很简单,你多起几个Redis进程就好了。Redis是keyvalue数据库,又

2020-05-26 17:23:44

lambda表达式使用的6种方法

lambda表达式的前提,就是要使用函数式接口使用比如:函数式接口作方法参数,函数式接口作方法返回值,函数式接口创建实现类对象时可以使用1.静态方法引用格式 :类名::方法名interface test { public int run(String string);} public class blog { public static void main(String[] args) {// 实质代码: getInteger("123", (str) -

2020-05-25 18:03:22

Linux命令

1、"free -t",按照总和的形式显示内存的使用信息。k/m/g/h "free -s 2 -c 4"。表示为周期性展示统计内存信息。本篇实例为每隔2秒统计一次,统计4次。 如果需要查看版本信息,我们执行命令"free -V",进行查看。 2、强大的搜索命令:find 【搜索目录】【-name或者-iname】【搜索字符】:-name和-iname的区别一个区分大小写,一个不区分大小写  ①、find /etc -name init (精准搜索,名字必须为 init 才能搜索的到...

2020-05-24 15:50:50

SQL优化总结

1、尽量避免使用select *,返回无用的字段会降低查询效率。2、在表中建立索引,优先考虑where、group by使用频率较高的字段,避免在索引字段上进行运算,否则会索引失效进而全表扫描。如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高。在不同值较少的字段上不必要建立索引,如性别字段,因为数据库底层存储的时候叶子节点单向链表会很长,查询的时间复杂度线性增长。3、尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描。如下:SELECT * FROM t W

2020-05-24 10:12:08

InnoDB和MyISAM的区别

区别:1. InnoDB支持事务,MyISAM不支持。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的,必须要有主键,通过主键索引效率很高。如果不是以主键为查询条件需要两次查询,先查询到主键,然后.

2020-05-24 02:06:19

MySQL底层存储原理——B+树

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引 Hash 索引 全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树、平衡二叉树和 B 树这三种数据结

2020-05-24 01:52:06

SQL查询语句中的 limit 和 offset

limit 2,1第三条开始查询,取一条数据limit 2 offset 1 标识跳过第一个数据取两个数据,即第二条和第三条

2020-05-17 23:42:22

三角形最小路径和(贪心算法)--leecode

public int minimumTotalGreed(List<List<Integer>> triangle) { int sum = triangle.get(0).get(0); int m = 0, n = 0; for (int i = 1; i < triangle.size(); i++) { int bottom = triangle.get(m + 1).get(n); ...

2020-05-16 21:45:04

最大子数组之和--动态规划( O(n))

/** * 利用动态规划解题:该方法时间复杂度为:o(n),但是额外使用了两个数组空间,其空间复杂度为:o(n) * 解题思路:对于一个数组,求最大子数组之和,我们可以分为三部分: * 我们以最后一个元素array[n-1]为例子: * 1:array[n-1]自己构成最大的子数组 * 2:包含array[n-1]的最大子数组,即以array[n-1]结尾,我们用End[n-1]表示 * 3:不包含array[n-1]的最大子数组,那么求arra.

2020-05-15 22:46:51

最大子数组之和--优化的动态规划(舍弃All数组)

/** * 优化的动态规划(舍弃All数组) */ private static void getSumOfSubArray05(int array[]) { int n = array.length; int End[] = new int[n]; //初始化:当数组中只有一个元素时 End[0] = array[0]; End[n - 1] = array[n - 1]; ...

2020-05-15 22:46:41

最大子数组之和--进一步优化的动态规划

/** * 进一步优化的动态规划 * 为了进一步降低空间复杂度,我们可以定义两个变量用来保存方法三中的 * End[i-1]和All[i-1] */ private static void getSumOfSubArray04(int array[]) { int n = array.length; int nEnd = array[0]; //前i个元素的最大子数组之和 int nAll = array[0].

2020-05-15 22:46:31

最大子数组之和--分治法( O(nlogn))

/** * @Date: 2020-03-24 * @Description: 最大子数组问题算法(分治法 、 无左右下标) */ public static int maxSubArraySort(int a[], int low, int high) { if (low > high) { return 0; } if (low == high) { return.

2020-05-15 22:46:21

最大子数组之和(蛮力法 O(n^3))

/** * 最大子数组问题算法(蛮力法 O(n^3)) */ private static void getSumOfSubArray01(int array[]) { int n = array.length; int thisSum, maxSum = Integer.MIN_VALUE, k, i, j; for (i = 0; i < n; i++) { for (j = i; j < .

2020-05-15 22:46:13

最大子数组之和--优化的蛮力枚举( O(n^2))

/** * 最大子数组问题算法(优化的蛮力法)(重复利用已经计算的子数组和,相比较方法一,时间复杂度为:O(n^2)) */ private static void getSumOfSubArray02(int array[]) { int n = array.length; int thisSum, maxSum = Integer.MIN_VALUE, i, j; for (i = 0; i < n; i++) { .

2020-05-15 22:46:03

快速排序算法--随机主元( O(nlogn))

/** * @Date: 2020-03-24 * @Description: 快速排序算法(随机选取一个数为基数 , 比他大的总是在右边 , 小的总是在左边) * @Description: 时间复杂度为O(nlogn) */ public static void quickSortRandom(int a[], int low, int high) { if (low >= high) { return; .

2020-05-15 22:45:49

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。