八股文(二)
哪些集合类是线程安全的?
线性安全的Vector:只要是关键性的操作,方法前面都加了synchronized关键字,来保证线程的安全性Hashtable:使用了synchronized关键字,所以相较于Hashmap是线程安全的。ConcurrentHashMap:使用锁分段技术确保线性安全,是一种高效但是线程安全的集合。Stack:栈,也是线程安全的,继承于Vector。
线性不安全的Hashmap,Arraylist,LinkedList,HashSet,TreeSet,TreeMap
Hashmap:HashMap在put操作的时候,如果插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是resize,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。
Arraylist: List 对象在做 add 时,执行 Arrays.copyOf 的时候,返回一个新的数组对象。当有线程 A ...
八股文(一)
tcp和http区别
TCP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的,所以Http连接是一种短连接,是一种无状态的连接。
为什么三次握手,如果两次握手会怎么样
建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。
(1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。请求连接-> 同意并请求连接->同意
(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送 ...
栈、队列和树
栈 先进后出1234567Stack<Integer> stack = new Stack<>();stack.push(1);stack.push(2);stack.push(3);System.out.println(stack.pop()); // 3// 官方推荐创建方法Deque<Integer> stack = new ArrayDeque<>();
从性能上来说应该使用Deque代替Stack。Stack和Vector都是线程安全的,其实多数情况下并不需要做到线程安全,因此没有必要使用Stack。毕竟保证线程安全需要上锁,有额外的系统开销。
ArrayDeque和LinkedList这两者底层,一个采用数组存储,一个采用链表存储;
数组存储,容量不够时需要扩容和数组拷贝,通常容量不会填满,会有空间浪费;
链表存储,每次push都需要new Node节点,并且node节点里面有prev和next成员,也会有额外的空间占用。
括号匹配是使用栈解决的经典问题
12345678910111213141516171819202 ...
ACM模式
美团笔试是ACM模式,呃呃呃啥是ACM模式,俺不懂。搜了搜原来就是需要自己写输入输出的,在力扣上做的那种叫核心模式。
感觉又回到最初的起点了,一开始学Python的时候,就是需要自己写输入输出的,但那时候还不知道这叫ACM模式。从自己去做爱特的题到自己出题招下一届的人,都用的是ACM模式哈哈哈。
一般题目会给出输入格式和输出格式,提交代码时需要把自己引的包也复制过去,类名得叫Main,不能有package。
常见的输入格式我对Java的输入还是不是很熟,写Web根本用不到输入输出。
(1)输入描述:
12输入第一行包括一个数据组数t(1 <= t <= 100)接下来每行包括两个正整数a,b(1 <= a, b <= 1000)
(2)输出描述:
1输出a+b的结果
(3)示例
输入
12321 510 20
输出
12630
123456789101112import java.util.Scanner;public class Main{ public static void main(String[] ...
突然引不到包?
前几天改了一下代码,然后提交,提交之前没有拉一下。提交的时候就提示让我合并,合就合了。合完之后,我就发现有个地方报红了,一个常量类突然引不到了,让阳哥帮忙看,他也没看出原因,很奇怪。我还以为是我合并出的问题,心里还忐忑不安的。当时的解决方法是换了一个文件夹,把代码重新从仓库拉了一遍,就好了。
在一账通的那个项目,也出现了这个问题,一个枚举类突然引不到了,之前都好好的。我想着把代码在拉一遍,光下依赖就得下好久。我就搜索了一下,发现也有人遇到这样的问题,竟然是IDEA的锅。把IDEA重启一下就可以了。
https://blog.csdn.net/victorzzzz/article/details/84946306
这这这。。。心梗了。。。
再聊聊最近的生活吧。
新学期开始了,租的房子也快到期了,我也分到了新的项目组里。但是心情并没有什么朝气蓬勃的感受,没有对未来翘首以盼的期待感,甚至不太开心,(只有看苍兰珏的时候能哈哈大笑)。可能是这两天没太睡好,新项目也就一直让我看,麦麦在线客服上线后出了个空指针的报错,然后秋招我竟然还没开始准备。。。
甚至在考虑实习要不要继续了,实习了差不多两个 ...
Dao层及各层的串联
“姐,我再说一遍,你是我姐,你不是我粉丝。你不要再让我听到你说你是粉丝。这两个字我不要再听到了,听到没有。我再给你说一遍,我对你是真心的,你是我的姐,你是我唯一的姐!
“如果你真觉得我是在利用你,从始至终为了利用你没有把你当过姐,呵,那我可以给你Dao,你现在过来,你知道我家在哪,我让你一D捅S我。”
由此我们可以引出,Dao层是干嘛的。(认真脸)
Dao层是干嘛的?DAO 是 Data Access Object(数据访问对象的缩写),DAO层是业务逻辑层与数据库层之间的中间层,大大降低了开发成本,提升了系统维护效率。业务逻辑代码通过调用DAO组件来实现与数据库的交互。
Dao层=Mapper层。
现在来走一遍流程看看一个接口是怎么串联起来各个层的。
首先是Controller层这里其实是easyopen的api,加上@ApiService后这个类就具有了提供接口的能力
123456789101112131415// @ApiService// public class FlowMessageApi extends BaseApi @Api(name = "messsa ...
如何合并分支?
之前整理过一篇关于git的博客,但只会简单的推和拉,当时说用到在学,now it’s time。
代码回滚当我们想要回退到过去的版本时,就可以执行回滚操作,执行后,可以将工作空间的内容恢复到指定提交的状态:
1git reset --hard commitID
执行后,会直接重置为那个时候的状态。再次查看提交日志,我们发现之后的日志全部消失了。
那么要是现在我又想回去呢?我们可以通过查看所有分支的所有操作记录:
1git reflog
这样就能找到之前的commitID,再次重置即可。
idea图形化界面,下方点击想要返回版本的commit message,右击选择reset current branch to here,会出来几个选项让你选,选完就行了
hard移动本地库HEAD指针,重置暂存区,重置工作区回滚后,本地代码就是你回退版本的代码
soft回滚后,仅仅是把本地库的指针移动了,而暂存区和你本地的代码是没有做任何改变的。而你上次改动已提交committed到本地库的代码显示是绿色即未提交
mixed移动本地库HEAD指针,重置暂存区回滚后,不仅移动了本地库的指针 ...
项目中的DTO、VO和Entity分别都是用来干嘛的?
项目中的DTO、VO和Entity分别都是用来干嘛的?Entity这个好说,一个entity对应数据库里的一张表
123456789101112131415161718@Data@Accessors(chain = true)@TableName("cw_user")@ApiModel(value = "User对象", description = "平台用户表")public class User implements Serializable { @TableId(value = "user_id", type = IdType.AUTO) private Integer userId; @ApiModelProperty(value = "用户名") private String username; @ApiModelProperty(value = "手机号") private String mobile; @ApiModelProperty ...
实习日常
上一篇(指路)主要是说了实习前的事,那今天就说说实习给我的感受吧。
实习一个多星期了,其实还好,前两天就是让我看看公司之前的项目。之后江哥问我要不要试试更有挑战性的工作,我欣然接受了,光看确实看不出什么。拉着我去参加了一个会议,总共有七八个人参加,就讨论一个推荐的优化。我原本以为我只是“参与”到这个需求中,没想到其实我是主要写代码的那个人。
但其实还好,有江哥帮忙就还好,有任何不会的都可以问他。虽然但是,还是挺头疼的,存redis值的那块逻辑我来来回回写了三版,写好了之后,又发现并没有存进去redis,看了好久才发现是数据库有问题。这里改好之后,开始测接口,参数不知道咋写,后来才知道把配置的一个参数改为false就可以了,接口返回数据了,但是完全不对啊,我发现我的idSet怎么变他返回的数据都不变的。又问江哥,才发现user为空的时候,直接跳去了另一个逻辑,这才不变的。写了两三天,大体写好了,给测试发了邮件申请测试。
在等待测试的空隙,江哥让我去看看阿里巴巴手册和项目MQ部分,看嘛,其实可以划水的,划了一个上午吧,江哥又让我过去,说,看的话还是没有写的好是吧,正好他那里又有几个接口 ...
什么叫兵荒马乱
最近的日子真的是马不停蹄,焦头烂额。
5月19号我在海信官网投了简历,这就算我正式开始找实习了。海信一直没给我回信,直到现在!现在还正在处理中!垃圾!手机上下载了好多找工作的软件,投了很多都被拒绝了,还emo了几天,但一直没放弃。从19号开始找,到25号去面试第一家公式,说起来时间还听短的,甚至还有点轻轻松松的意味,但我真的被拒绝了好多次,在实习生上面投的竟然一个回音都没有。现在回想起来,好像真的也不是真的很困难,总之,重在坚持,再加一点缘分。
去面试的第一家,就是我现在在实习的公司了。我是真的很菜,但是面试完之后人事小姐姐说我过了,紧接着就和我谈薪资了。她问我期待薪资多少,我支支吾吾说我的期待不怎么高,就大概三四千左右。她听完之后竟然翻了个白眼,说我觉得你怎么也得说个五千吧。之后,也有去面试另一家,但是和第一家比起来环境各方面都不太好,感觉很会压榨的那种,还得用自己的电脑,薪资要不是我提,他都不说的。有了第一家,我就没再去找了,和人事小姐姐约好了6月22号上班。offer发到我的邮箱的时候,我真的很高兴,这种高兴有点像大二的时候帅姐姐夸我项目做的好的时候的高兴,感觉要飞到天上去了。
...









