自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 文本相似度计算之余弦定理

前言余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中。用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,反之越接近0就表示两个向量相似度越低,这就叫"余弦相似性"。正文重温余弦定理先简单的重温一下高中数学知识,余弦定理这个公式大家不知道...

2019-05-13 14:31:37 3251

原创 如何优化代码中大量的if/else,switch/case?

前言随着项目的迭代,代码中存在的分支判断可能会越来越多,当里面涉及到的逻辑比较复杂或者分支数量实在是多的难以维护的时候,我们就要考虑下,有办法能让这些代码变得更优雅吗?正文使用枚举这里我们简单的定义一个表示状态的枚举。public enum Status { NEW(0),RUNNABLE(1),RUNNING(2),BLOCKED(3),DEAD(4); public...

2019-04-30 10:08:08 26813 28

原创 Java日志正确使用姿势

前言关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中“尽情”的打印我们需要的信息了。但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的bug发生,作为一名严谨的程序员,怎么能让这种事情发生呢?所以下面我们就来了解一下关于日志的那些正确使用姿势。正文日志规范命名首先是日志文件的命名,尽量要做到见名知意,团队里面也必须使用统一的命名规范,不然“脏乱...

2019-04-22 09:51:57 27979 8

原创 大白话搞懂什么是同步/异步/阻塞/非阻塞

前言在最近的一些面试中,跟应聘者聊了比较多关于“同步/异步,阻塞/非阻塞”相关的话题,发现大家对于这些概念的理解都比较模糊,甚至有的同学会反问“他们不就是同一个东西吗?”。所以借着这么一个机会,我想用一些尽量简单的例子,尽量简洁的语言来聊聊自己对于这些概念的看法。正文这篇文章想通过一个老王“候车”的案例来解释这些概念。同步阻塞放假了,老王回到了乡下,由于乡下的基础设施比较差,当他在车站候...

2019-04-17 08:54:49 34391 7

原创 一文彻底搞懂面试中常问的各种“锁”

前言锁,顾名思义就是锁住一些资源,当只有我们拿到钥匙的时候,才能操作锁住的资源。在我们的Java,数据库,还有一些分布式的环境中,总是充斥着各种各样的锁让人头疼,例如“公平锁”、“自旋锁”、“读写锁”、“分布式锁”等等。其实真实的情况是,锁并没有那么多,很多概念只是从不同的功能特性,设计,以及锁的状态这些不同的侧重点来说明的,因此我们可以根据不同的分类来搞明白为什么会有这些“锁”...

2019-04-01 11:50:09 26861 2

原创 优化代码中的“坏味道”

“一颗老鼠屎,坏了一锅粥,代码也是如此。”在我们的项目中,也许在刚开始开发的时候,大家都会遵从一些规范来实施,但是当业务进度催的紧,或者人员变动,随着时间的迁移,项目不断的迭代以后,这时的代码可能就会出现一些“坏味道”了。“坏味道”代码的出现可能不会影响我们的业务逻辑,大家自然也就比较容易忽视掉了,但是这如同是给我们代码埋下的定时炸弹,当爆炸的那天,需要我们背锅处理的时候,就...

2019-03-26 19:57:07 23239

原创 聊聊Java里常用的并发集合

前言在我们的程序开发过程中,如果涉及到多线程环境,那么对于集合框架的使用就必须更加谨慎了,因为大部分的集合类在不施加额外控制的情况下直接在并发环境中直接使用可能会出现数据不一致的问题,所以为了解决这个潜在的问题,我们要么在自己的业务逻辑中加上一些额外的控制,例如锁,或者我们直接使用Java提供的可在并发环境中使用的集合类,这是一个简便而且高效的方法。那么我们下面就来了解下Java提供了哪些“神器...

2019-05-21 14:08:10 345

原创 【轻松一刻】Java制作字符动画

前言今晚闲来无事,整理了一下电脑中尘封已久的旧代码,看着那些年自己写过的代码,踩过的坑,顿时老泪纵横。正当在感叹之际,突然发现在“马克思”文件夹下出现了一个好玩的项目,那就是N年前刚学Java时写的GIF转字符动画的小玩具,虽然是个小玩意,但是在当时能搞点东西出来还是非常有成就感的。正文效果展示原图,某两年半练习生转成字符动画后的练习生实现原理其实字符动画的实现原理比较简单,这里...

2019-05-08 09:32:52 9955 9

原创 轻松搞懂Java中的自旋锁

前言在之前的文章《一文彻底搞懂面试中常问的各种“锁”》中介绍了Java中的各种“锁”,可能对于不是很了解这些概念的同学来说会觉得有点绕,所以我决定拆分出来,逐步详细的介绍一下这些锁的来龙去脉,那么这篇文章就先来会一会“自旋锁”。正文出现原因在我们的程序中,如果存在着大量的互斥同步代码,当出现高并发的时候,系统内核态就需要不断的去挂起线程和恢复线程,频繁的此类操作会对我们系统的并发性能有一定...

2019-05-06 09:29:24 6351 1

原创 如何提高使用Java反射的效率?

前言在我们平时的工作或者面试中,都会经常遇到“反射”这个知识点,通过“反射”我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另一种声音的出现,那就是“反射”很慢,要少用。难道反射真的很慢?那跟我们平时正常创建对象调用方法比慢多少? 估计很多人都没去测试过,只是”道听途说“。下面我们就直接通过一些测试用例来直观的感受一下”反射“。正文准备测试对象下面先定义一个...

2019-04-26 09:44:16 25362

原创 程序猿必知必会Linux命令之awk

前言对于一名专业的程序员来说,Linux相关知识是必须要掌握的,其中对于文本的处理更是我们常见的操作,比如格式化输出我们需要的数据,这些数据可能会来源于文本文件或管道符,或者统计文本里面我们需要的数据出现的频次以及总数等等。那么这时候awk就很值得我们去学习了。正文在Linux中,awk、sed、grep被称为“三剑客”,都跟文本操作有关,那他们各自有什么特点呢?grep:适合用于单纯的查...

2019-04-24 09:23:52 20224

原创 使用ConcurrentHashMap一定线程安全?

前言老王为何半夜惨叫?几行代码为何导致服务器爆炸?说好的线程安全为何还是出问题?让我们一起收看今天的《走进IT》正文CurrentHashMap出现背景说到ConcurrentHashMap的出现背景,还得从HashMap说起。老王是某公司的苦逼Java开发,在互联网行业中,业务总是迭代得非常快。体现在代码中的话,就是v1.0的模块是单线程执行的,这时候使用HashMap是一个不错的选择...

2019-04-19 09:22:33 31049 13

原创 Java异常处理最佳实践及陷阱防范

前言不管在我们的工作还是生活中,总会出现各种“错误”,各种突发的“异常”。无论我们做了多少准备,多少测试,这些异常总会在某个时间点出现,如果处理不当或是不及时,往往还会导致其他新的问题出现。所以我们要时刻注意这些陷阱以及需要一套“最佳实践”来建立起一个完善的异常处理机制。正文异常分类首先,这里我画了一个异常分类的结构图。在JDK中,Throwable是所有异常的父类,其下分为”Err...

2019-04-15 09:26:14 25290

原创 论JVM爆炸的几种姿势及自救方法

前言如今不管是在面试还是在我们的工作中,OOM总是不断的出现在我们的视野中,所以我们有必要去了解一下导致OOM的原因以及一些基本的调整方法,大家可以通过下面的事例来了解一下什么样的代码会导致OOM,帮助我们以后在工作中能够通过异常信息来判断是JVM里面哪个区域出现了问题。先介绍一下笔者的相关编码环境。jdk:java version “1.8.0_121”ide:IntelliJ IDEA...

2019-04-12 10:03:44 25838

原创 女朋友也能看懂的Zookeeper分布式锁原理

前言关于分布式锁,在互联网行业的使用场景还是比较多的,比如电商的库存扣减,秒杀活动,集群定时任务执行等需要进程互斥的场景。而实现分布式锁的手段也很多,大家比较常见的就是redis跟zookeeper,今天我们主要介绍的是基于zookeeper实现的分布式锁。这篇文章主要借用Curator框架对zk分布式锁的实现思路,大家理解了以后完全可以自己手动实现一遍,但是在工作中还是建议使用成熟的开源框架...

2019-04-12 10:01:23 32370

原创 Redis的正确使用姿势

前言说到分布式缓存,可能大多数人脑海浮现的就是redis了,为什么redis能够在竞争激烈的缓存大战中脱颖而出呢?原因无非有一下几点:性能好,丰富的特性跟数据结构,api操作简单。但是用的人多了,就会出现很多不规范或者疏忽的地方,严重的时候甚至会导致生产事故,所以我们有必要来聊聊在Redis使用过程中的一些“正确姿势“。切忌裸奔大家别笑... 很多初学者或者没经验的开发...

2019-04-01 11:53:45 29955

原创 “==”、“equals()”、“hashcode()”之间的秘密

前言万丈高楼平地起,今天的聊点基础而又经常让人忽视的话题,比如“==”与“equals()”区别?为何当我们重写完"equals()"后也要有必要去重写"hashcode()"呢? ... 带着这些问题,我们一起来探究一下。概念"==":它主要是判断符号两边的“对象”的值是否相等,而这里的“值“”又有所区分了。 基础数据类型:比较的就是自身的值,这个跟我们常...

2019-03-26 22:21:11 22936

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除