java
文章平均质量分 91
第二人间
当我知道的越多,越知道自己一无所知
展开
-
当一个男人编码的时候
场景1:调用方法还是定义局部变量风格1Object param = getSomeParameter();useParamFirstTime(param);...useParamSecondTime(param);风格2useParamFirstTime(getSomeParameter());...useParamSecondTime(getSomeParameter());场景2:传一个对象还是一个对象+一个属性风格1methodOne(Object obj)原创 2020-07-27 19:54:39 · 101 阅读 · 0 评论 -
单接口统计每个用户请求数
下面的内容主要是个人的理解及对相应理解结果的验证。理解可能有误,验证示例涵盖范围可能不全面。有不同意见,欢迎讨论。什么是原子性?无奈,笔者并没有找到一个明确的、统一的定义,所以只能按照字面的意思进行理解和描述(非定义。笔者在此多说几句,有些事物,我们没办法明确去定义,所以通过归纳其现象描述其性质,以此来代替定义。比如时间的定义,我们没办法去定义什么是时间,但是我们可以说时间是不可逆转的来描述时间应该有的行为或性质)。原子性自然就是原子的性质,而原子的性质就是原子的不可分割性(这里笔者再多说几句,当我原创 2020-07-11 12:38:55 · 633 阅读 · 0 评论 -
LeetCode:接雨水上台阶解法
给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/trapping-rain-water..原创 2020-07-09 23:16:33 · 228 阅读 · 0 评论 -
关于if else你不知道的事儿
先看一段伪代码if (condition) { do if logic;} else { do else logic;}if else大家一定经常写,也很容易说出if else的执行逻辑:如果条件为真,执行if逻辑;如果条件为假,执行else逻辑。换句话说,要么执行if分支,要么执行else分支。但是,你有没有想过,if和else分支的执行概率都是50%吗?答案当然是不是。看一个例子int i = 0, j = 0;for(int k=0;k<10000;k++)原创 2020-07-09 23:08:40 · 738 阅读 · 0 评论 -
记一次字节跳动面试的失败经历:算法题旋转数组
算法,是真心弱。我一直认为,做算法的或者说能轻松解答算法题的,一种人是脑子特别灵光。因为算法真的很烧脑;另一种就是刷题,要么能刷到全记住,要么能刷到孰能生巧。可惜,以上我都不是。因为很重视这次面试,所以从CSDN众多网友的博客上了解到字节跳动面试的一般流程,最后基本就是一道算法题。无奈,自己算法基础太差,所以就准备按照网友的面试经历刷几道题。但算法这种东西真的是日积月累的事儿,临时抱佛脚真心没啥用。面试安排在下午五点,我在五点之前也只看了三道题:快排、树的非递归前序遍历和反转链表。当时的心情,就跟买彩票原创 2020-07-08 18:57:14 · 2463 阅读 · 0 评论 -
ScheduledThreadPoolExecutor实现周期调度的过程
本文研究ScheduledThreadPoolExecutor调度任务的过程,先看下面这段代码ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);executorService.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println(System.c原创 2020-06-17 21:38:40 · 1004 阅读 · 0 评论 -
Spring Boot 内置Tomcat启动流程
觉得无从下手?一步一步来。有些路,走不通了,就先放一放。去其它路上转转,可能一会儿回来又可以走通了。我们先走第一条路。Spring Boot应用启动是在main方法里调用SpringApplication的run方法,所以内置Tomcat启动流程一定在包含在其中。我们可以debug,但在我们不知道任何有用信息的情况下,尤其是Spring的调用链一般都很深,所以一步一步的debug非常难。这条路走不通,我们先走其他条路。如果你认真观察,你会发现Spring Boot应用启动日志里有这么几句,看下图原创 2020-06-15 21:09:24 · 509 阅读 · 0 评论 -
当我们说阻塞时,我们在讨论什么
1、进程阻塞还是线程阻塞?2、JAVA里的阻塞还是操作系统里的阻塞?3、阻塞是一种主动行为还是被动行为?如果是主动行为,通过系统调用实现还是阻塞原语实现?如果是被动行为,操作系统为什么要将调用方阻塞?4、有哪些可能引起阻塞的行为?哪些是主动行为,哪些是被动行为?5、非阻塞是实现IO多路复用的基础吗?6、阻塞可以分为可中断的阻塞和不可中断的阻塞吗?7、如果我们只讨论线程概念,不管它如何实现的。那么线程阻塞对我们的程序有什么影响?欢迎补充,欢迎讨论...原创 2020-06-14 19:29:59 · 310 阅读 · 0 评论 -
你是否也曾有过被c=a a=b b=c支配的恐惧
先看下面这段代码c = a;a = b;b = c;刚学编程那会儿,完全不知道这段代码到底在干嘛?!现在大家应该都能看懂这段代码的意义,就是实现了a和b值的互换,c作为一个过渡变量而存在。用人的思维去理解这段代码就是:第一步,将a的值给到c。此时c就等于是a的一个备份。因为a有了备份,就可以对a进行操作,所以有第二步,将b的值给到a。此时a的值已经是b。我们完成了互换的一半。因为b的值已经给到a了,所以我们可以对b进行操作,所以有第三步,将c的值给到b。因为c的值就是a,所以此时b的值就是a。原创 2020-06-13 22:41:02 · 914 阅读 · 1 评论 -
JAVA程序员应该知道的一些默认值
1、HashMap的默认容量为16,加载因子默认为0.75。2、ArrayList的默认容量为10,扩容后容量是原容量的1.5倍。3、Tomcat默认最大线程数为200。4、Mysql Innodb存储引擎页的大小为16KB。5、操作系统磁盘扇区的大小一般为512B~4KB。6、Integer类型默认缓存大小为-128~127欢迎补充...原创 2020-06-12 20:06:01 · 177 阅读 · 0 评论 -
HashMap容量是2的幂次方有什么用
一、将取模运算转成按位与运算HashMap需要计算散列位置,通常的做法是取模,即X % 2^n(X即为准备放入HashMap中的key)。取模运算的逻辑一般为两步,第一步求商,即c = a/b;第二步求余数,即r = a-c*b。这两步包含了除法,乘法和减法运算。有一种情况,当容量为2的幂次方时,可以将取模运算转成按位与运算。该转换满足这样的等式:X % 2^n= X & (2^n- 1)。计算机中,除法、乘法和减法都可以转换成加法运算,而加法运算可以通过与或非门实现。从而可以看出取模运算到..原创 2020-06-10 21:01:54 · 527 阅读 · 0 评论 -
蹲坑和锁升级为什么是一样的
上厕所真的是一个很平民的例子,适用于各个方面。废话不多说,说回本文的主题--蹲坑和锁升级为什么是一样的?先说锁升级的过程,简单来说就是从无锁到偏向锁到轻量级锁,最后到重量级锁。锁只能升级,不能降级。你现在一定很疑惑,这个跟蹲坑有毛线关系。别急,且看我慢慢道来。大家都知道北京的房租特别贵,所以合租成为了很多人的选择。小程,小前和小滴三人就合租了一间房子。到有个问题,这间房子只有一个卫生间。小程,小前和小滴三人男女有别,所以不能同时使用这个卫生间。三个人平时都是在自己的房间里,刷剧的刷剧,打原创 2020-06-06 16:03:14 · 219 阅读 · 0 评论 -
线程池里有什么
线程池里有什么?这个问题需要问吗?线程池里当然是线程啦!是,但是不准确。准确的说线程池里是工人,即Worker!Worker是什么?Worker是一个实现了Runnable的类。实现了Runnable就意味着这个类有run方法,并且可以被线程执行。执行Worker的线程从哪儿来?答案是从自身来。在创建一个Worker的时候会生成一个线程分配给它的thread属性。这就好比你去公司上班,公司...原创 2019-12-25 16:54:44 · 256 阅读 · 0 评论 -
spring data jpa将@ManyToOne查询从cross join变成left outer join
在多对一关系中,当多端的表作为主表,并且需要连接一端的表时,默认的连接方式为cross join。在某些业务场景下,查询的数据是不完整的。因为cross join会过滤掉关联字段为null的行数据。所以需要将连接方式从cross join变成其他方式,如left outer join。原创 2017-08-28 19:45:06 · 7423 阅读 · 4 评论 -
@SessionAttributes 清除Session
spring提供注解@SessionAttributes将Model中的数据同步到HttpSession中。在清除Session中的数据时不能调用HttpSession中的removeAttribute("attributeName")方法,需要调用接口SessionStatus中的setComplete方法。接口SessionStatus的唯一实现是类SimpleSessionStatus,调用原创 2017-07-27 12:53:32 · 3041 阅读 · 0 评论