Java
文章平均质量分 74
欢迎关注公众号:程序员追风
程序员追风
欢迎关注公众号:程序员追风,领取一线大厂java面试题资料!
展开
-
B站崩溃的背后,b站高可用架构到底是怎么样的?
前言B站说崩就崩了!流量洪峰下要做好高服务质量的架构是一件具备挑战的事情,本文是B站技术总监毛剑老师在「云加社区沙龙online」的分享整理,详细阐述了从Google SRE的系统方法论以及实际业务的应对过程中出发,一些体系化的可用性设计。对我们了解系统的全貌、上下游的联防有更进一步的帮助。一、负载均衡负载均衡具体分成两个方向,一个是前端负载均衡,另一个是数据中心内部的负载均衡。前端负载均衡方面,一般而言用户流量访问层面主要依据DNS,希望做到最小化用户请求延迟。将用户流量最优地分布在多个网络转载 2021-07-14 02:47:39 · 848 阅读 · 0 评论 -
162天,100期Java项目终于更完了!
第1-10期Java项目整理一款 Java 开源的 Spring Boot 即时通讯 IM 聊天系统Java外卖点餐系统【附全部代码】一个基于spring boot的Java开源商城系统推荐一款开源java版的视频管理系统分享一个在线考试系统,练手项目用他很香一款轻量级,可快速上手的开源后台系统推荐一个基于 SpringBoot2 + MybatisPlus 的商城管理系统SpringBoot库存管理系统,拿来学习真香分享一套开源的监控系统(附源码)推荐一个基于 SpringCloud原创 2021-05-18 20:54:10 · 1565 阅读 · 2 评论 -
推荐一个 Nginx 可视化配置神器
Nginx 是前后端开发工程师必须掌握的神器。该神器有很多使用场景,比如反向代理、负载均衡、动静分离、跨域等等。把 Nginx 下载下来,打开 conf 文件夹的 nginx.conf 文件,Nginx 服务器的基础配置和默认的配置都存放于此。配置是让程序员非常头疼的事,比如 Java 后端框架 SSM ,大量配置文件让不少人头皮发麻,所以才涌现了 Spring Boot 这样能简化配置的框架。如果能够采用可视化的方式对 Nginx 进行配置,那该多好。老逛在 GitHub 上发现了一款可以一键生成原创 2021-05-12 14:03:47 · 919 阅读 · 0 评论 -
通俗解释23种设计模式,一起回顾一下!
原文:zhuanlan.zhihu.com/p/100746724前言设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。设计模式在程序员的面试中会被考到,通常是介绍其原理并说出优缺点,或者对比几个比较相似的模式的异同点。在笔试中可能会出现画出某个设计模式的UML图这样的题。虽说面试中占的比重不大,但并不代表它不重要。恰恰相反,设计模式于程序员而言相当重要,它是转载 2021-03-29 15:28:20 · 703 阅读 · 0 评论 -
1月份2月份GitHub上最热门的23个Java开源项目
1月份和2月份GitHub上最热门的Java开源项目排行已经出炉啦,一起来看看上榜详情1、Signal-AndroidSignal是一种典型的一键式安装应用程序,Signal的主要功能是,在验证您的电话号码并让您独立验证其他Signal用户的身份之后,它可以发送受端到端加密保护的文本,视频,音频和图片消息。你也可以使用它进行一对一或一对多的语音和视频通话,本项目是它的Android版。地址:https://github.com/signalapp/Signal-Android Star 19540关原创 2021-03-15 15:19:49 · 1167 阅读 · 0 评论 -
GitHub 近两万 Star,无需编码,可一键生成前后端代码,这个开源项目有点强!
项目介绍:JeecgBoot 是一款基于代码生成器的低代码开发平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!关于Java项目整理了100+Java项目视频+源码+笔记,地址:100+Java项目视频+源码+笔记JeecgBoot 引领新的低代码开发模式(OnlineCoding-> 代码生成器-> 手工MERGE),原创 2021-02-20 13:55:02 · 1010 阅读 · 0 评论 -
166个最常用的Linux命令,哪些你还不知道?
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心。线上查询及帮助命令(2个)man:查看命令帮助,命令的词典,更复杂的还有info,但不常用。help:查看Linux内置命令的帮助,比如cd命令。文件和目录操作命令(18个)ls:全拼list,功能是列出目录的内容及其内容属性信息。cd:全拼change directory,功能是从当前工作目录切换转载 2020-10-09 19:21:34 · 541 阅读 · 0 评论 -
还不懂Spring Boot启动原理的话,一定要看看!
我们开发任何一个Spring Boot项目,都会用到如下的启动类@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplic转载 2020-08-10 17:25:29 · 851 阅读 · 0 评论 -
IntelliJ IDEA 2020.1 首个稳定版重磅发布!
前言IntelliJ IDEA 2020.1 稳定版来了!这是今年发布的首个重大更新版本,新版本增加了对 Java 14 的支持、为部分 Web 和测试框架添加新功能、为调试器添加数据流分析协助功能(dataflow analysis assistance)、新增 LightEdit 模式,以及支持从 IDE 下载和配置 JDK。下载地址 https://www.jetbrains.com...转载 2020-04-12 21:48:57 · 1903 阅读 · 0 评论 -
IDEA 2020 真的是要本土化,提供简体中文了!
前言上个月 JetBrains 发布了 IntelliJ 平台 2020 年路线图,现在作为 2020 年规划中的另一部分,JetBrains 又发布了基于 IntelliJ 的 IDE 2020 年的功能路线图。前者主要集中在平台的底层功能上,而后者聚焦于更高级别的功能,这些功能将与用户直接交互。本土化去年,JetBrains 网站进行了本地化,提供了 8 种不同的语言版本...转载 2020-03-08 21:49:24 · 1966 阅读 · 0 评论 -
从5个方面让你真正了解Java内存模型
前言首先我们在了解java内存模型之前先看一下计算机内存模型,理解了计算机内存模型的话后面在看JMM就会简单的多。计算机内存计算机是由CPU、主存、磁盘等组成的(简单引出问题熬)我们都知道计算机执行程序的指令都是由CPU来执行的,执行的时候是要处理数据的,这些数据通常存储在主存中。如图所示,这时候问题来了,CPU的执行速度越来越快,然后内存倒是没什么进展,这样的话C...原创 2019-10-13 19:53:44 · 217 阅读 · 0 评论 -
腾讯万亿级 Elasticsearch 技术解密
作者: johngqjiang,腾讯 TEG 云架构平台部研发工程师Elasticsearch(ES)作为开源首选的分布式搜索分析引擎,通过一套系统轻松满足用户的日志实时分析、全文检索、结构化数据分析等多种需求,大幅降低大数据时代挖掘数据价值的成本。腾讯在公司内部丰富的场景中大规模使用 ES,同时联合 Elastic 公司在腾讯云上提供内核增强版的 ES 云服务,大规模、丰富多样的的使用场...转载 2019-12-23 19:25:00 · 3366 阅读 · 1 评论 -
一篇文章让你明白CPU缓存一致性协议MESI
CPU高速缓存(Cache Memory)CPU为何要有高速缓存CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。在CPU访问存储设备时,无论是存取数据抑...原创 2019-12-04 19:22:46 · 1971 阅读 · 1 评论 -
一篇文章带你解读Redis分布式锁的发展史和正确实现方式
前言近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Zookeeper,其中基于Redis的分布式锁的使用更加广泛。但是在工作和网络上看到过各个版本的Redis分布式锁实现,每种实现都有一些不严谨的地方,甚至有可能是错误的实现,包括在代码中,...转载 2019-11-28 12:28:13 · 1828 阅读 · 0 评论 -
一篇文章看清楚JDK13的特性!
1、switch优化更新JDK11以及之前的版本:switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println(6); break; case TUESDAY: System.out.println(7); ...原创 2019-11-27 21:32:18 · 2464 阅读 · 0 评论 -
Java线程池原理与源码详细解读,再也不怕面试问线程池了!
线程“线程池”,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行统一分配、调优和监控。线程池介绍在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数量非常多,但每个线程...原创 2019-11-22 14:04:52 · 4432 阅读 · 9 评论 -
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...原创 2019-11-20 16:02:38 · 16516 阅读 · 8 评论 -
要想深入理解mysql索引?这16个点你必须要了解!
前言MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一...原创 2019-11-19 21:58:01 · 1907 阅读 · 0 评论 -
8种经常被忽视的SQL错误用法,你有没有踩过坑?
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT * FROM operation WHERE type = 'SQLStats' AND name =...原创 2019-11-17 21:48:35 · 1430 阅读 · 0 评论 -
7个点说清楚spring cloud微服务架构
前言spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,spring cloud中各个组件在微服务架构中扮演的角色如下图所示,黑线表示注释说明,蓝线由A指向B,表示B从A处获取服务。spring cloud组成的微服务架构图由上图所示微服务架构大致由上图的逻辑结构组成,其包括各种微服务、注册发现、服务网关、熔断器、统一配置、跟踪服务等。下面说说sprin...原创 2019-11-14 21:29:58 · 1262 阅读 · 0 评论 -
分库分表的5大方案,百度、腾讯、阿里等大厂都在用!
数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。第二种:网...原创 2019-11-13 17:27:31 · 1637 阅读 · 0 评论 -
B树?这篇文章彻底看懂了!
前言索引,相信大多数人已经相当熟悉了,很多人都知道 MySQL 的索引主要以 B+ 树为主,但是要问到为什么用 B+ 树,恐怕很少有人能把前因后果讲述完整。本文就来从头到尾介绍下数据库的索引。索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到...原创 2019-11-12 21:30:13 · 1746 阅读 · 0 评论 -
1篇文章搞清楚8种JVM内存溢出(OOM)的原因和解决方法
前言撸Java的同学,多多少少会碰到内存溢出(OOM)的场景,但造成OOM的原因却是多种多样。堆溢出这种场景最为常见,报错信息:java.lang.OutOfMemoryError: Java heap space原因1、代码中可能存在大对象分配 2、可能存在内存泄露,导致在多次GC之后,还是无法找到一块足够大的内存容纳当前对象。解决方法1、检查是否存在...原创 2019-11-09 21:47:49 · 2407 阅读 · 0 评论 -
每天用Mybatis,但是Mybatis的工作原理你真的知道吗?
前言近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了。核心部件: SqlSession Executor StatementHandler ParameterHandler ResultSetHandler TypeHandler Ma...原创 2019-11-08 19:56:18 · 775 阅读 · 0 评论 -
上次阿里面试问到Redis主从复制原理,这次终于搞明白了!
1.前言Redis单节点存在单点故障,为解决单点问题,需要对Redis节点配置从节点。使用哨兵来监听主节点存活状态,若主节点挂掉,从节点能继续提供缓存功能。从节点怎样和主节点间完成数据传递?就是Redis的主从复制。2. 主从配置及作用临时配置:redis-cli进入redis从节点后,使用 --slaveof [masterIP] [masterPort]永久配置:进入...原创 2019-10-30 19:49:55 · 1155 阅读 · 0 评论 -
Java中Object类常用的12个方法,你用过几个?
前言Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”。Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object 类中的 public 方法。先看下 Object 的类结构(快捷键:alt+7):1. getClass 方法public final native Class<...原创 2019-10-29 20:00:21 · 1449 阅读 · 0 评论 -
Java开发数据库设计的14个技巧,你知道几个?
1. 原始单据与实体之间的关系可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工...原创 2019-10-28 19:44:50 · 803 阅读 · 0 评论 -
Java虚拟机线上问题排查的2个基本操作,你知不知道?
前言对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的。各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题。楼主同样也遇到过这些问题,那么,遇到这些问题该如何解决呢?首先,出现问题,肯定要先定位问题所在,然后分析问题原因,再然后解决问题,最后进行总结,防止下次再次出现。今天的文章,就如我们的题目一样,讲的是基本操作,也就是一些排查线上问题的基本方...原创 2019-10-27 21:48:33 · 292 阅读 · 0 评论 -
4种Java线程池用法以及线程池的作用和优点,你都知道了没?
一、如下方式存在的问题new Thread() { @Override public void run() { // 业务逻辑 }}.start();1、首先频繁的创建、销毁对象是一个很消耗性能的事情;2、如果用户量比较大,导致占用过多的资源,可能会导致我们的服务由于资源不足而宕机;3、综上所述,在实际的开发中,这种操作其实是不可取的一...原创 2019-10-25 13:56:01 · 1395 阅读 · 0 评论 -
首次曝光:大厂都是这样过1024程序员节的,看的我都酸了
转自: A2Data,作者:Jack 风1024 程序猿节日据了解,1024程序员节是中国程序员的共同节日。1024是2的十次方,二进制计数的基本计量单位之一。程序员(英文Programmer)是从事程序开发、维护的专业人员。程序员就像是一个个1024,以最低调、踏实、核心的功能模块搭建起这个科技世界。1G=1024M,而1G与1级谐音,也有一级棒的意思。01来看看,你们公司的...原创 2019-10-24 17:21:23 · 12722 阅读 · 7 评论 -
如果你不了解Java的JVM,那真的很难进BAT一线大厂!
前言对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug。同时,JVM也是面试环节的中重灾区。我们不能为了面试而面试,但是学习会这些核心知识你必定会成为面试与工作中“最亮的一颗星”。思考一下学习一项知识总该知道为什么学习吧。有人会说,这些写代码好像又用不上,貌似所有的事情JVM都替我们做好了。那就,思考一下为什么要学习JVM虚拟机结构...原创 2019-10-18 19:52:33 · 219 阅读 · 0 评论 -
终于有人把分布式事务说清楚了!
前言这篇文章将给大家介绍一下对分布式事务的一些见解,并讲解分布式事务处理框架 TX-LCN 的执行原理,错误之处望各位不吝指正。1. 什么情况下需要使用分布式事务?使用的场景很多,先举一个常见的:在微服务系统中,如果一个业务需要使用到不同的微服务,并且不同的微服务对应不同的数据库。打个比方:电商平台有一个客户下订单的业务逻辑,这个业务逻辑涉及到两个微服务,一个是库存服务(库存...原创 2019-10-17 21:08:10 · 364 阅读 · 0 评论 -
这3个并发编程的核心,你一定要知道!
前言远看并发,并发编程可以抽象成三个核心问题: 分工、同步/协作、互斥如果你已经工作了,那么你一定听说过或者正在应用敏捷开发模式来交付日常的工作任务,我们就用你熟悉的流程来解释这三个核心问题分工将当前 Sprint 的 Story 拆分成「合适」大小的 Task,并且安排给「合适」的 Team Member 去完成这里面用了两个「合适」,将 Story 拆分成大小...原创 2019-10-17 16:24:46 · 182 阅读 · 0 评论 -
Java垃圾回收机制你还不明白?一线大厂面试必问的!
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负责。本文...原创 2019-10-16 19:50:40 · 174 阅读 · 0 评论 -
一文搞清楚Minor GC、Major GC 、Full GC 之间的关系
前言文章要求读者熟悉 JVM 内置的通用垃圾回收原则。堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,代假设和其他不同的 GC 算法超出了本文讨论的范围。Minor GC从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注...原创 2019-10-15 19:39:22 · 401 阅读 · 0 评论 -
深入理解JVM:元空间大小详细解析
前言JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永久代。永久代和元空间保存的数据并不完全一样,永久代中还保存另一些与类的元数据无关的杂项。在Java 7里将字符串常量从永久代移动到了堆区域,但是永久代并没有完全改造完成。直到Java 8,...原创 2019-10-11 20:40:38 · 1213 阅读 · 0 评论 -
面试必问:JVM类加载机制详细解析
前言在Java面试中,简历上有写JVM(Java虚拟机)相关的东西,JVM的类加载机制基本是面试必问的知识点。类的加载和卸载JVM是虚拟机的一种,它的指令集语言是字节码,字节码构成的文件是class文件。平常我们写的Java文件,需要编译为class文件才能交给JVM运行。可以这么说:C语言代码——>二进制文件——>计算机硬件,就相当于Java代码——>字节...原创 2019-10-10 19:46:03 · 308 阅读 · 0 评论 -
5个点彻底搞清楚SpringBoot注解
作者:张伯毅一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration 等同于spring的XML配...原创 2019-10-10 15:16:07 · 266 阅读 · 0 评论 -
8种创建Java线程的方式,你知道几个?
作者:唐彤前言创建线程,是多线程编程中最基本的操作,彤哥总结了一下,大概有8种创建线程的方式,你知道吗?1.继承Thread类并重写run()方法public class CreatingThread01 extends Thread { @Override public void run() { System.out.println(getName() + " ...原创 2019-10-09 19:41:53 · 376 阅读 · 0 评论 -
4个点让你彻底明白Redis的各项功能
前言先看一下Redis是一个什么东西。官方简介解释到:Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它还内建了复制,lua脚本,LR...原创 2019-10-09 14:57:20 · 552 阅读 · 0 评论