为什么建议不使用 stop 方法停止线程?

2020-07-16
阅读 4 分钟
5k
(2)stop方法会导致代码逻辑不完整stop方法是一种“恶意”的中断,一旦执行stop方法,即终止当前正在运行的线程,不管线程逻辑是否完整,这是非常危险的。看如下的代码:

常用算法复杂度速查表

2020-07-15
阅读 1 分钟
2.2k
复杂度通常会使用大 -O记号来表示,比如快速排序的平均时间复杂度是 O(nlog(n))。虽然我们应该做「理解派」,但是即使每个算法/数据结构都理解了,不时仍有可能忘记具体某个算法/数据结构的复杂度(特别是在最好、最坏和平均情形下的复杂度)。

微服务的数据库设计思路

2020-07-14
阅读 5 分钟
2k
优化服务接口:微服务之间的接口越小越好,最好只有服务调用接口(RPC或消息),没有其他接口。如果微服务不能独享自己的数据库,那么数据库也变成了接口的一部分,这大大拓展了接口范围。

举例说明消息队列应用场景及ActiveMQ、RocketMQ、Kafka等的对比

2020-07-13
阅读 3 分钟
2.2k
生活有时是一马平川的旷野,有时又是起伏不定的山陵,但只要心怀热爱,就可跨越世间山河大海。 在之前的业务中,使用了Kafka和RabbitMQ两种消息队列,这篇文章来做一个总结。 消息队列中间件是分布式系统中重要的组件,主要实现异步消息,应用解耦,流量削峰及消息通讯等功能。 下面举例说明在实际应用中消息队列是如何...

为什么 wait() 方法需要写在 while 里,而不是 if?

2020-07-12
阅读 5 分钟
1.8k
那么问题是为啥这里是 while 而不是 if 呢?这个问题我最开始也想了很久,按理来说已经在 synchronized 块里面了嘛,就不需要了。这个也是我前面一直是这么认为的,直到最近看了一个 Stackoverflow 上的问题才对这个问题有了比较深入的理解。

图解 MySQL 索引:B-树、B+树

2020-07-11
阅读 3 分钟
2.5k
看了很多关于索引的博客,讲的大同小异。但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引….或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等结构,导致在面试的时候答非所问!

Java 中的回调机制

2020-07-10
阅读 7 分钟
1k
程序员的一生,应当这样度过:当他回首往事时,不因测试覆盖不够而悔恨,也不因不写文档而羞耻;这样在他临死的时候,他就能够说:我已经把我的整个生命和全部头发,都献给了这个和平年代最壮丽的事业——为普通人能更好的使用科技改善自己的工作和生活而斗争。

Java 并发和多线程基础合集

2020-07-09
阅读 10 分钟
1.5k
一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:

java 性能优化:35 个小细节提升 java 代码的运行效率

2020-07-08
阅读 9 分钟
2.3k
哪怕路途中有再多的巉岩,有再多的堤坝,有再多的艰险坎坷,河水都流了过来,用柔弱的身躯阐释了生命的线条。而人正是需要河水这样的精神,在时间的沟渠中不管有再多的跌宕起伏。

如何使用 Shiro 权限管理框架?

2020-07-07
阅读 13 分钟
1.8k
要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙。Shiro的应用不依赖任何容器,它也可以在JavaSE下使用。但是最常用的环境还是JavaEE。下面以用户登录为例:1、使用用户的登录信息创建令牌

Spring Boot 应用如何提高服务吞吐量?

2020-07-06
阅读 4 分钟
1.5k
电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤:1、增加pom配置

数据库分库分表之后,如何解决事务问题?

2020-07-05
阅读 2 分钟
8.5k
随着时间和业务的发展,数据库中表的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大。因此,把其中一些大表进行拆分到多个数据库中的多张表中。本篇文章是基于非事务消息的异步确保的方式来完成分库分表中的事务问题。

如何用 Redis 实现延时任务?

2020-07-04
阅读 4 分钟
3.5k
延时任务,顾名思义,就是延迟一段时间后才执行的任务。延时任务的使用还是很广泛的。关于延时任务的实现方式,我知道的就不少 3 种,今天就讲下如何用 redis 实现延时任务。

为什么 StringBuilder 是线程不安全的?

2020-07-03
阅读 4 分钟
1k
相信大多数开发人员都知道StringBuilder不是线程安全的,StringBuffer是线程安全的,至于StringBuilder为什么不安全很多人应该从来没有去想过。

Java 并发编程之 volatile 关键字解析

2020-07-02
阅读 12 分钟
1k
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。

如何设计一个完美的权限管理模块?

2020-07-01
阅读 4 分钟
2.5k
我们比较常见的就是基于角色的访问控制,用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,一个角色拥有多个权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间、角色与权限之间,通常都是多对多的关系。如下图:基于这个,得先了解角色到底是什么?我们可以理解它为一定数量...

Class.forName 和 ClassLoader 到底有啥区别?

2020-06-21
阅读 4 分钟
2.2k
在java中Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字节流”,获取到二进制流后放到JVM中。Class.forName()方法实际上也是调用的ClassLoader来实现的。

进程与线程的区别

2020-06-20
阅读 1 分钟
3.3k
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

单例模式有几种写法?

2020-06-19
阅读 5 分钟
2.8k
“你知道茴香豆的‘茴’字有几种写法吗?”纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和代码风格的同时,还很容易扩展到其他问题。这里讲解几种常用的写法,但切忌生搬硬套。大体可分为4类,下面分别介绍他们的基本形式、变种及特点。

MySQL数据库日常使用规范

2020-06-17
阅读 4 分钟
1.9k
关于MySQL数据库规范,相信大家多少看过一些文档。本篇文章给大家详细分类总结了数据库相关规范,从库表命名设计规范讲起,到索引设计规范,后面又给出SQL编写方面的建议。相信这些规范适用于大多数公司,也希望大家都能按照规范来使用我们的数据库,这样我们的数据库才能发挥出更高的性能。

线程池的内部工作原理

2020-06-15
阅读 3 分钟
5.2k
随着cpu核数越来越多,不可避免的利用多线程技术以充分利用其计算能力。所以,多线程技术是服务端开发人员必须掌握的技术。线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就引入了线程池技术,避免频繁的线程创建和销毁。在Java中有一个Executors工具类,可以为我们创建一个线程池,其本质就是new了一个Th...

Java创建线程的三种方式及对比

2020-06-14
阅读 4 分钟
15.4k
对于你喜欢的事想去做的事,你必须付出百分之一千的努力,你知道这一路可能会有很多困难,会有坚持不下去想要放弃的时候,也有时候,你不一定会得到你想要的结果,但你一定要相信,就算再贫瘠的土地你日日灌溉,总有那么一天会长出花草来的,所以你一定要坚持。

Spring 中接口的 bean 是如何注入的?

2020-06-13
阅读 3 分钟
7.8k
这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么能获取的接口,而且还能调用到实现类的方法,难道这个接口是在什么时候自动注入了进去,且和实现类关联上了?

使用统一处理异常代替 try catch

2020-06-12
阅读 21 分钟
4.5k
我从来不相信什么懒洋洋的自由,我向往的自由是通过勤奋和努力实现的更广阔的人生,那样的自由才是珍贵的、有价值的;我相信一万小时定律,我从来不相信天上掉馅饼的灵感和坐等的成就。做一个自由又自律的人,靠势必实现的决心认真地活着。背景

深入理解 Spring 的事务原理

2020-06-11
阅读 6 分钟
6.1k
Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:

Java8新特性之Lambda表达式

2020-06-10
阅读 6 分钟
1.3k
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。

List 如何一边遍历,一边删除?

2020-06-09
阅读 4 分钟
1.1k
然后满怀信心的去运行,结果竟然抛java.util.ConcurrentModificationException异常了,翻译成中文就是:并发修改异常。是不是很懵,心想这是为什么呢?让我们首先看下上面这段代码生成的字节码,如下所示:由此可以看出,foreach循环在实际执行时,其实使用的是Iterator,使用的核心方法是hasNext()和next()。

点赞功能,到底用 MySQL 还是 Redis ?

2020-06-08
阅读 3 分钟
1.9k
真正聪明的人看似笨拙,其实是不自炫耀;真正有才华的人看似木讷,其实是不露锋芒。 点赞功能是目前app开发基本的功能 今天我们就来聊聊点赞、评论、收藏等这些场景的db数据库设计问题~ 1. 我们先来看看场景的需求: 显示点赞数量 判断用户是否点过赞,用于去重,必须的判断 显示个人点赞列表,一般在用户中心 显示文章...

如何理解System.out.println() ?

2020-06-07
阅读 2 分钟
4.3k
所谓的人生赢家,不在于你在哪里做着什么,而在于你是否拥有强大的内心来支持你追求想要的生活。 如果你能自己读懂System.out.println(),就真正了解了Java面向对象编程的含义 面向对象编程即创建了对象,所有的事情让对象帮亲力亲为(即对象调用方法) {代码...} 首先分析System源码 System就是Java自定义的一个类out源...

MySQL高性能优化规范建议

2020-06-06
阅读 6 分钟
3.8k
好的人生,不是静止的,而是动态的,它不是一个终点,而是一个方向。 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符 临时库表...