
技术文章
文章平均质量分 93
开发技术文章,问题解决
大道七哥
这个作者很懒,什么都没留下…
展开
-
项目代码 if/else 过多,引起程序猿口吐莲花
一、吐槽模式项目开发周期短,迭代速度快,时间久了之后,代码中可能会充斥着大量的if/else,一层一层的嵌套,让人短时间内不可能领悟该段代码的逻辑,久而久之,后面接手的人可能真的会口吐莲花!//就像这样,一步一步变成金字塔if (condition1) { action1(); if (condition2) { action2(); if (condition3) { action3(); if (con原创 2021-02-08 16:34:12 · 723 阅读 · 1 评论 -
ThreadPoolExecutor 线程池异常消失之刨根问底
一、情景复现昨天,公司一个同事,急急忙忙的跑过来找我,说他的项目,出现了一个非常诡异的BUG,不知道什么情况?同事:我用五个线程计算学生各个科目的成绩,最后汇总,本地都是正常的,但是一到测试环境就少了一科成绩,也没抛出异常,什么鬼?油七:任务线程怎么做的?线程异常处理了吗?为啥不打印日志呢?灵魂三连击,哈哈哈(开玩笑的,这不是我的处事风格)油七:行,咱们先看一下代码…,一顿扫描占卜之后,大致知道啥情况了。同事:哥,我这程序还有救吗,客户下了死命令,今天解决啊。油七:没事,小伙子,不要慌,你先把线原创 2021-02-04 12:22:21 · 1208 阅读 · 0 评论 -
一段代码,两倍时差,直击并发编程伪共享
一、前言【闲话开篇】:这段时间项目接近尾声,我终于闲了一点,又拿起了早先未看完的书《JAVA高并发程序设计》,强迫自己学习。看到其中介绍《无锁的缓存框架:Disruptor》时,接触到了一个概念——伪共享(false sharing),说是会影响并发程序的执行性能,被很多人描述成无声的性能杀手,突然感觉到了自己知识的匮乏,罪过啊。伪共享(false sharing),究竟是怎样一回事呢?不急,我们先倒杯水边喝边回顾,以前上学时丢下的计算机组成原理相关知识点。二、概念解析CPU 缓存(三级)CPU原创 2021-01-29 15:53:21 · 250 阅读 · 0 评论 -
动手构建地铁关系网,实现最短路径查询
一、前言打开手机‘北京地铁’APP,输入起始点:霍营,终点:北京南站,发现系统给我们推荐了两条路线。最短时间路线与最少换乘路线,并且分别给出了耗时与乘坐里程费。看到这里,不禁开启了靓仔疑问,假如给你地铁站相关数据,如何构建这样的关系网络呢?(尽量少写代码,毕竟我这个人懒的不行,花最少的功夫,整最炫的效果,咦)1.整理地铁站点数据,处理成echarts图表所需要的结构2.整理地铁站点数据,自己写代码实现,能实现(好累啊…)3.整理地铁站点数据,导入 Neo4j 中,点击查看分析:方案一,不仅要处理原创 2020-09-09 09:30:08 · 1645 阅读 · 2 评论 -
《闲扯Redis十一》Redis 有序集合对象底层实现
一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。原文解析备注: 本节中涉及到的跳跃表实现,已经在上节《闲扯Redis十》Redis 跳跃表的结构实现一文中详情分析过,本文中将直接引用,不再赘述。二、命令实现 因为有序集合键的值为有序集合对象,所以用于有序集合键的所有命令都是针对有序集合对象来构建的。命令ziplist 编码的实现方法原创 2020-09-09 09:28:23 · 183 阅读 · 0 评论 -
Mysql 如何实现全文检索,关键词跑分
一、前言今天一个同事问我,如何使用 Mysql 实现类似于 ElasticSearch 的全文检索功能,并且对检索关键词跑分?我当时脑子里立马产生了疑问?为啥不直接用es呢?简单好用还贼快。但是听他说,数据量不多,客户给的时间非常有限,根本没时间去搭建es,所以还是看一下 Mysql 的全文检索功能吧!MySQL 从 5.7.6 版本开始,MySQL就内置了ngram全文解析器,用来支持中文、日文、韩文分词。在 MySQL 5.7.6 版本之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分原创 2020-08-25 11:35:52 · 289 阅读 · 0 评论 -
《闲扯Redis十》Redis 跳跃表的结构实现
一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。原文解析备注: 按照分析顺序,本节应该说道有序集合对象了,但是考虑到有序集合对象的底层实现中使用到了跳跃表结构,避免在分析有序集合时造成突兀,所以本节先来看看 redis 中跳跃表结构的具体实现。二、结构解析 Redis 的跳跃表由 redis.h/zskiplistNode 和 redis.h/.原创 2020-08-11 12:18:16 · 186 阅读 · 0 评论 -
《闲扯Redis九》Redis五种数据类型之Set型
一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。原文解析Redis 中的 Set 是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。二、底层实现 集合对象的编码可以是 intset 或者 hashtable 。 intset 编码的集合对象使用整数集合作为底层实现, 集合对象包含的所有元素都被保存在整数集合里面。 举.原创 2020-07-30 10:12:49 · 173 阅读 · 0 评论 -
《闲扯Redis八》Redis字典的哈希表执行Rehash过程分析
一、前言随着操作的不断执行, 哈希表保存的键值对会逐渐地增多或者减少, 为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序需要对哈希表的大小进行相应的扩展或者收缩。原文解析二、实现分析1.rehash过程分析扩展和收缩哈希表的工作可以通过执行 rehash (重新散列)操作来完成。Redis 对字典的哈希表执行 rehash 的步骤:1.为字典的 ht[1] 哈希表分配空间, 这个哈希表的空间大小取决于要执行的.原创 2020-07-28 09:34:18 · 160 阅读 · 0 评论 -
《闲扯Redis七》Redis字典结构的底层实现
一、前言上节**《闲扯Redis六》Redis五种数据类型之Hash型** 中说到 Hash(哈希对象)的底层实现有:1、ziplist 编码的哈希对象使用压缩列表作为底层实现2、hashtable 编码的哈希对象使用字典作为底层实现原文解析那么第二种方式中的字典究竟是怎样的一种结构呢?疑问:字典, 又称符号表(symbol table)、关联数组(associative array)或者映射(map), 是一种用于保存键值对(key-value pair)的抽象数据结构。在字典.原创 2020-07-26 20:49:00 · 166 阅读 · 0 评论 -
《闲扯Redis六》Redis五种数据类型之Hash型
一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。原文解析Redis 中的 hash 是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。二、实现分析 由上述结构图可知,Hash类型有以下两种实现方式:1、ziplist 编码的哈希对象使用压缩列表作为底层实现2、hashtable 编码的哈希对象使用字典作为底层实现.原创 2020-07-26 20:43:18 · 184 阅读 · 0 评论 -
《闲扯Redis五》List数据类型底层之quicklist
一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。原文解析Redis 中的 list 是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。二、底层解析1、上节回顾 上节**《闲扯Redis四》List数据类型底层...原创 2020-04-24 09:26:13 · 230 阅读 · 0 评论 -
《闲扯Redis四》List数据类型底层编码转换
一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。原文解析Redis 中的 list 是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。二、编码转换 上节**《闲扯Redis三》Redis五种数据类型之List型...原创 2020-04-15 16:40:52 · 276 阅读 · 0 评论 -
《闲扯Redis三》Redis五种数据类型之List型
一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。Redis 中的 list 是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。二、操作命令 List数据类型在 Redis 中的相关命令::命令描述用...原创 2020-04-02 17:14:49 · 283 阅读 · 0 评论 -
《闲扯Redis二》String数据类型之底层解析
原文出处:http://www.yund.tech/zdetail.html?type=1&id=585ee331353551a44b29a9e9a09a1570作者: jstarseven一、前言Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重...原创 2020-03-28 13:57:58 · 175 阅读 · 0 评论 -
java多线程并发控制countDownLatch和cyclicBarrier的使用
java主线程等待所有子线程执行完毕在执行,这个需求其实我们在工作中经常会用到,比如用户下单一个产品,后台会做一系列的处理,为了提高效率,每个处理都可以用一个线程来执行,所有处理完成了之后才会返回给用户下单成功。我们通过以下的几种方法来解决:一、使用Thread的join()等待所有的子线程执行完毕,主线程在执行,thread.join()把指定的线程加入到当前线程,可以将两个交替执行的线...原创 2020-03-24 15:16:17 · 228 阅读 · 0 评论 -
使用maven构建多模块项目,分块开发
原文出处:http://www.yund.tech/zdetail.html?type=1&id=79dec7c1d56292419acec78afcbc1095 作者:jstarseven在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署。我们假设有这样一个商城项目,包括以下几个模块:...原创 2020-03-24 15:14:53 · 1172 阅读 · 0 评论 -
Spring Boot+redis存储session,满足集群部署、分布式系统的session共享
本文讲述spring-boot工程中使用spring-session机制进行安全认证,并且通过redis存储session,满足集群部署、分布式系统的session共享。java工程中,说到权限管理和安全认证,我们首先想到的是Spring Security和Apache Shiro,这两者均能实现用户身份认证和复杂的权限管理功能。但是如果我们只是想实现身份认证(如是否登录、会话是否超时),...原创 2020-03-24 15:11:47 · 282 阅读 · 0 评论 -
spring security 实践 + 源码分析
前言本文将从示例、原理、应用3个方面介绍 spring data jpa。以下分析基于spring boot 2.0 + spring 5.0.4版本源码概述Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了Spring IoC,DI(控...原创 2020-03-24 15:10:42 · 598 阅读 · 0 评论 -
40个Java多线程问题总结
前言Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就...原创 2020-03-24 15:09:37 · 97 阅读 · 0 评论 -
Java日志框架:logback详解
为什么使用logback记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结一下,logback大约有以下的一些优点:内核重写、测试充分、初始化内存加载更小,这一切让logback性能和log4j相比有诸多倍的提升 logback非常自然地直接实现了slf4j,这个严...原创 2020-03-24 15:08:39 · 372 阅读 · 0 评论 -
《亿级流量网站架构核心技术》概要
《亿级流量网站架构核心技术》目录一览本书暂定名称为《亿级流量网站架构核心技术——跟开涛学搭建高可用高并发系统》,如有好的书名建议欢迎留言,必当重谢。内容已交由出版社编辑,相信很快就会和大家见面。主要内容结构和目录如下所示:第一部分概述高并发原则无状态拆分服务化消息队列数据异构缓存银弹并发化高可用原则降级限流切流量可回...原创 2020-03-24 15:07:23 · 239 阅读 · 0 评论 -
ReentrantLock实现原理分析
原文出处:http://www.yund.tech/zdetail.html?type=1&id=ef94715a2838f06ab03b8621c23d1613 作者:jstarseven 码字挺辛苦的.....ReentrantLock主要利用CAS+CLH队列来实现。它支持公平锁和非公平锁,两者的实现类似。 CAS:Compare and Swap,比...原创 2020-03-21 16:18:41 · 325 阅读 · 0 评论 -
Java高并发之设计模式
原文出处:http://www.yund.tech/zdetail.html?type=1&id=34e52a515cd0e4d120255c90f33396af 作者:jstarseven本文主要讲解几种常见并行模式, 具体目录结构如下图.单例单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的.一般分为懒汉式, 饿汉式....原创 2020-03-21 16:17:57 · 174 阅读 · 0 评论 -
Java高并发之线程池详解
原文出处:http://www.yund.tech/zdetail.html?type=1&id=961cc31f7bb2409f3a401478dc2cc38e 作者:jstarseven线程池优势在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理.例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对象, ...原创 2020-03-21 16:16:02 · 177 阅读 · 0 评论 -
JVM 监控,调优,调试
原文出处:http://www.yund.tech/zdetail.html?type=1&id=0de81780ff8febe3ec05dc36f92fd478 作者:jstarsevenJVM监控工具Java的安装包自带了很多优秀的工具,善用这些工具对于监控和调试Java程序非常有帮助。常用工具如下:jps用途:jps用来查看JVM里面所有进程的具...原创 2020-03-19 09:12:51 · 268 阅读 · 0 评论 -
linux pidstat 命令详解
原文出处:http://www.yund.tech/zdetail.html?type=1&id=79a1236dcaef6ab9fda051ab4a65e4ab作者:jstarsevenpidstat 概述pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的...原创 2020-03-19 09:09:15 · 588 阅读 · 0 评论 -
java实现网页结构分析,网页列表发现
原文出处:http://www.yund.tech/zdetail.html?type=1&id=ee06002e2b83e7677c30aedc52d3429e作者:jstarseven现在的网站千奇百怪,什么样格式的都有,需要提取网页中的列表数据,有时候挨个分析处理很头疼,本文是一个页面结构分析的程序,可以分析处理页面大致列表结构。废话不多说,我也不会说,sho...原创 2020-03-19 09:08:25 · 387 阅读 · 0 评论 -
在Windows环境中安装Neo4j
原文出处:http://www.yund.tech/zdetail.html?type=1&id=dee0403105d7c2585e80f002965c2513作者:jstarseven图形数据库(Graph Database)是NoSQL数据库家族中特殊的存在,用于存储丰富的关系数据,Neo4j 是目前最流行的图形数据库,支持完整的事务,在属性图中,图是由顶点(Vert...原创 2020-03-24 15:17:09 · 204 阅读 · 0 评论 -
图形数据库Neo4j基本了解
原文出处:http://www.yund.tech/zdetail.html?type=1&id=f519df57f29b22863d2a6a79326bd22b 作者:jstarseven在深入学习图形数据库之前,首先理解属性图的基本概念。一个属性图是由顶点(Vertex),边(Edge),标签(Lable),关系类型和属性(Property)组成的有向图。顶点也称作节点(...原创 2020-03-18 20:37:40 · 677 阅读 · 0 评论 -
Neo4j图数据库使用Cypher查询图形数据
原文出处:http://www.yund.tech/zdetail.html?type=1&id=e5a7ca6d4e801e88790cc85b94e1f405 作者:jstarsevenNeo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对领先的地位,拥有众多的用户基数,使得Cypher成为...原创 2020-03-18 20:36:17 · 1534 阅读 · 0 评论