业精于勤,荒于嬉
种一棵树
|

超级鲨鱼辣椒

园龄:6年4个月粉丝:5关注:1

随笔分类 -  Java

使用Java 8的Stream轻松遍历树形结构
摘要:1 场景 平时会遇到一些常规需求,比如构建菜单、构建树形结构,在数据库中一般使用父ID实现单表存储,为了降低数据库的查询压力,可以将数据一次性从数据库中查询出来,然后使用Java 8的Stream流处理。 2 实体类 /** * Menu * * @author Jin Zhenlin * @dat
1058
0
0
Java按位操作工具类
摘要:/** * Bit转换工具 */ @SuppressWarnings({"WeakerAccess", "unused"}) public class ConvertBit { /** * 短整型(int16)数据中包含的有效bit数量 */ public static final int BITS
289
0
0
Spring内置的字段校验注解
摘要:| 注解 | 用法 | 适用类型 | | | | | | @Null | 被注解的字段必须为空 | | | @NotNull | 被注解的字段必须不为空 | | | @NotBlank | 带注解的元素不能为null,并且必须至少包含一个非空白字符 | | | @NotEmpty | 带注解的元素不
1030
0
0
Spring Security中anoymous()方法和permitAll()方法的区别
摘要:1 anoymous 匿名访问,仅允许匿名用户访问,如果用户登录认证后,携带token信息再去请求,被关联的资源将拒绝被访问(返回未授权,相当于登录之后不允许被访问,只允许匿名/未登录的用户访问) 2 permitAll 登录后可以访问,不登录也可以访问,一般用于静态资源
237
0
0
Git 版本回退
摘要:原文链接:https://mp.weixin.qq.com/s/Rb6fNqvVdfHWRxc7zddPaQ Git 中的撤销操作,可以分为四类: 工作区的代码想撤销 add 到暂存区的代码想撤销 提交到本地仓库的代码想撤销 远程仓库的代码想撤销 1 基于命令行 1.1 工作区的代码想撤销 可以通过
2982
0
1
Java8 新特性:方法引用
摘要:方法引用通过方法的名字来指向一个方法。 方法引用使用一对冒号 :: 。 1 构造器引用 语法是 Class::new 2 静态方法引用 语法是 Class::static_method
34
0
0
Java8 新特性:Lambda 表达式
摘要:Lambda 表达式,也可称为闭包。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 语法 Lambda 表达式语法如下: (parameters) -> expression 或 (parameters) -> { statements; } 特征: 可选类型声明:不需要
46
0
0
浅谈对象的四种引用类型
摘要:以下皆为个人理解,如有错误,请谅解 什么是引用 对象分配在堆中,当需要操作一个对象时,就必须得到对象的引用。通俗的说,就是使用一个变量指向某个对象,即获取某个对象的引用。 下图所示的就是一种引用。代码中表示为Object one = new Object(); 代码中常见的赋值运算符=即表示获取了某
404
0
0
线程池的四种拒绝策略
摘要:线程池中的线程是有限的,并不能无限制的创建,这也是使用线程池的初衷。所以当线程池无法执行新任务时,会拒绝新任务的执行。官方提供了四种拒绝策略 AbortPolicy 拒绝执行任务并抛出异常 DiscardPolicy 丢弃新任务 DiscardOldestPolicy 丢弃最早未执行的任务。在优先级
234
0
0
浅谈线程池及 Executors 框架
摘要:线程池是什么 线程池(Thread Pool)是一种线程使用模式。线程池维护着多个线程,等待调用者分配需要并发执行的任务。这避免了在处理耗时短的任务时创建与销毁线程的开销。线程池不仅能保证内核的充分利用,还能防止过分调度。线程池一般设置为 CPU 数 +2 比较合适,线程过多会带来额外的调度开销。
68
0
0
如何使用 break 跳出双循环或多重循环
摘要:众所周知,我们在编码过程中,想跳出一个 for 循环的时候,可以使用 break 。那么需要跳出双循环或者多重循环的时候,应该怎么做呢? 形式一 one: for (int i=0;i < 3;i++) { two: for (int j=i;j < 3;j++) { if (i ==1 && j=
2528
0
0
浅谈 Netty(暂定):LengthFieldBasedFrameDecoder 自定义长度解析器(解决粘包/半包)源码探究
摘要:本文主要聚焦 Netty 内置的自定义长度解析器 LengthFieldBasedFrameDecoder 官方定义的 ByteBuf 的内存结构图如下 在 TCP 传输过程中,因为网络的原因,一条数据可能会被分割成多个或者和下一条数据拼在一起发送到服务器(即粘包半包现象),因此在服务器端处理接收到
873
1
0
浅谈 HashMap(三):探秘为什么容量和扩容时必须为 2 的幂次方、如何解决 hash 冲突
摘要:书接上文:浅谈 HashMap(二):put 插入方法源码分析 本文基于 JDK1.8 是不是经常被面试官问到:为什么HashMap的容量必须为2的幂次方呢? 希望此文可以帮助你找到答案。 要回答上面的问题前,我们还得从其它方面谈起👇 众所周知,HashMap 的底层是数组 + 链表,先根据 ke
374
0
0
HashMap番外(二):何时扩容呢?
摘要:本文基于 JDK1.8 我们都知道 HashMap 内部有个属性负载因子用来扩容,那么什么时候才会扩容呢? 源码中还有一个属性 threshold 👇 /** * The next size value at which to resize (capacity * load factor). */
283
0
0
HashMap番外(一):链表新增是头部插入还是尾部插入呢?
摘要:本文基于 JDK1.8 话不多说,看看源码怎么肥四呢 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { ... ... if (p.hash == hash && ((k = p.key)
304
0
0
浅谈 HashMap(二):put 插入方法源码分析
摘要:接上文:浅谈 HashMap(一):数据结构底层实现方式 本文基于 JDK1.8 这节讲讲 HashMap 的 put 方法,看似简单的一个存值方法,实则细节满满,且听我娓娓道来 话不多说,先看看源码👇 public V put(K key, V value) { return putVal(ha
141
0
0
浅谈 HashMap(一):数据结构底层实现方式
摘要:本文基于 JDK1.8 话不多说,先来个图 众所周知,HashMap 的底层实现是数组+链表+红黑树,那么到底是怎样的呢?我们从源码中看看👇 先来点题外话,如果我们想在 Java 中存储一个数据的时候具体是怎么存的呢?这个问题初看大家会觉得有点废话的意思,且听我细说。我们知道 Map 存储的是 k
75
0
0
点击右上角即可分享
微信分享提示
深色
回顶
展开