摘要: 前言 老王为何半夜惨叫?几行代码为何导致服务器爆炸?说好的线程安全为何还是出问题?让我们一起收看今天的《走进IT》 正文 CurrentHashMap出现背景 说到ConcurrentHashMap的出现背景,还得从HashMap说起。 老王是某公司的苦逼Java开发,在互联网行业中,业务总是迭代得 阅读全文
posted @ 2019-04-19 09:31 深夜里的程序猿 阅读(6221) 评论(10) 推荐(3) 编辑
摘要: 前言 在最近的一些面试中,跟应聘者聊了比较多关于“同步/异步,阻塞/非阻塞”相关的话题,发现大家对于这些概念的理解都比较模糊,甚至有的同学会反问“他们不就是同一个东西吗?”。所以借着这么一个机会,我想用一些尽量简单的例子,尽量简洁的语言来聊聊自己对于这些概念的看法。 正文 这篇文章想通过一个老王“候 阅读全文
posted @ 2019-04-17 09:50 深夜里的程序猿 阅读(1508) 评论(2) 推荐(9) 编辑
摘要: 前言 不管在我们的工作还是生活中,总会出现各种“错误”,各种突发的“异常”。无论我们做了多少准备,多少测试,这些异常总会在某个时间点出现,如果处理不当或是不及时,往往还会导致其他新的问题出现。所以我们要时刻注意这些陷阱以及需要一套“最佳实践”来建立起一个完善的异常处理机制。 正文 异常分类 首先,这 阅读全文
posted @ 2019-04-15 09:16 深夜里的程序猿 阅读(967) 评论(0) 推荐(1) 编辑
摘要: 前言 对于大部分程序员来说,主要工作都是进行编码以及一些简单的中间件安装,这就导致了很多人对于“运维”相关的工作会比较生疏。例如当我们拥有一台自己的服务器以后,可能会在上面跑一跑自己blog程序,mysql,nginx等等。当程序越来越多了没有一个统一的入口管理启停,也可能会遇到一些特殊的原因导致程 阅读全文
posted @ 2019-04-12 09:31 深夜里的程序猿 阅读(1453) 评论(2) 推荐(1) 编辑
摘要: 前言 如今不管是在面试还是在我们的工作中,OOM总是不断的出现在我们的视野中,所以我们有必要去了解一下导致OOM的原因以及一些基本的调整方法,大家可以通过下面的事例来了解一下什么样的代码会导致OOM,帮助我们以后在工作中能够通过异常信息来判断是JVM里面哪个区域出现了问题。 先介绍一下笔者的相关编码 阅读全文
posted @ 2019-04-09 09:10 深夜里的程序猿 阅读(834) 评论(0) 推荐(0) 编辑
摘要: 前言 说到分布式缓存,可能大多数人脑海浮现的就是redis了,为什么redis能够在竞争激烈的缓存大战中脱颖而出呢?原因无非有一下几点:性能好,丰富的特性跟数据结构,api操作简单。但是用的人多了,就会出现很多不规范或者疏忽的地方,严重的时候甚至会导致生产事故,所以我们有必要来聊聊在Redis使用过 阅读全文
posted @ 2019-04-08 09:35 深夜里的程序猿 阅读(1896) 评论(4) 推荐(2) 编辑
摘要: 前言 微服务架构在如今的9102年已经不是什么新鲜的话题了,但是怎么做好微服务架构,却又是一个永恒的话题。比如服务粒度的划分,怎么控制好粗细?服务划分后,对于项目的部署会有什么改变?... 这会是一个很大的话题,以后可以分开篇章探讨一翻,但是我们本篇并不打算聊这个,而是讨论一下具体的实现技术--du 阅读全文
posted @ 2019-04-04 20:10 深夜里的程序猿 阅读(1135) 评论(1) 推荐(3) 编辑
摘要: 前言 在我们的程序开发过程中,如果涉及到多线程环境,那么对于集合框架的使用就必须更加谨慎了,因为大部分的集合类在不施加额外控制的情况下直接在并发环境中直接使用可能会出现数据不一致的问题,所以为了解决这个潜在的问题,我们要么在自己的业务逻辑中加上一些额外的控制,例如锁,或者我们直接使用Java提供的可 阅读全文
posted @ 2019-05-20 11:59 深夜里的程序猿 阅读(871) 评论(0) 推荐(0) 编辑
摘要: 前言 余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中。用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,反之越接近0就表示两个向量相似度越低,这就叫" 阅读全文
posted @ 2019-05-13 14:40 深夜里的程序猿 阅读(1235) 评论(0) 推荐(1) 编辑
摘要: 前言 今晚闲来无事,整理了一下电脑中尘封已久的旧代码,看着那些年自己写过的代码,踩过的坑,顿时老泪纵横。正当在感叹之际,突然发现在“马克思”文件夹下出现了一个好玩的项目,那就是N年前刚学Java时写的GIF转字符动画的小玩具,虽然是个小玩意,但是在当时能搞点东西出来还是非常有成就感的。 正文 效果展 阅读全文
posted @ 2019-05-08 10:28 深夜里的程序猿 阅读(1549) 评论(0) 推荐(0) 编辑
摘要: 前言 在之前的文章《一文彻底搞懂面试中常问的各种“锁”》中介绍了Java中的各种“锁”,可能对于不是很了解这些概念的同学来说会觉得有点绕,所以我决定拆分出来,逐步详细的介绍一下这些锁的来龙去脉,那么这篇文章就先来会一会“自旋锁”。 正文 出现原因 在我们的程序中,如果存在着大量的互斥同步代码,当出现 阅读全文
posted @ 2019-05-06 10:15 深夜里的程序猿 阅读(11850) 评论(0) 推荐(4) 编辑
摘要: 前言 随着项目的迭代,代码中存在的分支判断可能会越来越多,当里面涉及到的逻辑比较复杂或者分支数量实在是多的难以维护的时候,我们就要考虑下,有办法能让这些代码变得更优雅吗? 正文 使用枚举 这里我们简单的定义一个表示状态的枚举。 public enum Status { NEW(0),RUNNABLE 阅读全文
posted @ 2019-04-30 10:02 深夜里的程序猿 阅读(5687) 评论(2) 推荐(3) 编辑
摘要: 前言 在我们平时的工作或者面试中,都会经常遇到“反射”这个知识点,通过“反射”我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另一种声音的出现,那就是“反射”很慢,要少用。难道反射真的很慢?那跟我们平时正常创建对象调用方法比慢多少? 估计很多人都没去测试过,只是”道听 阅读全文
posted @ 2019-04-26 10:01 深夜里的程序猿 阅读(11540) 评论(0) 推荐(4) 编辑
摘要: 前言 对于一名专业的程序员来说,Linux相关知识是必须要掌握的,其中对于文本的处理更是我们常见的操作,比如格式化输出我们需要的数据,这些数据可能会来源于文本文件或管道符,或者统计文本里面我们需要的数据出现的频次以及总数等等。那么这时候awk就很值得我们去学习了。 正文 在Linux中,awk、se 阅读全文
posted @ 2019-04-24 09:37 深夜里的程序猿 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 前言 关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中“尽情”的打印我们需要的信息了。但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的bug发生,作为一名严谨的程序员,怎么能让这种事情发生呢?所以下面我们就来了解一下关于日志的那些正确使用姿势。 正文 首 阅读全文
posted @ 2019-04-22 10:27 深夜里的程序猿 阅读(6614) 评论(0) 推荐(0) 编辑
摘要: 前言 万丈高楼平地起,今天的聊点基础而又经常让人忽视的话题,比如“==”与“equals()”区别?为何当我们重写完"equals()"后也要有必要去重写"hashcode()"呢? ... 带着这些问题,我们一起来探究一下。 概念 "==":它主要是判断符号两边的“对象”的值是否相等,而这里的“值 阅读全文
posted @ 2019-04-20 11:22 深夜里的程序猿 阅读(326) 评论(0) 推荐(0) 编辑