杂谈
文章平均质量分 90
Silently9527
公众号:贝塔学JAVA
展开
-
Java从入门到升仙的书单推荐,附带读书笔记
Java从入门到升仙的书单推荐,附带读书笔记我的建议是看书一定要看经典书,刚才开始也可以配合一下简单的视频教程跟着一起学习,但是要提高肯定是看书,然后按照由浅入深的学习线路来学习(Java语言基础->Java语言进阶->分布式&存储->修炼内功)。第一阶段、Java入门书单推荐首先是语言基础,有了扎实的语言基础,才可能写出好的代码。本阶段主要的学习内容:Java的语言基础、代码规范、能够熟练的使用常用的开发工具,对于开发工具的话,我还是强推Intellij IDEA, I原创 2021-09-10 09:57:24 · 666 阅读 · 0 评论 -
阿里二面,你来说说InnoDB行记录存储结构
程序员常用的IDEA插件:https://github.com/silently9527/Toolkit本文已被Github仓库收录 https://github.com/silently9527/ProgrammerNotes前言我们平时在向MySQL数据库表中插入数据时,实际数据是以行记录的格式存储在磁盘上的,本篇我们就一起来详细的了解下MySQL的行记录格式,理解了行记录的格式有助于我们后面了解MySQL如何快速在页中定位出行记录,以及MySQL的版本控制链,事务隔离级别等等,行记录格式是许.原创 2021-08-19 11:30:19 · 128 阅读 · 0 评论 -
图算法系列之计算图中最短路径
吐血整理程序员必读书单:https://github.com/silently9527/ProgrammerBooks微信公众号:贝塔学Java前言在前面两篇中我们通过深度优先搜索可以从图中找出一条通过顶点v到顶点w的路径,但是深度优先搜索与顶点的输入有很大的关系,找出来的路径也不一定是最短的,通常情况下我们很多时候需要找出图中的最短路径,比如:地图功能。这里我们就需要使用到广度优先搜索算法广度优先搜索依然使用之前定义的寻找路径的APIpublic class Paths { Pat.原创 2021-05-10 10:08:07 · 397 阅读 · 0 评论 -
图算法系列之深度优先搜索(二)
吐血整理程序员必读书单:https://github.com/silently9527/ProgrammerBooks微信公众号:贝塔学Java在上篇中我们学习了深度优先搜索,知道了如何通过深度优先搜索在图中寻找路径;本篇我们继续一起来学习深度优先搜索算法的其他应用场景连通分量从一幅图中找出所有的连通分量,这是也是深度优先搜索的一个应用场景。什么是连通分量?这个定义在之前的文章中已有提到《如何检测社交网络中两个人是否是朋友关系(union-find算法)》在这篇采用的是union-find算法.原创 2021-04-28 08:37:53 · 167 阅读 · 0 评论 -
图算法系列之深度优先搜索(一)
吐血整理程序员必读书单:https://github.com/silently9527/ProgrammerBooks微信公众号:贝塔学Java前言在上一篇中我们把图通过邻接表数组表示出来了,这个数据结构将会做我们实现图算法的基础,本篇我们将一起开始学习图算法的第一个搜索算法 - 深度优先搜索搜索API的定义public class Search { Search(Graph graph, int s); boolean marked(int v); int.原创 2021-04-25 08:45:59 · 361 阅读 · 0 评论 -
图算法系列之无向图的数据结构
吐血整理程序员必读书单:https://github.com/silently9527/ProgrammerBooks微信公众号:贝塔学Java前言从本篇开始我们将会一起来学习图相关的算法,图算有很多相当实用算法,比如:垃圾回收器的标记清除算法、地图上求路径的最短距离、拓扑排序等。在开始学习这些算法之前我们需要先来了解下图的基本定义,以及使用哪种数据结构来表示一张图,本篇我们先从无向图开始学习。图的定义图:是有一组顶点和一组能够将两个订单相连组成的。连接两个顶点的边没有方向,这种图称之为无向图.原创 2021-04-19 08:49:03 · 880 阅读 · 0 评论 -
基于拉链式和线性探测式散列表实现Map
程序员必读书单:https://github.com/silently9527/ProgrammerBooks微信公众号:贝塔学Java前言前几篇我们一起学习了基于数组、链表、二叉树、红黑树来实现Map的操作,本篇我们将会一起来学习基于散列表来实现Map,这种方式对应着java里面的HashMap,这也是使用最多的一种方式散列表实现Map主要分为了两个步骤:基于散列函数将被查找键转换为数组的下标处理散列值冲突的情况,有两种方式来处理冲突:拉链式和线性探测散列函数实现散列表的第一步就是.原创 2021-04-13 08:37:43 · 262 阅读 · 0 评论 -
花费一月时间吐血整理程序员必读书单,建议收藏
本文已被Github仓库收录 https://github.com/silently9527/JavaCore完全开源的淘客项目:https://github.com/silently9527/mall-coupons-server微信公众号:贝塔学Java前言工作忙,看书的时间少,如何在有限的时间看有用的书?技术相关的书籍太多,到底应该看哪些书籍?花费一月时间吐血整理Java程序员自我学习的书籍列表,收录书籍尽量都保证同类书籍的豆瓣评分最高,帮助想要入坑Java的同学,根据这个书籍列表.原创 2021-04-08 08:42:35 · 328 阅读 · 0 评论 -
基于二叉树实现Map
程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin微信公众号:贝塔学Java前言在上一篇中我们基于数组和链表实现了Map的相关操作,但是对于数据量稍大的情况下,这两种实现方式效率都比较低,为了改进这个问题,本篇我们将来学习二叉树,并通过二叉树来实现上一篇中定义的Map结构二叉树简介虽然大家都知道二叉树是什么,但是为了保证文章的完整性,这里还是简单说说什么是二叉树二叉树中每个节点都包含了两个指针指向自己的左子树和右子树。.转载 2021-04-05 21:50:37 · 195 阅读 · 0 评论 -
硬核图解红黑树并手写实现
程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin微信公众号:贝塔学Java前言在上一篇中我们通过二叉树作为了Map的实现,最后也分析了该版本的时间复杂度以及最糟糕的情况;本篇我们将会使用红黑树来实现Map,改善上一篇中二叉树版本的不足;对于Map接口的定义以及已经实现的公用方法将不会重复叙述,比如二叉树的查找方法(get);不了解的兄弟请查看上一篇《基于二叉树实现Map》红黑树算是数据结构中比较有难度的知识点,虽然在实际.原创 2021-04-05 21:46:02 · 302 阅读 · 1 评论 -
基于数组或链表实现Map
程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin微信公众号:贝塔学Java前言JAVA中的Map主要就是将一个键和一个值联系起来。虽然JAVA中已经提供了很多Map的实现,为了学习并掌握常用的数据结构,从本篇开始我将自己实现Map的功能,本篇主要是通过数组和链表两种方式实现,之后提供二叉树,红黑树,散列表的版本实现。通过自己手写各个版本的Map实现,掌握每种数据结构的优缺点,可以在实际的工作中根据需要选择适合的Map。M.原创 2021-03-22 08:42:32 · 309 阅读 · 0 评论 -
快速排序算法实现及优化
本文已被Github仓库收录 https://github.com/silently9527/JavaCore程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin完全开源的淘客项目:https://github.com/silently9527/mall-coupons-server微信公众号:贝塔学Java前言快速排序可以说是使用最广的排序算法了,主要的特点是基于原地排序(不需要使用辅助数组,节省空间);其实对于长度为N.原创 2021-03-08 08:47:54 · 186 阅读 · 1 评论 -
死磕归并排序算法
本文已被Github仓库收录 https://github.com/silently9527/JavaCore程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin完全开源的淘客项目:https://github.com/silently9527/mall-coupons-server微信公众号:贝塔学Java前言在上一篇《常见的初级排序算法,这次全搞懂》,主要谈了常用的初级算法,这些算法的时间复杂度都是O(n²),这些算法.原创 2021-03-04 11:20:34 · 114 阅读 · 0 评论 -
常见的初级排序算法,这次全搞懂
本文已被Github仓库收录 https://github.com/silently9527/JavaCore程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin完全开源的淘客项目:https://github.com/silently9527/mall-coupons-server微信公众号:贝塔学Java前言相信所有的程序员刚开始接触到的算法都会是排序算法,因为排序在对数据处理和计算有这重要的地位,排序算法往往是其他算.原创 2021-02-25 12:52:04 · 111 阅读 · 0 评论 -
如何检测社交网络中两个人是否是朋友关系(union-find算法)
本文已被Github仓库收录 https://github.com/silently9527/JavaCore程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin完全开源的淘客项目:https://github.com/silently9527/mall-coupons-server微信公众号:贝塔学Java前言春节放假会了老家,停更了很多天,这是年后连夜肝出来的第一篇文章,先来聊聊春节放假期间发生的事,这次回家遇到了我学.原创 2021-02-22 08:39:00 · 504 阅读 · 0 评论 -
面试的季节到了,老哥确定不来复习下数据结构吗
本文已被Github仓库收录 https://github.com/silently9527/JavaCore程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin完全开源的淘客项目:https://github.com/silently9527/mall-coupons-server微信公众号:贝塔学Java前言在上一次《面试篇》Http协议中,面试官原本想的是http问的差不多了,想要继续问我JAVA相关的一些问题,结果.原创 2021-02-18 08:42:35 · 139 阅读 · 0 评论 -
面试官常问的垃圾回收器,这次全搞懂
本文已被Github仓库收录 https://github.com/silently9527/JavaCore微信公众号:贝塔学Java前言前几天写了一篇《JVM性能调优实战:让你的IntelliJ Idea纵享丝滑》,其中有对GC垃圾回收器的选择尝试,本篇我们就来详细的看看JVM中常见的垃圾回收器有哪些以及每个垃圾回收器的特点,这也是面试的时候经常被问的内容JVM堆内存概览在聊垃圾回收器之前,我们先来看看JVM堆内存的区域划分是怎么样的,看下图因为虚拟机使用的垃圾回收算法是分代收集算法.原创 2021-01-27 08:52:48 · 110 阅读 · 0 评论 -
吐血整理:推荐几款顶级好用的IDEA插件
本文已被Github仓库收录 https://github.com/silently9527/JavaCore微信公众号:贝塔学Java前言“工欲善其事必先利其器” 在实际的开发过程中,灵活的使用好开发工具,将让我们的工作事半功倍。今天给大家推荐几款好用的IDEA插件,写代码也可以“飞起来”美化插件Material Theme UI相亲第一眼也得看眼缘,所以今天推荐的第一款是主题插件,可以让你的idea图标、配置搭配很到位,也可以切换不用的颜色,默认提供了很多的主题供选择,每一种都是狂拽.原创 2021-01-24 22:29:11 · 675 阅读 · 0 评论 -
JVM性能调优实战:让你的IntelliJ Idea纵享丝滑
本文已被Github仓库收录 https://github.com/silently9527/JavaCore微信公众号:贝塔学Java前言在前面整理了一篇关于JVM故障诊断和处理工具,考虑到大部分的Java程序员都使用的时IntelliJ Idea,本篇就使用工具来实战演练对IntelliJ Idea运行速度调优调优前的运行状态原始配置内容要查询idea原始配置文件的路径可以在VisualVM中的概述中查看原始配置内容:-XX:ReservedCodeCacheSize=240m.原创 2021-01-18 21:55:19 · 270 阅读 · 0 评论 -
JVM故障诊断和处理工具
本文已被Github仓库收录 https://github.com/silently9527/JavaCore微信公众号:贝塔学Java前言前几天中午正在和同事最近聊股市较好,这几天每天都可以喝点肉汤,心里还是挺高兴的;正在这个时候收到了线上告警邮件和运维同学的消息,“你们有服务挂了!”,心里一紧,立马打开电脑看来下线上cat监控大盘,发现很多服务都在报错,根据cat上的监控日志很快发现了其中一个服务内存溢出导致其他调用服务也有问题,竟然已经定位到了出问题的服务,那就简单了,没有是重启解决不了的问.原创 2021-01-14 18:49:22 · 232 阅读 · 2 评论 -
一致性Hash算法Java版实现
本文已被Github仓库收录 https://github.com/silently9527/JavaCore微信公众号:贝塔学Java前言在之前写了两篇关于缓存的文章《万字长文聊缓存(上)- http缓存》《万字长文聊缓存(下)- 应用级缓存》,谈到缓存不说一下一致性Hash算法那就是在耍流氓。分布式缓存集群的访问模型现在通常使用Redis来做分布式缓存,下面我们就以Redis为例:假如当前我们系统的业务发展很快,需要缓存的数据很多,所以我们做了一个由三组主从复制的redis组成的高.原创 2021-01-12 20:49:57 · 341 阅读 · 0 评论 -
万字长文聊缓存(下)- 应用级缓存
深入解析SpringMVC核心原理:从手写简易版MVC框架开始(SmartMvc) : https://github.com/silently9527/SmartMvcIDEA多线程文件下载插件: https://github.com/silently9527/FastDownloadIdeaPlugin公众号:贝塔学JAVA摘要在上一篇文章 万字长文聊缓存(上)中,我们主要如何围绕着Http做缓存优化,在后端服务器的应用层同样有很多地方可以做缓存,提高服务的效率;本篇我们就来继续聊聊应用级的缓.原创 2021-01-05 15:56:55 · 191 阅读 · 0 评论 -
万字长文聊缓存(上)
深入解析SpringMVC核心原理:从手写简易版MVC框架开始(SmartMvc) : https://github.com/silently9527/SmartMvcIDEA多线程文件下载插件: https://github.com/silently9527/FastDownloadIdeaPlugin公众号:贝塔学JAVA摘要缓存的目的是为了提高系统的访问速度,让数据更加接近于使用者,通常也是提升性能的常用手段。缓存在生活中其实也是无处不在,比如物流系统,他们基本上在各地都有分仓库,如果本地.原创 2021-01-04 08:39:20 · 143 阅读 · 0 评论 -
修炼码德系列:简化条件表达式
前言与面向过程编程相比,面向对象编程的条件表达式相对来说已经比少了,因为很多的条件行为都可以被多态的机制处理掉;但是有时候我们还是会遇到一些小伙伴写出来的条件表达式和面向过程编程没什么差别,比如我遇到过这段代码:整段代码有三层,每一层还有if-else,本身的这段代码的逻辑就够难以理解了,更加恶心的是这个方法的调用方以及调用的其他方法,同样也是这样的if-else嵌套几层;加之这段代码还有一个很大的问题是传入的参数对象,在内部以及调用的其他方法中被修改多次修改,这样就更难懂了;靠普通人的单核CPU想原创 2020-12-03 08:13:16 · 322 阅读 · 0 评论 -
8张图带你了解大型应用架构演进历程
前言先点赞再观看,要有好习惯几乎所有的大型应用都是从一个小应用开始的,好的互联网产品是慢慢运营出来的,不是一开始就开发好的,所以本篇我们来聊聊应用架构的演进历程。如何打造一个高可用,高性能,易扩展的应用?首先我们了解一下大型应用的特点:高可用:系统需要不间断的提供服务,不能出现单点故障高并发:在大流量的冲击下,系统依然稳定提供服务大数据:应用每天都会产生大量的数据,需要存储和管理好这些数据最简单的架构刚开始应用没有太多访问量,所以只需要一台服务器,这时候的架构如下图:应用程序.原创 2020-12-07 08:24:32 · 947 阅读 · 1 评论