- 博客(32)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 面试大纲-工作2年Java的求职之旅
工作2年了, 开始认真准备下一阶段的面试和工作计划, 这里会记录我的一个面试总结,每一个问题都会有一篇对应的文章, 在这里将这些文章按类别进行汇总和整理,只需要点击问题跳转链接就可以看到详细的解析啦, 大纲会持续补充中, 希望对正在准备面试的你或者想要有个学习提升的你有所帮助大纲目录MySQL高并发MySQL数据库主从同步的实现原理谈下对redo Log的理解谈下对undo log的理解高并发令牌桶的设计思路...
2020-07-25 10:03:57
852
1
原创 Java-EnumMap
基本概念概念key的类型是enum类根据enum直接定位到内部数组的索引,不需要计算hashCode没有额外空间浪费用Map接口引用,对于client来说,使用hashMap和EnumMap无区别使用如果Map的key是enum类型,推荐使用EnumMap,既保证速度,也不浪费空间。保证速度:不进行hashCode的计算,直接通过枚举里的ordinal作为index,和key、value数组映射不浪费空间:数据的大小和索引位置是固定的,不用对key进行散列和拉链,节约空间;此外数组不
2021-08-13 13:21:25
1528
原创 Java-stream(2) Stream流水线解决方案
文章目录一、概述二、用户的操作如何记录?PipelineHelperPipelineHelper的继承关系ReferencePipelinei. 接口实现ii. 三个内部类iii. 构造函数三、这些操作如何叠加?Sink四、叠加后的操作如何执行?五、执行后的结果在哪里?六、扩展扩展一:Node数据结构Node接口Nodes工厂类七、参考文献一、概述Stream采用了流水线的形式来处理这些流数据。首先记录用户每一步的操作(这时候不会执行),当用户调用结束操作时将之前记录的操作叠加到一起在一次迭代中全部执行
2020-12-01 21:38:03
682
1
原创 Java-stream(1) Stream基本概念 & Stream接口
Java8 集合中的 Stream 相当于高级版的 Iterator,他可以通过 Lambda 表达式对集合进行各种非常便利、高效的聚合操作(Aggregate Operation),或者大批量数据操作 (Bulk Data Operation)Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返函数式的解决方案解开了代码细节和业务逻辑的耦合,类似于sql语句,表达的是"要做什么"而不是"如何去做",使程序员可以更.
2020-11-25 21:43:09
914
原创 Java-ArrayList & LinkedList的源码对比分析
ArrayList和LinkedList都继承了AbstractList抽象类,上层实现了List接口,又根据自我定位,实现不同的功能
2020-11-16 21:27:42
207
原创 Java-String字符串的性能优化说明
String对象的实现在Java8里,String类里面只有两个属性 char[] 数组 和 hash ,用来存放字符串和hash值,通之前的版本比较,减少了offset 和 count 两个变量,String 对象占用的内存稍微少了些,同时,String.substring 方法也不再共享 char[],从而解决了使用该方法可能导致的内存泄漏问题String对象的不可变性不可变性通过源码可以看出String类使用了 final 关键字进行修饰,表示该类不能被继承重写方法。同时,char[] 数
2020-10-13 12:01:34
240
2
原创 Java-Objects工具类简介
1.基本概念Objects类是JDK1.7提供的一个工具类,里面提供了11个实体对象一些基础操作的静态方法特点:Objects类使用了 final 关键字修饰,不能对它进行继承重写方法操作每个方法都是 static 的不能创建实体对象,构造函数进行了报错处理private Objects() { throw new AssertionError("No java.util.Objects instances for you!");}2.提供的工具方法equals / deepE
2020-10-10 19:23:32
361
原创 利用7个分片确定姓氏如何编排问题的思路与解答
题目描述:将中国的百家姓按一定规则进行存储,1.存储容器为一个圆盘,将圆盘等量分为7份,每一个分片上存储若干个姓氏2.随机指定某个姓氏,对7个分片逐个进行访问,每个分片都会返回true/false告诉你这个姓氏是否在这个分片上,7个分片全部询问结束后,你就可以知道指定的是哪个姓氏了要求:对这些分片存储姓氏的规则进行合理编排以满足上诉两条规则看到这个题目首先想到的是布隆过滤器,但是布隆过滤器只能判断给定姓氏一定不存在和可能存在,无法判断这个姓氏一定存在,所以这个方案pass了, 仔细研究下题目,.
2020-09-03 14:50:49
667
原创 架构idea-策略模式的设计和使用
策略模式(Strategy),顾名思义就是同一个事件有不同的选择,每一个选择就是一个策略,这些策略又要有共性(同一个接口)策略模式的设计思想打个比方,小明同学准备十一假期出门旅行,可以选择的交通工具有地铁,火车,飞机等等, 那我们这里的[同一个事件]指的就是[出门旅行], 那都需要交通工具,这里的[交通工具]就可以理解为一个抽象接口,最后选择地铁,火车,飞机等等就是不同策略的具体实现, 好啦,一个最简单的策略模式类图就可以画出来了:小明可以指定他要乘坐的交通工具(new一个实现类的bean),就可以
2020-09-02 17:47:36
606
原创 Java-HashMap原理大解密,所有HashMap的面试问题解答都在这里了!
HashMap是Java开发中最常有用的数据结构之一,它所涉及到的问题也就成了面试必备的考题,小肖在面试的时候遇到不少这方面的问题,这篇文章就通过从HashMap 源码角度来全面解析它的工作原理的方式来回答这些问题, 在最后,会贴上常问的HashMap的面试题,希望看完文章的小伙伴们都能顺利回答出来^ - ^[注] 源码均是Java8的,之前版本不再讨论(int)HashMap的底层数据结构组成1⃣️ 基础Node节点的构成<K, V >数据结构分工:key : 用来确定value
2020-09-01 20:42:54
256
原创 Java-Hash冲突的三种解决方案
这个问题是从HashMap引申出来的,遇到Hash冲突问题,该如何解决?什么是Hash冲突?设定 : 有一个空的数组入参 : 一个key值,一个value值操作 : 调用hash()方法, 计算出key的hash值,将hash值作为下标,在数组对应位置写入value值冲突 : 如果两个不同的key计算出来的hash值相同,可是同一个下标只能存放一个value值,这样就产生了冲突由于数组是容量是有限的,但是可以存入多个key,这样难免就会遇到hash冲突问题解决Hash冲突主要有三种方法:开
2020-08-31 16:27:58
2564
原创 架构idea-秒杀系统的设计方案
这算是个面试必问系列啦,如何设计一个秒杀系统呢?首先要了解秒杀系统的痛点问题:瞬间访问量超大,容易将机器打挂导致系统不可用大量请求进入数据库,导致数据库压力大,数据库不可用大并发下存在库存超买问题归根到底就是一个问题 如何限流?这里借鉴一个 奶酪模型的概念类似地理解一下,每一层奶酪上都有孔,如果将一排奶酪摆在一起,想要穿过这排奶酪,就需要保证可以穿过每片奶酪的孔,如果只有一片奶酪很容易,但是奶酪多了以后这样的概率就变的很小很小了。限流也是类似的想法,按照用户请求自上而下,在每一层都进行流量限
2020-08-30 12:56:33
255
原创 Java-CopyOnWriteArrayList的实现原理
一些基本概念所在包路径: java.util.concurrent作用: CopyOnWriteArrayList可以理解为是线程安全版本的ArrayList,功能和ArrayList类似数据结构: 底层同ArrayList一样,是一个Object类型的数组,用来存放元素实现原理: 使用了写锁, 采用数组复制的形式完成数据的修改(增/删/改)操作特点: 线程安全, 查询效率高, 数据保证最终一致性如何添加数据? add()方法首先, CopyOnWriteArrayList里申明了两个属性
2020-08-28 18:37:58
246
2
原创 Java-Java的基本数据类型整理
基本概念Java的内置数据类型有7种,同时在java.lang包里对应了这7种基本类型的包装类,同时在java.util.concurrent.atomic包里有包含了线程安全版本的包装类名称类型大小默认值包装类多线程版包装类byte整形80Byte–short整形160Short–char字符型16‘u0000’Character–int整形320IntegerAtomicIntegerfloat浮点型32
2020-08-28 15:07:42
192
原创 每日LeeteCode-二叉树的前序遍遍历、中序遍历、后序遍历和层级遍历
文章目录前序遍历递归迭代中序遍历递归迭代后序遍历递归迭代节点申明:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */前序遍历递归class Solution { // 存放结果集 privat
2020-07-28 20:46:22
307
原创 每日LeeteCode-实现LRU cache
题目描述实现一个K-V的数据结构, key和value都是int类型,value为正整数1.有固定的大小2.实现get(), set()方法,要求时间复杂度为O(1)3.当容量满的时候,采用LRU淘汰策略面试的时候拿到这道题还是挺懵的无从下手,没有在规定时间内做出来.现在回过头来想,其实要求给的蛮详细的,只要冷静下来分析下,还是挺简单的题目分析定义一个类来实现这个数据结构: LRUCache有固定大小?既然给了固定大小,就需要有属性来存储这个值,并且是不可变的private fina.
2020-07-26 11:44:22
233
原创 每日LeetCode-x的平方根
实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。leetCode链接:https://leetcode-cn.com/problems/sqrtx/思路1.明确目标 什么样的数字符合要求?因为是平方根的整数部分,所以这个整数a的平方一定小于给定参数x,并且是符合要求的数字里面最大的一.
2020-07-25 17:08:11
185
原创 学个Spring吧[7]-调用同类方法事务不生效问题探索
在学习Spring事务这节的时候,遇到这样一个问题:调用同类方法事务不生效!具体问题描述如下:测试的主要代码——public interface FooService { void insertThenRollback() throws RollBackException; void invokeInsertThenRollback() throws RollBackException;}@Componentpublic class FooServiceImpl implemen
2020-06-14 16:55:46
559
原创 学个Spring吧[6]-Schema.sql为什么没有执行?
狗子在跟着视频(《极客时间-Spring全家桶》)学习写一个简单的JDBC demo的时候,项目无论如何都起不来,扒着老师的项目挨着做比较也没有眉目,schema.sql脚本没有被执行,始终报无法找到表名的错:Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "FOO" not found; SQL statement:INSERT INTO FOO (BAR) VALUES (?) [42102-200]最后在请教前辈帮忙的情况下才
2020-06-14 16:45:25
544
原创 每日LeetCode-并查集,等式方程的可满足性
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题听起来很绕,其实理解后会发现这是个很优雅的数据结构前提:有很多很多个数据节点(一开始,默认这些数据节点是毫无关系的)基本原则:1. 有这样一个数组,数组下标是节点值,数组内容是这个节点的父节点(父节点的产生在后面会说到)2. 根节点的父节点是自己所有围绕并查集的数据计算,都将以这两个基本原则作为依据模型首先,根据这两个基本原则试着画出一个简单的并查集查找通过图例可以清楚地看到并查集是以树
2020-06-08 21:37:17
136
原创 学个Spring吧[5]-Schema.sql为什么没有执行?
狗子在跟着视频(《极客时间-Spring全家桶》)学习写一个简单的JDBC demo的时候,项目无论如何都起不来,扒着老师的项目挨着做比较也没有眉目,schema.sql脚本没有被执行,始终报无法找到表名的错:Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "FOO" not found; SQL statement:INSERT INTO FOO (BAR) VALUES (?) [42102-200]最后在请教前辈帮忙的情况下才
2020-06-06 18:56:35
703
原创 每日LeetCode- 除自身以外数组的乘积
题目:给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]最简单的思路就是遍历数组,算出整个数组的乘积,然后逐个除以当前位的数据值,就可以的得到满足条件的结果啦,但这道题有个额外条件:不要使用除法,且在O(n)时间复杂度范围内完成首先,我们来将题目重新解读——有这样一个数组,针对某一位,它存的数值是
2020-06-04 22:27:59
172
原创 学个Spring吧[4]-扩展!CommandLineRunner接口
在使用SpringBoot构建项目时,我们通常有一些预先数据加载,数据处理等操作需要在项目启动后执行, SpringBoot提供了一个简单的方式来实现–CommandLineRunner,源码超简单:/** * Interface used to indicate that a bean should <em>run</em> when it is contained within * a {@link SpringApplication}. Multiple {@link C
2020-06-02 18:16:34
134
原创 每日LeetCode-和可被 K 整除的子数组
题目: 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。示例: 输入:A = [4,5,0,-2,-3,1], K = 5 输出:7 解释: 有 7 个子数组满足其元素之和可被 K = 5 整除: [4, 5, 0,-2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3] 提示: 1. 1 <= A.length <= 30000 2.
2020-05-27 21:04:43
220
1
原创 学个Spring吧[3]-多数据源配置
*这是水~~~~的一篇*在开发环境中,有时一个项目需要配置多个数据源,可以选择通过xml配置文件的形式进行手动配置, 也可以通过注解进行配置,在狗子看的视频课程里, 老师采用的是通过注解的形式配置,主要用了@Bean和@ ConfigurationProperties 注解,因为这两个注解网上已经拥有很多详细的优质博文,这里就不详细展开啦,附上简单说明和好文链接(说实话,狗子在日常工作中真的挺少用到注解,导致对注解使用很陌生,嗯,要好好学习这一块啦### @Bean@Bean在@Configuratio
2020-05-27 09:19:32
95
原创 学个Spring吧[2]-配置单数据源
SpringBoot提供了很好的DataSource自动配置功能,在这里我们只需要引入有关的依赖(可以通过start.spring.io配置,也可以手动在pom.xml配置), 这里引入了jdbc的依赖,还有springBoot自带的h2数据库<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtim
2020-05-14 19:48:02
172
原创 学个Spring吧[1]-从Hello World开始
开始一个新的专题啦「学个Spring吧」,这个专题主要是小肖学习《极客时间-Spring全家桶》课程的笔记总结,希望通过记录笔记的方式,督促小肖努力学习,也给需要的小伙伴们带来帮助,话不多说,开始正式学习咯自动生成?!超爽框架的学习从搭建项目开始,介绍个超好用的Spring项目自动生成网站:start.spring.io,网站长这样,是不是还挺简约大气的呢?这里可以根据自己的需要,这里是不需要自己选择依赖jar包版本的,springBoot会自动匹配到最适合当前版本的依赖(是不是很贴心呢,小肖感受到
2020-05-13 20:07:04
130
翻译 学习笔记|Pulsar-概念与结构
该篇文章是Pulsar官方文档第二节的翻译和笔记内容、图片来源:http://pulsar.apache.org/docs/en/concepts-overview/概述Pulsar是一个多用户、高性能的服务器到服务器的消息传递解决方案,主要特点如下:• 本地支持多个集群跨集群无缝复制消息• 发布延迟低• 可无缝扩展到百万个主题• 客户端API支持Java、Go、Python和C++...
2019-08-16 10:41:12
3971
原创 学习笔记|MySQL-undo log
作用① 事务回滚②实现MVCC(多版本控制)存储方式采用段的形式记录,undo log segment 每个回滚段(rollback segment)有1024个 undo log segment回滚段个数配置通过innodb_rollback_segments变量设置InnoDB使用的个数,最多为128,其中32个被分配到临时表空间,其余96个分配给常规表中数据的事务SHOW VAR...
2019-08-01 21:16:14
452
原创 学习笔记|高并发-令牌桶算法
令牌桶概念原理系统以一个恒定的速度往桶里放入令牌,如果请求需要被处理,则需要先从令牌桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。相比较漏桶算法令牌桶算法允许一定的突发流量,但是又不会让突发流量超过我们给定的限制(单位时间窗口内的令牌数)对于一个请求,需要根据计算您核实的间隔时间,然后让这个请求等待相应的时间以达到限流的目的。令牌是对“过去的空闲”状态进行建模,当没有空闲时,这个变量...
2019-07-25 08:31:06
388
原创 MySQL-bin log和主从同步
bin logbin log的概念server层的日志系统(归档日志),bin log中跟踪对其数据库的所有更改操作。是逻辑日志,以追加日志的形式记录。binLog的三种格式1)statement记录SQL语句的原文。风险点:如果主/从用到的索引不同,操作语句带limit时,处理的可能是不同行的记录数据2)row仅记录某条记录的数据修改细节,不关系上下文。缺点:占用空间,同事写bin...
2019-07-13 15:01:58
325
3
原创 学习笔记|MySQL-redo log
MySQL在插入一条语句时,服务端将更新的数据写入内存数据页中就任务更新操作完成了,在合适的时候才会将数据刷入磁盘中,这样做的好处是提升了更新操作的效率。但存在的风险点就是系统发生异常崩溃的时候,这部分没来的及刷入磁盘中的数据就会丢失,产生数据不一致问题。InnoDB使用了redo log很好地解决了这个问题。数据落盘InnoDB用buffer pool作为数据库页面的缓存,InnoDB会将数...
2019-07-13 14:49:48
270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人