Java IO 基础知识总结 流简介 IO 即 Input/Output,输入和输出。数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。数据传输过程类似于水流,因此称为 IO 流。IO 流在 Java 中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。 Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。 - InputStrea11/6/2024
Java IO 模型详解 IO 模型这块确实挺难理解的,需要太多计算机底层知识。写这篇文章用了挺久,就非常希望能把我所知道的讲出来吧!希望朋友们能有收获!为了写这篇文章,还翻看了一下《UNIX 网络编程》这本书,太难了,我滴乖乖!心痛~ _个人能力有限。如果文章有任何需要补充/完善/修改的地方,欢迎在评论区指出,共同进步!_ I/O 一直是很多小伙伴难以理解的一个知识点,这篇文章我会将我所理解的 I/O 讲给你听11/6/2024
Java IO 设计模式总结 这篇文章我们简单来看看我们从 IO 中能够学习到哪些设计模式的应用。 装饰器(Decorator)模式 可以在不改变原有对象的情况下拓展其功能。 装饰器模式通过组合替代继承来扩展原始类的功能,在一些继承关系比较复杂的场景(IO 这一场景各种类的继承关系就比较复杂)更加实用。 对于字节流来说, FilterInputStream (对应输入流)和FilterOutputStream(对应11/6/2024
Java NIO 核心知识总结 在学习 NIO 之前,需要先了解一下计算机 I/O 模型的基础理论知识。还不了解的话,可以参考我写的这篇文章:[Java IO 模型详解](https://javaguide.cn/java/io/io-model.html)。 简介 在传统的 Java I/O 模型(BIO)中,I/O 操作是以阻塞的方式进行的。也就是说,当一个线程执行一个 I/O 操作时,它会被阻塞直到操作完成。这种阻11/6/2024
JDK监控和故障处理工具总结 命令行工具 这些命令在 JDK 安装目录下的 bin 目录下: - jps (JVM Process Status): 类似 UNIX 的 ps 命令。用于查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息; - jstat(JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据; - jinfo (Conf11/6/2024
JVM垃圾回收详解(重点) 如果没有特殊说明,都是针对的是 HotSpot 虚拟机。 > 本文基于《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》进行总结补充。 > 常见面试题: > - 如何判断对象是否死亡(两种方法)。 - 简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。 - 如何判断一个常量是废弃常量 - 如何判断一个类是无用的类 - 垃圾收集有哪些算11/6/2024
JVM线上问题排查和性能调优案例 JVM 线上问题排查和性能调优也是面试常问的一个问题,尤其是社招中大厂的面试。 这篇文章,我会分享一些我看到的相关的案例。 下面是正文。 [一次线上 OOM 问题分析 - 艾小仙 - 2023](https://juejin.cn/post/7205141492264976445) - 现象:线上某个服务有接口非常慢,通过监控链路查看发现,中间的 GAP 时间非常大,实际接口并没有消耗11/6/2024
Java内存区域详解(重点) 如果没有特殊说明,都是针对的是 HotSpot 虚拟机。 > 本文基于《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》进行总结补充。 > 常见面试题: > - 介绍下 Java 内存区域(运行时数据区) - Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) - 对象的访问定位的两种方式(句柄和直接指针两种方式) 对于 Java 程序员来说,在虚拟11/6/2024
大白话带你认识 JVM 来自说出你的愿望吧丷投稿,原文地址:。 如果在文中用词或者理解方面出现问题,欢迎指出。此文旨在提及而不深究,但会尽量效率地把知识点都抛出来 的基本介绍 JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,一种规范。通过在实际的计算机上仿真模拟各类计算机功能实现··· 好,其实抛开这么专业的句子不说,就知道 JVM 其实就类似于一台小电脑运行在 wi11/6/2024
最重要的JVM参数总结 本文由 JavaGuide 翻译自 https://www.baeldung.com/jvm-parameters,并对文章进行了大量的完善补充。 > JDK 版本:1.8 在本篇文章中,你将掌握最常用的 JVM 参数配置。 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以11/6/2024
类加载器详解(重点) 开始介绍类加载器和双亲委派模型之前,简单回顾一下类加载过程。 - 类加载过程:加载->连接->初始化。 - 连接过程又可分为三步:验证->准备->解析。 !类加载过程 加载是类加载过程的第一步,主要完成下面 3 件事情: 1. 通过全类名获取定义此类的二进制字节流 2. 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 3. 在内存中生成一个代表该类的 Class 对象,作为11/6/2024
类加载过程详解 类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段::加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)。其中,验证、准备和解析这三个阶段可以统称为连接(Linking)。 这 7 个阶段的顺序如下11/6/2024
类文件结构详解 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。11/6/2024
BigDecimal 详解 《阿里巴巴 Java 开发手册》中提到:“为了避免精度丢失,可以使用 BigDecimal 来进行浮点数的运算”。 浮点数的运算竟然还会有精度丢失的风险吗?确实会! 示例代码: `java float a = 2.0f - 1.9f; float b = 1.8f - 1.7f; System.out.println(a);// 0.100000024 System.out.printl11/6/2024
Java 语法糖详解 作者:Hollis > 原文: 语法糖是大厂 Java 面试常问的一个知识点。 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理。 **语法糖(Syntactic Sugar)** 也称糖衣语法,是英国计算机学家 Peter.J.Landin 发明的一11/6/2024
Java SPI 机制详解 本文来自 Kingshion 投稿。欢迎更多朋友参与到 JavaGuide 的维护工作,这是一件非常有意义的事情。详细信息请看:[JavaGuide 贡献指南](https://javaguide.cn/javaguide/contribution-guideline.html) 。 在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体11/6/2024
Java 代理模式详解 代理模式 代理模式是一种比较好理解的设计模式。简单来说就是 **我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。** 代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作。 举个例子:新娘找来了自己的姨妈来代替自己处理新郎的提问,新娘收到的提问都11/6/2024
Java 值传递详解 开始之前,我们先来搞懂下面这两个概念: - 形参&实参 - 值传递&引用传递 方法的定义可能会用到 参数(有参的方法),参数在程序语言中分为: - 实参(实际参数,Arguments):用于传递给函数/方法的参数,必须有确定的值。 - 形参(形式参数,Parameters):用于定义函数/方法,接收实参,不需要有确定的值。 `java String hello = "Hello!";11/6/2024
Java 反射机制详解 如果说大家研究过框架的底层原理或者咱们自己写过框架的话,一定对反射这个概念不陌生。 反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。 通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。 像咱们平时大部分时候都是在写业务代码,很少会接触到直接使用反射机制的场景。 但是,这并不代表反射没有用。相反,正是因为反射,你才能这么11/6/2024
Java 序列化详解 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。 简单来说: - 序列化:将数据结构或对象转换成二进制字节流的过程 - 反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程 对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),11/6/2024
Java 魔法类 Unsafe 详解 本文整理完善自下面这两篇优秀的文章: > - [Java 魔法类:Unsafe 应用解析 - 美团技术团队 -2019](https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html) - [Java 双刃剑之 Unsafe 类详解 - 码农参上 - 2021](https://xie.infoq.cn/11/6/2024
final,static,this,super 关键字总结关键字总结 关键字 **final 关键字,意思是最终的、不可修改的,最见不得变化 ,用来修饰类、方法和变量,具有以下特点:** 1. final 修饰的类不能被继承,final 类中的所有成员方法都会被隐式的指定为 final 方法; 2. final 修饰的方法不能被重写; 3. final 修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类11/6/2024
Java基础常见面试题总结(上) 语言有哪些特点? 1. 简单易学; 2. 面向对象(封装,继承,多态); 3. 平台无关性( Java 虚拟机实现平台无关性); 4. 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持); 5. 可靠性(具备异常处理和自动内存管理机制); 6. 安全性(Java 语言本身的设计就提供了多重安全防护11/6/2024
Java基础常见面试题总结(下) **Java 异常类层次结构图概览**:  和 Error 有什么区别? 在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重11/6/2024
Java基础常见面试题总结(中) 两者的主要区别在于解决问题的方式不同: - 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。 - 面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。 另外,面向对象开发的程序一般更易维护、易复用、易扩展。 相关 issue : 面向过程:面向过程性能比面向对象高?? 。 下面是一个求圆的面积和周长的示例,简单分别展示了面向对象和面向过程两种不同的解11/6/2024
泛型&通配符详解 泛型&通配符 相关的面试题为我的知识星球(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](hhttps://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)(点击链接即可查看详细介绍以及获取方法)中。 [《Java 面试指北》](hhttps://javaguide.cn/zhuanlan/java-m11/6/2024
Docker实战 介绍 开始之前,还是简单介绍一下 Docker,更多 Docker 概念介绍可以看前一篇文章[Docker 核心概念总结]。 Docker? 说实话关于 Docker 是什么并不太好说,下面我通过四点向你说明 Docker 到底是个什么东西。 - Docker 是世界领先的软件容器平台,基于 **Go 语言** 进行开发实现。 - Docker 能够自动执行重复性任务,例如搭建和配置开11/6/2024
Docker核心概念总结 **本文只是对 Docker 的概念做了较为详细的介绍,并不涉及一些像 Docker 环境的安装以及 Docker 的一些常见操作和命令。** 认识容器 **Docker 是世界领先的软件容器平台**,所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 - 容器镜像是轻量的、可执行的独11/6/2024
Github实用小技巧总结 我使用 Github 已经有 6 年多了,今天毫无保留地把自己觉得比较有用的 Github 小技巧送给关注 JavaGuide 的各位小伙伴。 Github 简历 & Github 年报 通过 https://resume.github.io/ 这个网站你可以一键生成一个在线的 Github 简历。 当时我参加的校招的时候,个人信息那里就放了一个在线的 Github 简历。我觉得这样会让11/6/2024
Git核心概念总结 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。 有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 许多人习惯用复制整个项目目录的方式来保存11/6/2024
Gradle核心概念总结 这部分内容主要根据 Gradle 官方文档整理,做了对应的删减,主要保留比较重要的部分,不涉及实战,主要是一些重要概念的介绍。 Gradle 这部分内容属于可选内容,可以根据自身需求决定是否学习,目前国内还是使用 Maven 普遍一些。 介绍 Gradle 官方文档是这样介绍的 Gradle 的: Gradle is an open-source [build automation](11/6/2024
Maven最佳实践 本文由 JavaGuide 翻译并完善,原文地址: 。 Maven 是一种广泛使用的 Java 项目构建自动化工具。它简化了构建过程并帮助管理依赖关系,使开发人员的工作更轻松。Maven 详细介绍可以参考我写的这篇 [Maven 核心概念总结]。 这篇文章不会涉及到 Maven 概念的介绍,主要讨论一些最佳实践、建议和技巧,以优化我们在项目中对 Maven 的使用并改善我们的开发体验。 11/6/2024
Maven核心概念总结 这部分内容主要根据 Maven 官方文档整理,做了对应的删减,主要保留比较重要的部分,不涉及实战,主要是一些重要概念的介绍。 介绍 Maven 官方文档是这样介绍的 Maven 的: Apache Maven is a software project management and comprehension tool. Based on the concept of a project11/6/2024
AQS 详解 介绍 AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。  AQS 就是一个抽象类,主要用来构建锁和同步器。 `java public abstract11/6/2024
Atomic 原子类总结 原子类介绍 Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。 所以,所谓原子类说简单点就是具有原子/原子操作特征的类。 并发包 java.util.concurrent 的原子类都存放在java.uti11/6/2024
CompletableFuture 详解 一个接口可能需要调用 N 个其他服务的接口,这在项目开发中还是挺常见的。举个例子:用户请求获取订单信息,可能需要调用用户信息、商品详情、物流信息、商品推荐等接口,最后再汇总数据统一返回。 如果是串行(按顺序依次执行每个任务)执行的话,接口的响应速度会非常慢。考虑到这些接口之间有大部分都是 无前后顺序关联 的,可以 并行执行 ,就比如说调用获取商品详情的时候,可以同时调用获取物流信息。通过并行11/6/2024
JMM(Java 内存模型)详解 JMM(Java 内存模型)主要定义了对于一个共享变量,当另一个线程对这个共享变量执行写操作后,这个线程对这个共享变量的可见性。 要想理解透彻 JMM(Java 内存模型),我们先要从 **CPU 缓存模型和指令重排序** 说起! CPU 缓存模型说起 **为什么要弄一个 CPU 高速缓存呢?** 类比我们开发网站后台系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系11/6/2024
Java 常见并发容器总结 JDK 提供的这些容器大部分在 java.util.concurrent 包中。 - ConcurrentHashMap : 线程安全的 HashMap - CopyOnWriteArrayList : 线程安全的 List,在读多写少的场合性能非常好,远远好于 Vector。 - ConcurrentLinkedQueue : 高效的并发队列,使用链表实现。可以看做一个线程安全的 Link11/6/2024
Java 线程池最佳实践 简单总结一下我了解的使用线程池的时候应该注意的东西,网上似乎还没有专门写这方面的文章。 **线程池必须手动通过 ThreadPoolExecutor 的构造函数来声明,避免使用Executors 类创建线程池,会有 OOM 风险。** Executors 返回线程池对象的弊端如下(后文会详细介绍到): - **FixedThreadPool 和 SingleThreadExecutor11/6/2024
Java 线程池详解 池化技术想必大家已经屡见不鲜了,线程池、数据库连接池、HTTP 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 这篇文章我会详细介绍一下线程池的基本概念以及核心原理。 顾名思义,线程池就是管理一系列线程的资源池,其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。 这里借用《Java 并发编11/6/2024
Java并发常见面试题总结(上) 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 如下图所示,在 Windows 中通过查看任务管理器的方式,我们就可以清楚看到 Windows 当前运行的进11/6/2024
Java并发常见面试题总结(下) 有什么用? 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK 中自带的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。 如果你创建了一个ThreadLo11/6/2024
Java并发常见面试题总结(中) 内存模型) JMM(Java 内存模型)相关的问题比较多,也比较重要,于是我单独抽了一篇文章来总结 JMM 相关的知识点和问题:[JMM(Java 内存模型)详解] 。 关键字 在 Java 中,volatile 关键字可以保证变量的可见性,如果我们将变量声明为 volatile ,这就指示 JVM,这个变量是共享且不稳定的,每次使用它都到主存中进行读取。  **全文共 10000+字,31 张图,这篇文章同样耗费了不少的时间和精力才创作完成,原创不易,请大家点点关注+在看,感谢。** 对于ThreadLocal,大家的第一反应可能是很简单呀,线程的变量副本,每个11/6/2024
乐观锁和悲观锁详解 如果将悲观锁(Pessimistic Lock)和乐观锁(PessimisticLock 或 OptimisticLock)对应到现实生活中来。悲观锁有点像是一位比较悲观(也可以说是未雨绸缪)的人,总是会假设最坏的情况,避免出现问题。乐观锁有点像是一位比较乐观的人,总是会假设最好的情况,在要出现问题之前快速解决问题。 在程序世界中,乐观锁和悲观锁的最终目的都是为了保证线程安全,避免在并发场景11/6/2024
从ReentrantLock的实现看AQS的原理及应用 本文转载自: > 作者:美团技术团队 Java 中的大部分同步类(Semaphore、ReentrantLock 等)都是基于 AbstractQueuedSynchronizer(简称为 AQS)实现的。AQS 是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。 本文会从应用层逐渐深入到原理层,并通过 ReentrantLock 的基本特性和 ReentrantL11/6/2024
虚拟线程极简入门 本文部分内容来自 Lorin 的PR。 虚拟线程在 Java 21 正式发布,这是一项重量级的更新。 虚拟线程(Virtual Thread)是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process,LWP),由 JVM 调度。许多虚拟线程共享同一个操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量。 在引入虚拟线程之前,java.lang.Threa11/6/2024
Java 优质开源大数据项目 - Spark :Spark 是用于大规模数据处理的统一分析引擎。 - **[Flink](https://github.com/apache/flink "flink")**:Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 - HBase:HBase – Hadoo11/6/2024
Java 优质开源实战项目 - Snowy:国内首个国密前后端分离快速开发平台。详细介绍:5.1k!这是我见过最强的前后端分离快速开发脚手架!!。 - eladmin : 前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。 - RuoYi:RuoYi 一款基于基于 SpringBoot 的权限管理系统 易读易懂、界面简洁美观,直11/6/2024
Java 优质开源工具类 - lombok :使用 Lombok 我们可以简化我们的 Java 代码,比如使用它之后我们通过注释就可以实现 getter/setter、equals 等方法。 - [guava](https://github.com/google/guava "guava"):Guava 是一组核心库,其中包括新的集合类型(例如 multimap 和 multiset),不可变集合,图形库以及用于并发11/6/2024
Java 优质开源开发工具 - Maven:一个软件项目管理和理解工具。基于项目对象模型 (Project Object Model,POM) 的概念,Maven 可以从一条中心信息管理项目的构建、报告和文档。详细介绍:[Maven 核心概念总结](https://javaguide.cn/tools/maven/maven-core-concepts.html)。 - Gradle :一个开源的构建自动化工具,它足够11/6/2024
Java 优质开源技术教程 - [JavaGuide](https://github.com/Snailclimb/JavaGuide "JavaGuide") :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。 - toBeBetterJavaer:一份通俗易懂、风趣幽默的 Java 学习指南,内容涵盖 Java 基础、Java 集合框架、Java 并发编程、JVM、Java 企业11/6/2024
Java 优质开源机器学习项目 - Deeplearning4j:Deeplearning4j 是第一个为 Java 和 Scala 编写的商业级,开源,分布式深度学习库。 - Smile:基于 Java 和 Scala 的机器学习库。 相关阅读:[Java 能用于机器学习和数据科学吗?-InfoQ](11/6/2024
Java 优质开源系统设计项目 框架 - [Spring Boot](https://github.com/spring-projects/spring-boot "spring-boot"):Spring Boot 可以轻松创建独立的生产级基于 Spring 的应用程序,内置 web 服务器让你可以像运行普通 Java 程序一样运行项 目。另外,大部分 Spring Boot 项目只需要少量的配置即可,这有别于 Spr11/6/2024
Java 开源项目精选 精选 GitHub 和 Gitee 上优质的 Java 开源项目。 灵感来源于awesome-java 这个项目,可以看作是这个项目的中文本土版本,项目类型更全面且加入了更多中文开源项目。 欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-java/issues)推荐自己认可的 Java 开源项目,让我们共同维护一个优质的11/6/2024
Java 10 新特性概览 **Java 10** 发布于 2018 年 3 月 20 日,最知名的特性应该是 var 关键字(局部变量类型推断)的引入了,其他还有垃圾收集器改善、GC 改进、性能提升、线程管控等一批新特性。 概览(精选了一部分): - [JEP 286:局部变量类型推断](https://openjdk.java.net/jeps/286) - [JEP 304:垃圾回收器接口](https://o11/6/2024
Java 11 新特性概览 **Java 11** 于 2018 年 9 月 25 日正式发布,这是很重要的一个版本!Java 11 和 2017 年 9 月份发布的 Java 9 以及 2018 年 3 月份发布的 Java 10 相比,其最大的区别就是:在长期支持(Long-Term-Support)方面,**Oracle 表示会对 Java 11 提供大力支持,这一支持将会持续至 2026 年 9 月。这是据 Ja11/6/2024
Java 12 & 13 新特性概览 增强 Java 12 增加了两个的字符串处理方法,如以下所示。 indent() 方法可以实现字符串缩进。 `java String text = "Java"; // 缩进 4 格 text = text.indent(4); System.out.println(text); text = text.indent(-10); System.out.println(text); ` 11/6/2024
Java 14 & 15 新特性概览 通过 JVM 参数中添加-XX:+ShowCodeDetailsInExceptionMessages,可以在空指针异常中获取更为详细的调用信息,更快的定位和解决问题。 `java a.b.c.i = 99; // 假设这段代码会发生空指针 ` Java 14 之前: `java Exception in thread "main" java.lang.NullPointerExce11/6/2024
Java 16 新特性概览 Java 16 在 2021 年 3 月 16 日正式发布,非长期支持(LTS)版本。 相关阅读:[OpenJDK Java 16 文档](https://openjdk.java.net/projects/jdk/16/) 。 338:向量 API(第一次孵化) 向量(Vector) API 最初由 [JEP 338](https://openjdk.java.net/jeps/33811/6/2024
Java 17 新特性概览(重要) Java 17 在 2021 年 9 月 14 日正式发布,是一个长期支持(LTS)版本。 下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线。可以看得到,Java 17 最多可以支持到 2029 年 9 月份。 ](https://openjdk.java.net/jeps/400) - [JEP 408:Simple Web Server(简易的 Web 服务器)](https://openjdk.11/6/2024
Java 19 新特性概览 JDK 19 定于 2022 年 9 月 20 日正式发布以供生产使用,非长期支持版本。不过,JDK 19 中有一些比较重要的新特性值得关注。 JDK 19 只有 7 个新特性: - [JEP 405: Record Patterns(记录模式)](https://openjdk.org/jeps/405)(预览) - [JEP 422: Linux/RISC-V Port](https:11/6/2024
Java 20 新特性概览 JDK 20 于 2023 年 3 月 21 日发布,非长期支持版本。 根据开发计划,下一个 LTS 版本就是将于 2023 年 9 月发布的 JDK 21。  JDK 20 只有 7 个新特性: - [JEP 429:Scoped Values11/6/2024
Java 21 新特性概览(重要) JDK 21 于 2023 年 9 月 19 日 发布,这是一个非常重要的版本,里程碑式。 JDK21 是 LTS(长期支持版),至此为止,目前有 JDK8、JDK11、JDK17 和 JDK21 这四个长期支持版了。 JDK 21 共有 15 个新特性,这篇文章会挑选其中较为重要的一些新特性进行详细介绍: - [JEP 430:String Templates(字符串模板)](http11/6/2024
Java 9 新特性概览 **Java 9** 发布于 2017 年 9 月 21 日 。作为 Java 8 之后 3 年半才发布的新版本,Java 9 带来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如集合、Stream 流……。 你可以在 [Archived OpenJDK General-Availability Releases](http://jdk.java.net/arc11/6/2024
Java8 新特性实战 本文来自cowbi的投稿~ Oracle 于 2014 发布了 Java8(jdk1.8),诸多原因使它成为目前市场上使用最多的 jdk 版本。虽然发布距今已将近 7 年,但很多程序员对其新特性还是不够了解,尤其是用惯了 Java8 之前版本的老程序员,比如我。 为了不脱离队伍太远,还是有必要对这些新特性做一些总结梳理。它较 jdk.7 有很多变化或者说是优化,比如 interface 里11/6/2024
《Java8 指南》中文翻译指南》中文翻译 随着 Java 8 的普及度越来越高,很多人都提到面试中关于 Java 8 也是非常常问的知识点。应各位要求和需要,我打算对这部分知识做一个总结。本来准备自己总结的,后面看到 GitHub 上有一个相关的仓库,地址: https://github.com/winterbe/java8-tutorial。这个仓库是英文的,我对其进行了翻译并添加和修改了部分内容,下面是正文。 --11/6/2024
RestFul API 简明教程  这篇文章简单聊聊后端程序员必备的 RESTful API 相关的知识。 开始正式介绍 RESTful API 之前,我们需要首先搞清:**API 到底是什么?** API?  学习重构必看的一本神书《重构:改善代码既有设计》从两个角度给出了重构的定义: - 重构(名词):对软件内部结构的一种调整,目的是在不改变软件可11/6/2024
单元测试到底是什么?应该怎么做? 本文重构完善自[谈谈为什么写单元测试 - 键盘男 - 2016](https://www.jianshu.com/p/fa41fb80d2b8)这篇文章。 维基百科是这样介绍单元测试的: 在计算机编程中,单元测试(Unit Testing)是针对程序模块(软件设计的最小单位)进行的正确性检验测试工作。 > 程序单元是应用的 最小可测试部件 。在过程化编程中,一个单元就是单个程序、函数、过11/6/2024
软件工程简明教程 大部分软件开发从业者,都会忽略软件开发中的一些最基础、最底层的一些概念。但是,这些软件开发的概念对于软件开发来说非常重要,就像是软件开发的基石一样。这也是我写这篇文章的原因。 1968 年 NATO(北大西洋公约组织)提出了软件危机(**Software crisis)一词。同年,为了解决软件危机问题,“软件工程**”的概念诞生了。一门叫做软件工程的学科也就应运而生。 随着时间的推移,软11/6/2024
Servlet 总结总结 在 Java Web 程序中,Servlet主要负责接收用户请求 HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet 可以设置初始化参数,供 Servlet 内部使用。一个 Servlet 类只会有一个实例,在它初始化时调用init()方法,销毁时调用destroy()方法。Ser11/6/2024
Java 定时任务详解 我们来看一下几个非常常见的业务场景: 1. 某系统凌晨 1 点要进行数据备份。 2. 某电商平台,用户下单半个小时未支付的情况下需要自动取消订单。 3. 某媒体聚合平台,每 10 分钟动态抓取某某网站的数据为自己所用。 4. 某博客平台,支持定时发送文章。 5. 某基金平台,每晚定时计算用户当日收益情况并推送给用户最新的数据。 6. …… 这些场景往往都要求我们在某个特定的时间去做某个事11/6/2024
Web 实时消息推送详解 原文地址: 对本文进行了完善总结。 我有一个朋友做了一个小破站,现在要实现一个站内信 Web 消息推送的功能,对,就是下图这个小红点,一个很常用的功能。  不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现。 11/6/2024
MyBatis常见面试题总结 本篇文章由 JavaGuide 收集自网络,原出处不明。 > 比起这些枯燥的面试题,我更建议你看看文末推荐的 MyBatis 优质好文。 和 \${} 的区别是什么? 注:这道题是面试官面试我同事的。 答: - ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如\${driver}会被静态替换为`com.mysql.jd11/6/2024
JWT 基础概念详解 JWT? JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。 JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。11/6/2024
JWT 身份认证优缺点分析 在 [JWT 基本概念详解](https://javaguide.cn/system-design/security/jwt-intro.html)这篇文章中,我介绍了: - 什么是 JWT? - JWT 由哪些部分组成? - 如何基于 JWT 进行身份验证? - JWT 如何防止 Token 被篡改? - 如何加强 JWT 的安全性? 这篇文章,我们一起探讨一下 JWT 身份认证的优缺点11/6/2024
SSO 单点登录详解 本文授权转载自: 作者:ken.io 介绍 SSO? SSO 英文全称 Single Sign On,单点登录。SSO 是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 例如你登录网易账号中心( )之后访问以下站点都是登录状态。 - 网易直播 https://v.163.com - 网易博客 https://blog.163.com - 网易花田 https:11/6/2024
常见加密算法总结 加密算法是一种用数学方法对数据进行变换的技术,目的是保护数据的安全,防止被未经授权的人读取或修改。加密算法可以分为三大类:对称加密算法、非对称加密算法和哈希算法(也叫摘要算法)。 日常开发中常见的需要用到的加密算法的场景: 1. 保存在数据库中的密码需要加盐之后使用哈希算法(比如 BCrypt)进行加密。 2. 保存在数据库中的银行卡号、身份号这类敏感数据需要使用对称加密算法(比如 AES11/6/2024
敏感词过滤方案总结 系统需要对用户输入的文本进行敏感词过滤如色情、政治、暴力相关的词汇。 敏感词过滤用的使用比较多的 **Trie 树算法** 和 **DFA 算法**。 树 **Trie 树** 也称为字典树、单词查找树,哈系树的一种变种,通常被用于字符串匹配,用来解决在一组字符串集合中快速查找某个字符串的问题。像浏览器搜索的关键词提示一般就是基于 Trie 树来做的。 。 数据脱敏百度百科中是这样定义的: 数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。在涉及客户11/6/2024
权限系统设计详解 作者:转转技术团队 > 原文: 转转公司在过去并没有一个统一的权限管理系统,权限管理由各业务自行研发或是使用其他业务的权限系统,权限管理的不统一带来了不少问题: 1. 各业务重复造轮子,维护成本高 2. 各系统只解决部分场景问题,方案不够通用,新项目选型时没有可靠的权限管理方案 3. 缺乏统一的日志管理与审批流程,在授权信息追溯上十分困难 基于上述问题,去年底公司启动建设转转统一权11/6/2024
认证授权基础概念详解 (Authentication) 和授权 (Authorization)的区别是什么? 这是一个绝大多数人都会混淆的问题。首先先从读音上来认识这两个名词,很多人都会把它俩的读音搞混,所以我建议你先先去查一查这两个单词到底该怎么读,他们的具体含义是什么。 说简单点就是: - **认证 (Authentication):** 你是谁。 - **授权 (Authorization):** 你有11/6/2024
IoC & AOP详解(快速搞懂) 这篇文章会从下面从以下几个问题展开对 IoC & AOP 的解释 - 什么是 IoC? - IoC 解决了什么问题? - IoC 和 DI 的区别? - 什么是 AOP? - AOP 解决了什么问题? - AOP 的应用场景有哪些? - AOP 为什么叫做切面编程? - AOP 实现方式有哪些? 首先声明:IoC & AOP 不是 Spring 提出来的,它们在 Spring 之前其实已经11/6/2024
Spring 中的设计模式详解 “JDK 中用到了哪些设计模式? Spring 中用到了哪些设计模式? ”这两个问题,在面试中比较常见。 我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下。 由于我的个人能力有限,文中如有任何错误各位都可以指出。另外,文章篇幅有限,对于设计模式以及一些源码的解读我只是一笔带过,这篇文章的主要目的是回顾一下 Spr11/6/2024
Spring 事务详解 前段时间答应读者的 **Spring 事务** 分析总结终于来了。这部分内容比较重要,不论是对于工作还是面试,但是网上比较好的参考资料比较少。 事务是逻辑上的一组操作,要么都执行,要么都不执行。 相信大家应该都能背上面这句话了,下面我结合我们日常的真实开发来谈一谈。 我们系统的每个业务方法可能包括了多个原子性的数据库操作,比如下面的 savePerson() 方法中就有两个原子性的数据11/6/2024
Spring&SpringBoot常用注解总结 可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个注解我都说了具体用法,掌握搞懂,使用 SpringBoot 来开发项目基本没啥大问题了! 为什么要写这篇文章? 最近看到网上有一篇关于 SpringBoot 常用注解的文章被转载的比较多,我看了文章内容之后属实觉得质量有点低,并且有点会误导没有太多实际使用经11/6/2024
SpringBoot 自动装配原理详解 作者:Miki-byte-1024 & Snailclimb 每次问到 Spring Boot, 面试官非常喜欢问这个问题:“讲述一下 SpringBoot 自动装配原理?”。 我觉得我们可以从以下几个方面回答: 1. 什么是 SpringBoot 自动装配? 2. SpringBoot 是如何实现自动装配的?如何实现按需加载? 3. 如何实现一个 Starter? 篇幅问题,这篇文章11/6/2024
Spring常见面试题总结 这篇文章主要是想通过一些问题,加深大家对于 Spring 的理解,所以不会涉及太多的代码! 下面的很多问题我自己在使用 Spring 的过程中也并没有注意,自己也是临时查阅了很多资料和书籍补上的。网上也有一些很多关于 Spring 常见问题/面试题整理的文章,我感觉大部分都是互相 copy,而且很多问题也不是很好,有些回答也存在问题。所以,自己花了一周的业余时间整理了一下,希望对大家有帮11/6/2024
DelayQueue 源码分析 简介 DelayQueue 是 JUC 包(java.util.concurrent)为我们提供的延迟队列,用于实现延时任务比如订单下单 15 分钟未支付直接取消。它是 BlockingQueue 的一种,底层是一个基于 PriorityQueue 实现的一个无界队列,是线程安全的。关于PriorityQueue可以参考笔者编写的这篇文章:[PriorityQueue 源码分析]。  和 Hashtable 的区别 - 线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!); - 效率: 因为线程安全的问题,HashMap 要比 Hashtable 效率高一点。另外,Hashtable 11/6/2024
LinkedHashMap 源码分析 简介 LinkedHashMap 是 Java 提供的一个集合类,它继承自 HashMap,并在 HashMap 基础上维护一条双向链表,使得具备如下特性: 1. 支持遍历时会按照插入顺序有序进行迭代。 2. 支持按照元素访问顺序排序,适用于封装 LRU 缓存工具。 3. 因为内部使用双向链表维护各个节点,所以遍历时的效率和元素个数成正比,相较于和容量成正比的 HashMap 来说,迭代效11/6/2024
LinkedList 源码分析 简介 LinkedList 是一个基于双向链表实现的集合类,经常被拿来和 ArrayList 做比较。关于 LinkedList 和ArrayList的详细对比,我们 [Java 集合常见面试题总结(上)]有详细介绍到。 !双向链表 不过,我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且,性11/6/2024
PriorityQueue 源码分析(付费) **PriorityQueue 源码分析** 为我的知识星球(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 必读源码系列》](https://javaguide.cn/zhuanlan/source-code-reading.html)中。 **  《Head First Java》这本书的内容很轻松有趣,可以说11/6/2024
分布式必读经典书籍  《深入理解分布式系统》 是今年 3 月份刚出的一本分布式中文原创书籍,主要讲的是分布式领域的基本概念、常见挑战以及共识算法。 作者用了大量篇幅来介绍分布式领域中非常重要的共识算法,并且还会基于 Go 语言带着11/6/2024
搜索引擎必读经典书籍 Elasticsearch 在 Apache Lucene 的基础上开发而成,学习 ES 之前,建议简单了解一下 Lucene 的相关概念。 **[《Lucene 实战》](https://book.douban.com/subject/6440615/)** 是国内为数不多的中文版本讲 Lucene 的书籍,适合用来学习和了解 Lucene 相关的概念和常见操作。 !《Lucene实战11/6/2024
数据库必读经典书籍 数据库基础这块,如果你觉得书籍比较枯燥,自己坚持不下来的话,我推荐你可以先看看一些不错的视频,北京师范大学的《数据库系统原理》、哈尔滨工业大学的《数据库系统(下):管理与技术》就很不错。 《数据库系统原理》这个课程的老师讲的非常详细,而且每一小节的作业设计的也与所讲知识很贴合,后面还有很多配套实验。 和操作系统的高速缓存就很像。CPU 中的高速缓存有很多种,11/6/2024
软件质量必读经典书籍 下面推荐都是我看过并且我觉得值得推荐的书籍。 不过,这些书籍都比较偏理论,只能帮助你建立一个写优秀代码的意识标准。 如果你想要编写更高质量的代码、更高质量的软件,还是应该多去看优秀的源码,多去学习优秀的代码实践。 《重构》  必看书籍!无需多言。编程书11/6/2024
从毕业到入职半年的感受如果大家看过我之前的介绍的话,就会知道我是 19 年毕业的几百万应届毕业生中的一员。这篇文章主要讲了一下我入职大半年的感受,文中有很多自己的主观感受,如果你们有任何不认同的地方都可以直接在评论区说出来,会很尊重其他人的想法。 简单说一下自己的情况吧!我目前是在一家外企,每天的工作和大部分人一样就是做开发。毕业到现在,差不多也算是工作半年多了,也已经过了公司 6 个月的试用期。目前在公司做过两个偏11/6/2024
入职培训一个月后的感受 不知不觉已经入职一个多月了,在入职之前我没有在某个公司实习过或者工作过,所以很多东西刚入职工作的我来说还是比较新颖的。学校到职场的转变,带来了角色的转变,其中的差别因人而异。对我而言,在学校的时候课堂上老师课堂上教的东西,自己会根据自己的兴趣选择性接受,甚至很多课程你不想去上的话,还可以逃掉。到了公司就不一样了,公司要求你会的技能你不得不学,除非你不想干了。在学校的时候大部分人编程的目的都是为11/6/2024
我曾经也是网瘾少年这篇文章写入 2021 年高考前夕。 聊到高考,无数人都似乎有很多话说。今天就假借高考的名义,简单来聊聊我的高中求学经历吧! 说实话,我自己的高中求学经历真的还不算平淡,甚至有点魔幻,所以还是有很多话想要说的。 这篇文章大概会从我的初中一直介绍到高中,每一部分我都不会花太多篇幅,就简单聊聊吧! 以下所有内容皆是事实,没有任何夸大的地方,稍微有一点点魔幻。 最开始接触电脑是在我刚上五年级11/6/2024
API网关基础知识总结 微服务背景下,一个系统被拆分为多个服务,但是像安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。 !网关示意图 一般情况下,网关可以为我们提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、降级熔断、日志、监控、参数校验、协议转换等功能。 上面介绍了这么多11/6/2024
Spring Cloud Gateway常见问题总结 本文重构完善自[6000 字 | 16 图 | 深入理解 Spring Cloud Gateway 的原理 - 悟空聊架构](https://mp.weixin.qq.com/s/XjFYsP1IUqNzWqXZdJn-Aw)这篇文章。 Spring Cloud Gateway? Spring Cloud Gateway 属于 Spring Cloud 生态系统中的网关,其诞生的目标是为了11/6/2024
Dubbo常见问题总结 - Dubbo3 已经发布,这篇文章是基于 Dubbo2 写的。Dubbo3 基于 Dubbo2 演进而来,在保持原有核心功能特性的同时, Dubbo3 在易用性、超大规模微服务实践、云原生基础设施适配、安全设计等几大方向上进行了全面升级。 - 本文中的很多链接已经失效,主要原因是因为 Dubbo 官方文档进行了修改导致 URL 失效。 这篇文章是我根据官方文档以及自己平时的使用情况,11/6/2024
RPC基础知识总结 这篇文章会简单介绍一下 RPC 相关的基础概念。 是什么? **RPC(Remote Procedure Call)** 即远程过程调用,通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 **为什么要 RPC ?** 因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以,需要通过网络编程才能传递方法调用所需要的参数。并且,方法调用的结果也需要通过网络编程来接收。但是11/6/2024
有了 HTTP 协议,为什么还要有 RPC ? 本文来自[小白 debug](https://juejin.cn/user/4001878057422087)投稿,原文: 。 我想起了我刚工作的时候,第一次接触 RPC 协议,当时就很懵,我 HTTP 协议用的好好的,为什么还要用 RPC 协议? 于是就到网上去搜。 不少解释显得非常官方,我相信大家在各种平台上也都看到过,解释了又好像没解释,都在用一个我们不认识的概念去解释另外一个我们11/6/2024
分布式ID介绍&实现方案总结 ID 介绍 ID? 日常开发中,我们需要对系统中的各种数据使用 ID 唯一表示,比如用户 ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID 对应且仅对应一个订单。 我们现实生活中也有各种 ID,比如身份证 ID 对应且仅对应一个人、地址 ID 对应且仅对应 简单来说,**ID 就是数据的唯一标识**。 ID? 分布式 ID 是分布式系统下的 ID。分布式 ID11/6/2024
分布式ID设计指南 看到百度 Geek 说的一篇结合具体场景聊分布式 ID 设计的文章,感觉挺不错的。于是,我将这篇文章的部分内容整理到了这里。原文传送门:[分布式 ID 生成服务的技术原理和项目实战](https://mp.weixin.qq.com/s/bFDLb6U6EgI-DvCdLTq_QA) 。 网上绝大多数的分布式 ID 生成服务,一般着重于技术原理剖析,很少见到根据具体的业务场景去选型 I11/6/2024
ZooKeeper 实战 这篇文章简单给演示一下 ZooKeeper 常见命令的使用以及 ZooKeeper Java 客户端 Curator 的基本使用。介绍到的内容都是最基本的操作,能满足日常工作的基本需要。 如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步! 安装 Docker 安装 zookeeper **a.使用 Docker 下载 ZooKeeper** `shell docker 11/6/2024
ZooKeeper相关概念总结(入门) 相信大家对 ZooKeeper 应该不算陌生。但是你真的了解 ZooKeeper 到底有啥用不?如果别人/面试官让你给他讲讲对于 ZooKeeper 的认识,你能回答到什么地步呢? 拿我自己来说吧!我本人在大学曾经使用 Dubbo 来做分布式项目的时候,使用了 ZooKeeper 作为注册中心。为了保证分布式系统能够同步访问某个资源,我还使用 ZooKeeper 做过分布式锁。另外,我在学习11/6/2024
ZooKeeper相关概念总结(进阶) FrancisQ 投稿。 ZooKeeper ZooKeeper 由 Yahoo 开发,后来捐赠给了 Apache ,现已成为 Apache 顶级项目。ZooKeeper 是一个开源的分布式应用程序协调服务器,其为分布式系统提供一致性服务。其一致性是通过基于 Paxos 算法的 ZAB 协议完成的。其主要功能包括:配置维护、分布式同步、集群管理、分布式事务等。 简单来说, ZooKeep11/6/2024
分布式锁介绍 网上有很多分布式锁相关的文章,写了一个相对简洁易懂的版本,针对面试和工作应该够用了。 这篇文章我们先介绍一下分布式锁的基本概念。 在多线程环境中,如果多个线程同时访问共享资源(例如商品库存、外卖订单),会发生数据竞争,可能会导致出现脏数据或者系统问题,威胁到程序的正常运行。 举个例子,假设现在有 100 个用户参与某个限时秒杀活动,每位用户限购 1 件商品,且商品的数量只有 3 个11/6/2024
分布式锁常见实现方案总结 通常情况下,我们一般会选择基于 Redis 或者 ZooKeeper 实现分布式锁,Redis 用的要更多一点,我这里也先以 Redis 为例介绍分布式锁的实现。 Redis 实现分布式锁 Redis 实现一个最简易的分布式锁? 不论是本地锁还是分布式锁,核心都在于“互斥”。 在 Redis 中, SETNX 命令是可以帮助我们实现互斥。SETNX 即 SET if Not eXi11/6/2024
CAP & BASE理论详解 经历过技术面试的小伙伴想必对 CAP & BASE 这个两个理论已经再熟悉不过了! 我当年参加面试的时候,不夸张地说,只要问到分布式相关的内容,面试官几乎是必定会问这两个分布式相关的理论。一是因为这两个分布式基础理论是学习分布式知识的必备前置基础,二是因为很多面试官自己比较熟悉这两个理论(方便提问)。 我们非常有必要将这两个理论搞懂,并且能够用自己的理解给别人讲出来。 理论 [CAP 11/6/2024
Gossip 协议详解 在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时共享最新信息给其他所有节点,比较适合中心化系统。这种方法的缺陷也很明显,节点多的时候不光同步消息的效率低,还太依赖与中心节点,存在单点风险问题。 于是,分散式发散消息 的 **Gossip 协议** 就诞生了。 协议介绍 Gossip 直译过来就是闲话11/6/2024
Paxos 算法详解 Paxos 算法是 Leslie Lamport(莱斯利·兰伯特)在 1990 年提出了一种分布式系统 共识 算法。这也是第一个被证明完备的共识算法(前提是不存在拜占庭将军问题,也就是没有恶意节点)。 为了介绍 Paxos 算法,兰伯特专门写了一篇幽默风趣的论文。在这篇论文中,他虚拟了一个叫做 Paxos 的希腊城邦来更形象化地介绍 Paxos 算法。 不过,审稿人并不认可这篇论文的幽默11/6/2024
Raft 算法详解 本文由 SnailClimb 和 Xieqijun 共同完成。 背景 当今的数据中心和应用程序在高度动态的环境中运行,为了应对高度动态的环境,它们通过额外的服务器进行横向扩展,并且根据需求进行扩展和收缩。同时,服务器和网络故障也很常见。 因此,系统必须在正常操作期间处理服务器的上下线。它们必须对变故做出反应并在几秒钟内自动适应;对客户来说的话,明显的中断通常是不可接受的。 幸运的是,分11/6/2024
NoSQL基础知识总结 是什么? NoSQL(Not Only SQL 的缩写)泛指非关系型的数据库,主要针对的是键值、文档以及图形类型数据存储。并且,NoSQL 数据库天生支持分布式,数据冗余和数据分片等特性,旨在提供可扩展的高可用高性能数据存储解决方案。 一个常见的误解是 NoSQL 数据库或非关系型数据库不能很好地存储关系型数据。NoSQL 数据库可以存储关系型数据—它们与关系型数据库的存储方式不同。 N11/6/2024
MongoDB常见面试题总结(上) 少部分内容参考了 MongoDB 官方文档的描述,在此说明一下。 基础 是什么? MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常流行的 文档类型数据库 。 在高负载的情况下,MongoDB 天然支持水平扩11/6/2024
MongoDB常见面试题总结(下) 索引 索引有什么用? 和关系型数据库类似,MongoDB 中也有索引。索引的目的主要是用来提高查询效率,如果没有索引的话,MongoDB 必须执行 集合扫描 ,即扫描集合中的每个文档,以选择与查询语句匹配的文档。如果查询存在合适的索引,MongoDB 可以使用该索引来限制它必须检查的文档数量。并且,MongoDB 可以使用索引中的排序返回排序后的结果。 虽然索引可以显著缩短查询时间,但是11/6/2024
InnoDB存储引擎对MVCC的实现 (Multi-Version Concurrency Control) MVCC 是一种并发控制机制,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。它是通过在每个数据行上维护多个版本的数据来实现的。当一个事务要对数据库中的数据进行修改时,MVCC 会为该事务创建一个数据快照,而不是直接修改实际的数据行。 1、读操作(SELECT): 当一个事务执行读操作时,它会使用快照读取11/6/2024
MySQL三大日志(binlog、redo log和undo log)详解 本文来自公号程序猿阿星投稿,JavaGuide 对其做了补充完善。 MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志 binlog(归档日志)和事务日志 `redo log`(重做日志)和 `undo log`(回滚日志)。  :最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。 - READ-COMMITTED(读取已提交) :允许读取并发事务已经提交11/6/2024
MySQL常见面试题总结 基础 顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。 关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。 !关系型数据库表关系 大部分关系型数据库都使用 SQL 来操作数据库中的数11/6/2024
MySQL执行计划分析 本文来自公号 MySQL 技术,JavaGuide 对其做了补充完善。原文地址: 优化 SQL 的第一步应该是读懂 SQL 的执行计划。本篇文章,我们一起来学习下 MySQL EXPLAIN 执行计划相关知识。 执行计划 是指一条 SQL 语句在经过 **MySQL 查询优化器** 的优化会后,具体的执行方式。 执行计划通常用于 SQL 性能分析、优化等场景。通过 EXPLAIN 的结11/6/2024
MySQL日期类型选择建议 我们平时开发中不可避免的就是要存储时间,比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间、用户下单时间等等。你会发现时间这个东西与我们开发的联系还是非常紧密的,用的好与不好会给我们的业务甚至功能带来很大的影响。所以,我们有必要重新出发,好好认识一下这个东西。 和绝大部分对数据库不太了解的新手一样,我在大学的时候就这样干过,甚至认为这样是一个不错的表示日期的方法。毕竟简11/6/2024
MySQL查询缓存详解 缓存是一个有效且实用的系统性能优化的手段,不论是操作系统还是各种软件和网站或多或少都用到了缓存。 然而,有经验的 DBA 都建议生产环境中把 MySQL 自带的 Query Cache(查询缓存)给关掉。而且,从 MySQL 5.7.20 开始,就已经默认弃用查询缓存了。在 MySQL 8.0 及之后,更是直接删除了查询缓存的功能。 这又是为什么呢?查询缓存真就这么鸡肋么? 带着如下几个11/6/2024
MySQL索引详解 感谢WT-AHA对本文的完善,相关 PR: 。 但凡经历过几场面试的小伙伴,应该都清楚,数据库索引这个知识点在面试中出现的频率高到离谱。 除了对于准备面试来说非常重要之外,善用索引对 SQL 的性能提升非常明显,是一个性价比较高的 SQL 优化手段。 索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。 索引的作用就相当于书的目录。打个比方: 我们在查字11/6/2024
MySQL自增主键一定是连续的吗 作者:飞天小牛肉 > 原文: 众所周知,自增主键可以让聚集索引尽量地保持递增顺序插入,避免了随机查询,从而提高了查询效率。 但实际上,MySQL 的自增主键并不能保证一定是连续递增的。 下面举个例子来看下,如下所示创建一张表:  - 数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符 - 临时库表必须以 tmp_ 为前缀并以日期为后缀,备份表11/6/2024
SQL语句在MySQL中的执行过程 本文来自木木匠投稿。 本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程,包括 SQL 的查询在 MySQL 内部会怎么流转,SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成以及这些组件的作用是什么,可以帮助我们理解和解决这些问题。 MySQL 基础架构分析 MySQL 基本架构概览 下图是 MySQ11/6/2024
一千行 MySQL 学习笔记 原文地址: ,JavaGuide 对本文进行了简答排版,新增了目录。 非常不错的总结,强烈建议保存下来,需要的时候看一看。 `sql /* Windows服务 */ -- 启动 MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) /* 连接与断11/6/2024
3种常用的缓存读写策略详解 看到很多小伙伴简历上写了“熟练使用缓存”,但是被我问到“**缓存常用的 3 种读写策略**”的时候却一脸懵逼。 在我看来,造成这个问题的原因是我们在学习 Redis 的时候,可能只是简单了写一些 Demo,并没有去关注缓存的读写策略,或者说压根不知道这回事。 但是,搞懂 3 种常见的缓存读写策略对于实际工作中使用缓存以及面试中被问到缓存都是非常有帮助的! 下面介绍到的三种模式各有优劣,不11/6/2024
Redis 3 种特殊数据类型详解 除了 5 种基本的数据类型之外,Redis 还支持 3 种特殊的数据类型:Bitmap、HyperLogLog、GEO。 (位图) 根据官网介绍: Bitmaps are not an actual data type, but a set of bit-oriented operations defined on the String type which is treated li11/6/2024
Redis 5 种基本数据类型详解 Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。 这 5 种数据类型是直接提供给用户使用的,是数据的保存形式,其底层实现主要依赖这 8 种数据结构:简单动态字符串(SDS)、LinkedList(双向链表)、Dict(哈希表/字典)、SkipList(跳跃表)、Intset(整数集合)、ZipList(压11/6/2024
Redis内存碎片详解 你可以将内存碎片简单地理解为那些不可用的空闲内存。 举个例子:操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片。 !内存碎片 Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗。 Redis 内存碎片? Redis 内存碎片产11/6/2024
Redis常见阻塞原因总结 本文整理完善自: ,作者:阿 Q 说代码 这篇文章会详细总结一下可能导致 Redis 阻塞的情况,这些情况也是影响 Redis 性能的关键因素,使用 Redis 的时候应该格外注意! 命令 Redis 中的大部分命令都是 O(1)时间复杂度,但也有少部分 O(n) 时间复杂度的命令,例如: - `KEYS *`:会返回所有符合规则的 key。 - HGETALL:会返回一个 Hash 11/6/2024
Redis常见面试题总结(上) 基础 Redis? Redis (REmote DIctionary Server)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同的是,Redis 的数据是保存在内存中的(内存数据库,支持持久化),因此读写速度非常快,被广泛应用于分布式缓存方向。并且,Redis 存储的是 KV 键值对数据。 为了满足不同的业务场景,Redis 内置了多种数据类型11/6/2024
Redis常见面试题总结(下) 事务 Redis 事务? 你可以将 Redis 中的事务理解为:**Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。** Redis 事务实际开发中使用的非常少,功能比较鸡肋,不要将其和我们平时理解的关系型数据库的事务混淆了。 除了不满足原子性和持久性之外,事务中的每条命令都会与 Redis 服务器进行网络交互,这是比较浪费11/6/2024
Redis持久化机制详解 使用缓存的时候,我们经常需要对内存中的数据进行持久化也就是将内存中的数据写入到硬盘中。大部分原因是为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了做数据同步(比如 Redis 集群的主从节点通过 RDB 文件同步数据)。 Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持 3 种持久化方式: - 快照(snapshotting,RD11/6/2024
SQL常见面试题总结(1) 题目来源于:[牛客题霸 - SQL 必知必会](https://www.nowcoder.com/exam/oj?page=1&tab=SQL%E7%AF%87&topicId=298) SELECT 用于从数据库中查询数据。 Customers 表中检索所有的 ID 现有表 Customers 如下: | cust_id | | ------- | | A | | B 11/6/2024
SQL常见面试题总结(2) 题目来源于:[牛客题霸 - SQL 进阶挑战](https://www.nowcoder.com/exam/oj?page=1&tab=SQL%E7%AF%87&topicId=240) SQL 插入记录的方式汇总: - 普通插入(全字段) :`INSERT INTO table_name VALUES (value1, value2, ...)` - 普通插入(限定字段) :`INSE11/6/2024
SQL常见面试题总结(3) 题目来源于:[牛客题霸 - SQL 进阶挑战](https://www.nowcoder.com/exam/oj?page=1&tab=SQL%E7%AF%87&topicId=240) 较难或者困难的题目可以根据自身实际情况和面试需要来决定是否要跳过。 类别高难度试卷得分的截断平均值(较难) 描述: 牛客的运营同学想要查看大家在 SQL 类别中高难度试卷的得分情况。 请你帮她从ex11/6/2024
SQL常见面试题总结(4) 题目来源于:[牛客题霸 - SQL 进阶挑战](https://www.nowcoder.com/exam/oj?page=1&tab=SQL%E7%AF%87&topicId=240) 较难或者困难的题目可以根据自身实际情况和面试需要来决定是否要跳过。 MySQL 8.0 版本引入了窗口函数的支持,下面是 MySQL 中常见的窗口函数及其用法: 1. ROW_NUMBER(): 为查11/6/2024
SQL常见面试题总结(5) 题目来源于:[牛客题霸 - SQL 进阶挑战](https://www.nowcoder.com/exam/oj?page=1&tab=SQL%E7%AF%87&topicId=240) 较难或者困难的题目可以根据自身实际情况和面试需要来决定是否要跳过。 描述: 现有试卷作答记录表 exam_record(uid 用户 ID, exam_id 试卷 ID, start_time 开始11/6/2024
SQL语法基础知识总结 本文整理完善自下面这两份资料: > - [SQL 语法速成手册](https://juejin.cn/post/6844903790571700231) - [MySQL 超全教程](https://www.begtut.com/mysql/mysql-tutorial.html) - 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。 - 数据表(ta11/6/2024
字符集详解 MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。 如果使用 utf8 的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。 为什么会这样呢?这篇文章可以从源头给你解答。 字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。 字符集 就是一系列字符的集合。字符集的种类较多,每个字符集可以表示的字符范围通常不同,就比如说11/6/2024
数据库基础知识总结 数据库知识基础,这部分内容一定要理解记忆。虽然这部分内容只是理论知识,但是非常重要,这是后面学习 MySQL 数据库的基础。PS: 这部分内容由于涉及太多概念性内容,所以参考了维基百科和百度百科相应的介绍。 数据库管理系统, 数据库系统, 数据库管理员? - 数据库 : 数据库(DataBase 简称 DB)就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。 - 数据库管理11/6/2024
Linux 基础知识总结 简单介绍一下 Java 程序员必知的 Linux 的一些概念以及常见命令。 Linux 简介 通过以下三点可以概括 Linux 到底是什么: - **类 Unix 系统**:Linux 是一种自由、开放源码的类似 Unix 的操作系统 - **Linux 本质是指 Linux 内核**:严格来讲,Linux 这个词本身只表示 Linux 内核,单独的 Linux 内核并不能成为一个11/6/2024
Shell 编程基础知识总结 Shell 编程在我们的日常开发工作中非常实用,目前 Linux 系统下最流行的运维自动化语言就是 Shell 和 Python 了。 这篇文章我会简单总结一下 Shell 编程基础知识,带你入门 Shell 编程! Shell 编程的大门 Shell? 学一个东西,我们大部分情况都是往实用性方向着想。从工作角度来讲,学习 Shell 是为了提高我们自己工作效率,提高产出,让我们在更少11/6/2024
操作系统常见面试题总结(上) 很多读者抱怨计算操作系统的知识点比较繁杂,自己也没有多少耐心去看,但是面试的时候又经常会遇到。所以,我带着我整理好的操作系统的常见问题来啦!这篇文章总结了一些我觉得比较重要的操作系统相关的问题比如 用户态和内核态、系统调用、进程和线程、死锁、内存管理、虚拟内存、文件系统等等。 这篇文章只是对一些操作系统比较重要概念的一个概览,深入学习的话,建议大家还是老老实实地去看书。另外, 这篇文章的11/6/2024
操作系统常见面试题总结(下) !内存管理主要做的事情 操作系统的内存管理非常重要,主要负责下面这些事情: - 内存的分配与回收:对进程所需的内存进行分配和释放,malloc 函数:申请内存,free 函数:释放内存。 - 地址转换:将程序中的虚拟地址转换成内存中的物理地址。 - 内存扩充:当系统没有足够的内存时,利用虚拟内存技术或自动覆盖技术,从逻辑上扩充内存。 - 内存映射:将一个文件直接映射到进程的进程空间中,11/6/2024
图 图是一种较为复杂的非线性结构。 为啥说其较为复杂呢? 根据前面的内容,我们知道: - 线性数据结构的元素满足唯一的线性关系,每个元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继。 - 树形数据结构的元素之间有着明显的层次关系。 但是,图形结构的元素之间的关系是任意的。 何为图呢? 简单来说,图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为:G(V,E),其中,G11/6/2024
堆 堆是一种满足以下条件的树: 堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。或者说,任意一个节点的值都大于等于(或小于等于)所有子节点的值。 大家可以把堆(最大堆)理解为一个公司,这个公司很公平,谁能力强谁就当老大,不存在弱的人当老大,老大手底下的人一定不会比他强。这样有助于理解后续堆的操作。 !!!特别提示: - 很多博客说堆是完全二叉树,其实并非如此,堆不一定是完11/6/2024
布隆过滤器 布隆过滤器相信大家没用过的话,也已经听过了。 布隆过滤器主要是为了解决海量数据的存在性问题。对于海量数据中判定某个数据是否存在且容忍轻微误差这一场景(比如缓存穿透、海量数据去重)来说,非常适合。 文章内容概览: 1. 什么是布隆过滤器? 2. 布隆过滤器的原理介绍。 3. 布隆过滤器使用场景。 4. 通过 Java 编程手动实现布隆过滤器。 5. 利用 Google 开源的 Guava 11/6/2024
树 树就是一种类似现实生活中的树的数据结构(倒置的树)。任何一颗非空树只有一个根节点。 一棵树具有以下特点: 1. 一棵树中的任意两个结点有且仅有唯一的一条路径连通。 2. 一棵树如果有 n 个结点,那么它一定恰好有 n-1 条边。 3. 一棵树不包含回路。 下图就是一颗树,并且是一颗二叉树。 !二叉树 如上图所示,通过上面这张图说明一下树中的常用概念: - 节点:树中的每个元素都可以11/6/2024
红黑树 红黑树(Red Black Tree)是一种自平衡二叉查找树。它是在 1972 年由 Rudolf Bayer 发明的,当时被称为平衡二叉 B 树(symmetric binary B-trees)。后来,在 1978 年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。 由于其自平衡的特性,保证了最坏情形下在 O(logn) 时间复杂度内完成查11/6/2024
线性数据结构 数组 数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组的特点是:提供随机访问 并且容量有限。 `java 假如数组的长度为 n。 访问:O(1)//访问特定位置的元素 插入:O(n )//最坏的情况发生在插入发生在数组的首部并需要移动所有11/6/2024
几道常见的字符串算法题 作者:wwwxmu > 原文地址: KMP 算法 谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置。KMP 算法把字符匹配的时间复杂度缩小到 O(m+n) ,而空间复杂度也只有 O(m)。因为“暴力搜索”的方法会反复回溯主串,导致效率低下,而 KMP 算法可以利用已经部分匹配这个有效信息,保持主串上的指针不回溯11/6/2024
几道常见的链表算法题 两数相加 Leetcode:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 > 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例: `plain 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 ` Leetcode11/6/2024
剑指offer部分编程题 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数 n,请你输出斐波那契数列的第 n 项。 n a.如果两种跳法,1 阶或者 2 阶,那么假定第一次跳的是一阶,那么剩下的是 n-1 个台阶,跳法是 f(n-1); b.假定第一次跳的是 2 阶,那么剩下的是 n-2 个台阶,跳法是 f(n-2) c.由 a,b 假设可以得出总跳法为: f(n) = f(n-1) + f(n-2) d.11/6/2024
十大经典排序算法总结 本文转自:,JavaGuide 对其做了补充完善。 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。 两年前,我曾11/6/2024
常见数据结构经典LeetCode题目推荐 704.二分查找: 80.删除有序数组中的重复项 II: 977.有序数组的平方: 707.设计链表: 206.反转链表: 92.反转链表 II: 61.旋转链表: 232.用栈实现队列: 225.用队列实现栈: 347.前 K 个高频元素: 239.滑动窗口最大值: 105.从前序与中序遍历构造二叉树: 117.填充每个节点的下一个右侧节点指针 II: 2311/6/2024
经典算法思想总结(含LeetCode题目推荐) 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 - 将问题分解为若干个子问题 - 找出适合的贪心策略 - 求解每一个子问题的最优解 - 将局部最优解堆叠成全局最优解 455.分发饼干: 121.买卖股票的最佳时机: 122.买卖股票的最佳时机 II: 55.跳跃游戏: 45.跳跃游戏 II: 动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心11/6/2024
ARP 协议详解(网络层) 每当我们学习一个新的网络协议的时候,都要把他结合到 OSI 七层模型中,或者是 TCP/IP 协议栈中来学习,一是要学习该协议在整个网络协议栈中的位置,二是要学习该协议解决了什么问题,地位如何?三是要学习该协议的工作原理,以及一些更深入的细节。 **ARP 协议,可以说是在协议栈中属于一个偏底层的、非常重要的、又非常简单的**通信协议。 开始阅读这篇文章之前,你可以先看看下面几个问题: 11/6/2024
DNS 域名系统详解(应用层) DNS(Domain Name System)域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS 要解决的是**域名和 IP 地址的映射问题**。 !DNS:域名系统 在实际使用中,有一种情况下,浏览器是可以不必动用 DNS 就可以获知域名和 IP 地址的映射的。浏览器在本地会维护一个hosts列表,一般来说浏览器要先查看要访问的域名是否在hosts列表中,如果有的11/6/2024
HTTP 1.0 vs HTTP 1 这篇文章会从下面几个维度来对比 HTTP 1.0 和 HTTP 1.1: - 响应状态码 - 缓存处理 - 连接方式 - Host 头处理 - 带宽优化 HTTP/1.0 仅定义了 16 种状态码。HTTP/1.1 中新加入了大量的状态码,光是错误响应状态码就新增了 24 种。比如说,`100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)—11/6/2024
HTTP vs HTTPS(应用层) 协议 协议介绍 HTTP 协议,全称超文本传输协议(Hypertext Transfer Protocol)。顾名思义,HTTP 协议就是用来规范超文本的传输,超文本,也就是网络上的包括文本在内的各式各样的消息,具体来说,主要是来规范浏览器和服务器端的行为的。 并且,HTTP 是一个无状态(stateless)协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。这其实是一种懒政,11/6/2024
HTTP 常见状态码总结(应用层) HTTP 状态码用于描述 HTTP 请求的结果,比如 2xx 就代表请求被成功处理。  Informational(信息性状态码) 相比于其他类别状态码来说,1xx 你平时你大概率不会碰到,所以这里直接跳过。 Success(成功状态11/6/2024
NAT 协议详解(网络层) **NAT 协议(Network Address Translation)** 的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,Local Area Network,LAN)内,各主机使用的是同一个 LAN 下的 IP 地址,但在该 LAN 以外,在广域网(Wide Area Network,WAN)中,需要一个统一的 IP 地11/6/2024
OSI和TCP-IP网络分层模型详解(基础) 七层模型 **OSI 七层模型** 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示:  每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输11/6/2024
TCP 三次握手和四次挥手(传输层) 为了准确无误地把数据送达目标处,TCP 协议采用了三次握手策略。 三次握手  建立一个 TCP 连接需要“三次握手”,缺一不可: - 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然11/6/2024
TCP 传输可靠性保障(传输层) 如何保证传输的可靠性? 1. 基于数据块传输:应用数据被分割成 TCP 认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。 2. 对失序数据包重新排序以及去重:TCP 为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重。 3. 校验和 : TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,11/6/2024
《计算机网络》(谢希仁)内容总结 本文是我在大二学习计算机网络期间整理, 大部分内容都来自于谢希仁老师的《计算机网络》第七版这本书。为了内容更容易理解,我对之前的整理进行了一波重构,并配上了一些相关的示意图便于理解。 11/6/2024
应用层常见协议总结(应用层) **超文本传输协议(HTTP,HyperText Transfer Protocol)** 是一种用于传输超文本和多媒体内容的协议,主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求进行加载的。 HTTP 使用客户端-服务器模型,客户端向服务器发送 HTTP Request(请求),服务器响应请求并返回 HTTP 11/6/2024
网络攻击常见手段总结 本文整理完善自[TCP/IP 常见攻击手段 - 暖蓝笔记 - 2021](https://mp.weixin.qq.com/s/AZwWrOlLxRSSi-ywBgZ0fA)这篇文章。 这篇文章的内容主要是介绍 TCP/IP 常见攻击手段,尤其是 DDoS 攻击,也会补充一些其他的常见网络攻击手段。 欺骗 是什么? 在网络中,所有的设备都会分配一个地址。这个地址就仿佛小蓝的家地址「多少11/6/2024
计算机网络常见面试题总结(上) 上篇主要是计算机网络基础和应用层相关的内容。 七层模型是什么?每一层的作用是什么? **OSI 七层模型** 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示:  每一层都专注11/6/2024
计算机网络常见面试题总结(下) 下篇主要是传输层和网络层相关的内容。 与 UDP 与 UDP 的区别(重要) 1. 是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。 2. 是否是可靠传输:远地主机在收到 UDP 报文后,不需要给出任何确认,并且不保证数据不丢失,不保证是否顺序到达。TCP 提供可靠的传输服务,TCP 在传递数据11/6/2024
Java面试重点总结(重要) 本文节选自 **[《Java 面试指北》]**。这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ……)、优质面经等内容。 后端面试哪些知识点是重点? 准备面试的时候,具体哪些知识点是重点呢? 给你几点靠谱的建议: 1. Java 基础、集合、并发、MySQL、Redis、Spring、Spring Boot 这些 Java 后端开发必备的知11/6/2024
优质面经汇总(付费) 古人云:“他山之石,可以攻玉” 。善于学习借鉴别人的面试的成功经验或者失败的教训,可以让自己少走许多弯路。 在 **[《Java 面试指北》]** 的 「面经篇」 ,我分享了 15+ 篇高质量的 Java 后端面经,有校招的,也有社招的,有大厂的,也有中小厂的。 如果你是非科班的同学,也能在这些文章中找到对应的非科班的同学写的面经。  面试之前,强烈建议大家多拿常见的面试题来进行自测,检查一下自己的掌握情况,这是一种非常实用的备战技术面试的小技巧。 在 **[《Java 面试指北》]** 的 「技术面试题自测篇」 ,我总结了 Java 面试中最重要的知识点的最常见的面试题并按照面试提问的方式展现出来。  本文节选自 **[《Java 面试指北》]**。这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ……)、优质面经等内容。 你的身边一定有很多编程比你厉害但是找的工作并没有你好的朋友!技术面试不同于编程,编程厉害不代表技术面试就一定能过。 现在你去面个试,不认真准备一下,那简直就是往枪口上撞。我们大部分都只是普通人,没有发过顶级周刊或者获得过顶级11/6/2024
程序员简历编写指南(重要) 本文节选自 **[《Java 面试指北》]**。这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ……)、优质面经等内容。 一份好的简历可以在整个申请面试以及面试过程中起到非常重要的作用。 为什么说简历很重要呢? 我们可以从下面几点来说: 1、简历就像是我们的一个门面一样,它在很大程度上决定了是否能够获得面试机会。 - 假如你是网申,你的简11/6/2024
项目经验指南 本文节选自 **[《Java 面试指北》]**。这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ……)、优质面经等内容。 没有项目经验是大部分应届生会碰到的一个问题。甚至说,有很多有工作经验的程序员,对自己在公司做的项目不满意,也想找一个比较有技术含量的项目来做。 说几种我觉得比较靠谱的获取项目经验的方式,希望能够对你有启发。 在网上找一11/6/2024
冗余设计详解 冗余设计是保证系统和数据高可用的最常的手段。 对于服务来说,冗余的思想就是相同的服务部署多份,如果正在使用的服务突然挂掉的话,系统可以很快切换到备份服务上,大大减少系统的不可用时间,提高系统的可用性。 对于数据来说,冗余的思想就是相同的数据备份多份,这样就可以很简单地提高数据的安全性。 实际上,日常生活中就有非常多的冗余思想的应用。 拿我自己来说,我对于重要文件的保存方法就是冗余思想的11/6/2024
性能测试入门 性能测试一般情况下都是由测试这个职位去做的,那还需要我们开发学这个干嘛呢?了解性能测试的指标、分类以及工具等知识有助于我们更好地去写出性能更好的程序,另外作为开发这个角色,如果你会性能测试的话,相信也会为你的履历加分不少。 这篇文章是我会结合自己的实际经历以及在测试这里取的经所得,除此之外,我还借鉴了一些优秀书籍,希望对你有帮助。 不同角色看网站性能 用户 当用户打开一个网站的时候,最11/6/2024
服务限流详解 针对软件系统来说,限流就是对请求的速率进行限制,避免瞬时的大量请求击垮软件系统。毕竟,软件系统的处理能力是有限的。如果说超过了其处理能力的范围,软件系统可能直接就挂掉了。 限流可能会导致用户的请求无法被正确处理,不过,这往往也是权衡了软件系统的稳定性之后得到的最优解。 现实生活中,处处都有限流的实际应用,就比如排队买票是为了避免大量用户涌入购票而导致售票员无法处理。 简单介绍 4 种非11/6/2024
超时&重试详解 由于网络问题、系统或者服务内部的 Bug、服务器宕机、操作系统崩溃等问题的不确定性,我们的系统或者服务永远不可能保证时刻都是可用的状态。 为了最大限度的减小系统或者服务出现故障之后带来的影响,我们需要用到的 超时(Timeout) 和 重试(Retry) 机制。 想要把超时和重试机制讲清楚其实很简单,因为它俩本身就不是什么高深的概念。 虽然超时和重试机制的思想很简单,但是它俩是真的非常实11/6/2024
高可用系统设计指南 高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。 一般情况下,我们使用多少个 9 来评判一个系统的可用性,比如 99.9999% 就是代表该系统在所有的运行时间中只有 0.0001% 的时间是不可用的,这样的系统就是非常非常高可用的了!当然,也会有系统如果可用性不太好的话,可能连 9 都上不了。 除11/6/2024
CDN常见问题总结 CDN ? CDN 全称是 Content Delivery Network/Content Distribution Network,翻译过的意思是 内容分发网络 。 我们可以将内容分发网络拆开来看: - 内容:指的是静态资源比如图片、视频、文档、JS、CSS、HTML。 - 分发网络:指的是将这些静态资源分发到位于多个不同的地理位置机房中的服务器上,这样,就可以实现静态资源的就近访问11/6/2024
Disruptor常见问题总结 Disruptor 是一个相对冷门一些的知识点,不过,如果你的项目经历中用到了 Disruptor 的话,那面试中就很可能会被问到。 一位球友之前投稿的面经(社招)中就涉及一些 Disruptor 的问题,文章传送门:[圆梦!顺利拿到字节、淘宝、拼多多等大厂 offer!](https://mp.weixin.qq.com/s/C5QMjwEb6pzXACqZsyqC4A) 。 基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。它支持多种客户端如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、11/6/2024
RocketMQ常见问题总结 [本文由 FrancisQ 投稿!](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485969&idx=1&sn=6bd53abde30d42a778d5a35ec104428c&chksm=cea245daf9d5cccce631f93115f0c2c4a7634e55f5bef9009fd03f5a0ffa55b74511/6/2024
消息队列基础知识总结 这篇文章中的消息队列主要指的是分布式消息队列。 “RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。我也在我的多篇文章中提到了这个概念。可能你是熟练使用消息队列的老手,又或者你是不懂消息队列的新手,不论你了不了解消息队列,本文都将带你搞懂消息队列的一些基本理论。 如果你是老手,你可能从本文学到你之前不曾注意的一些关11/6/2024
读写分离和分库分表常见问题总结 见名思意,根据读写分离的名字,我们就可以知道:读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。 我简单画了一张图来帮助不太清楚读写分离的小伙伴理解。 !读写分离示意图 一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现11/6/2024
负载均衡常见问题总结 负载均衡 指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。负载均衡服务可以有由专门的软件或者硬件来完成,一般情况下,硬件的性能更好,软件的价格更便宜(后文会详细介绍到)。 下图是[《Java 面试指北》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519384&idx=1&sn=bc11/6/2024
一个中科大差生的 8 年程序员工作总结 推荐语:这篇文章讲述了一位中科大的朋友 8 年的经历:从 2013 年毕业之后加入上海航天 x 院某卫星研究所,再到入职华为,从华为离职。除了丰富的经历之外,作者在文章还给出了很多自己对于工作/生活的思考。我觉得非常受用!我在这里,向这位作者表达一下衷心的感谢。 > 原文地址: --- 今年终于从大菊花厂离职了,离职前收入大概 60w 不到吧!在某乎属于比较差的,今天终于有空写一下自己的11/6/2024
从校招入职腾讯的四年工作总结 程序员是一个流动性很大的职业,经常会有新面孔的到来,也经常会有老面孔的离开,有主动离开的,也有被动离职的。 再加上这几年卷得厉害,做的事更多了,拿到的却更少了,互联网好像也没有那么香了。 人来人往,变动无常的状态,其实也早已习惯。 打工人的唯一出路,无外乎精进自己的专业技能,提升自己的核心竞争力,这样无论有什么变动,走到哪里,都能有口饭吃。 今天分享一位博主,校招入职腾讯,工作四年后,11/6/2024
华为 OD 275 天后,我进了腾讯! 推荐语:一位朋友的华为 OD 工作经历以及腾讯面试经历分享,内容很不错。 > 原文地址: - 18 年 7 月,毕业于某不知名 985 计科专业; - 毕业前,在某马的 JavaEE(后台开发)培训了 6 个月; - 第一份工作(18-07 ~ 19-12)接触了大数据,感觉大数据更有前景; - 19 年 12 月,入职中国平安产险(去到才发现是做后台开发 😢); - 20 年 3 月,11/6/2024
滴滴和头条两年后端工作经验分享 推荐语:很实用的工作经验分享,看完之后十分受用! > 内容概览: > - 要学会深入思考,总结沉淀,这是我觉得最重要也是最有意义的一件事。 - 积极学习,保持技术热情。如果我们积极学习,保持技术能力、知识储备与工作年限成正比,这到了 35 岁哪还有什么焦虑呢,这样的大牛我觉得应该也是各大公司抢着要吧? - 在能为公司办成事,创造价值这一点上,我觉得最重要的两个字就是主动,主动承担任务,主动沟通11/6/2024
32条总结教你提升职场经验 推荐语:阿里开发者的一篇职场经验的分享。 > 原文地址: - 入职伊始谦逊的态度是好的,但不要把“我是新人”作为心理安全线; - 写一篇技术博客大概需要两周左右,但可能是最快的成长方式; - 一定要读两本书:金字塔原理、高效能人士的七个习惯(这本书名字像成功学,实际讲的是如何塑造性格); - 多问是什么、为什么,追本溯源把问题解决掉,试图绕过的问题永远会在下个路口等着你; - 不要沉迷于11/6/2024
新入职一家公司如何快速进入工作状态 推荐语:强烈建议每一位即将入职/在职的小伙伴看看这篇文章,看完之后可以帮助你少踩很多坑。整篇文章逻辑清晰,内容全面! > 原文地址: !新入职一家公司如何快速进入状态 一年一度的金三银四跳槽大戏即将落幕,相信很多跳槽的小伙伴们已经找到了心仪的工作,即将或已经有了新的开始。 相信有过跳槽经验的小伙伴们都知道,每到一个新的公司面临的可能都是新的业务、新的技术、新的团队……这些可能会打破你原来11/6/2024
聊聊大厂的绩效考核 内容概览: > - 在大部分公司,绩效跟你的年终奖、职级晋升、薪水涨幅等等福利是直接相关的。 - 你的上级、上上级对你的绩效拥有绝对的话语权,这是潜规则,放到任何公司都是。成年人的世界,没有绝对的公平,绩效考核尤为明显。 - 提升绩效的打法: - 短期打法:找出 1-2 件事,体现出你的独特价值(抓关键事件)。 - 长期打法:通过一步步信任的建立,成为团队的核心人员或者是老板的心腹,具11/6/2024
程序员怎样出版一本技术书 推荐语:详细介绍了程序员应该如何从头开始出一本自己的书籍。 > 原文地址: 在面试或联系副业的时候,如果能令人信服地证明自己的实力,那么很有可能事半功倍。如何证明自己的实力?最有信服力的是大公司职位背景背书,没有之一,比如在 BAT 担任资深架构,那么其它话甚至都不用讲了。 不过,不是每个人入职后马上就是大公司架构师,在上进的路上,还可以通过公众号,专栏博文,GitHub 代码量和出书出视11/6/2024
程序员高效出书避坑和实践指南 推荐语:详细介绍了程序员出书的一些常见问题,强烈建议有出书想法的朋友看看这篇文章。 > 原文地址: 古有三不朽, 所谓立德、立功、立言。程序员出一本属于自己的书,如果说是立言,可能过于高大上,但终究也算一件雅事。 出书其实不挣钱,而且从写作到最终拿钱的周期也不短。但程序员如果有一本属于自己的技术书,那至少在面试中能很好地证明自己,也能渐渐地在业内积累自己的名气,面试和做其它事情时也能有不少11/6/2024
一位大龄程序员所经历的面试的历炼和思考 推荐语:本文的作者,今年 36 岁,已有 8 年 JAVA 开发经验。在阿里云三年半,有赞四年半,已是标准的大龄程序员了。在这篇文章中,作者给出了一些关于面试和个人能力提升的一些小建议,非常实用! > 内容概览: > 1. 个人介绍,是对自己的一个更为清晰、深入和全面的认识契机。 2. 简历是充分展示自己的浓缩精华,也是重新审视自己和过往经历的契机。不仅仅是简要介绍技能和经验,更要最大程度凸显11/6/2024
从面试官和候选者的角度谈如何准备技术初试 推荐语:从面试官和面试者两个角度探讨了技术面试!非常不错! > 内容概览: > - 通过技术基础考察候选者,才能考察到候选者的真实技术实力:技术深度和广度。 - 实战与理论结合。比如,候选人叙述 JVM 内存模型布局之后,可以接着问:有哪些原因可能会导致 OOM , 有哪些预防措施? 你是否遇到过内存泄露的问题? 如何排查和解决这类问题? - 项目经历考察不宜超过两个。因为要深入考察一个项目的11/6/2024
如何在技术初试中考察程序员的技术能力 推荐语:从面试官和面试者两个角度探讨了技术面试!非常不错! > 内容概览: > - 实战与理论结合。比如,候选人叙述 JVM 内存模型布局之后,可以接着问:有哪些原因可能会导致 OOM , 有哪些预防措施? 你是否遇到过内存泄露的问题? 如何排查和解决这类问题? - 项目经历考察不宜超过两个。因为要深入考察一个项目的详情,所占用的时间还是比较大的。一般来说,会让候选人挑选一个他或她觉得最有收获11/6/2024
如何甄别应聘者的包装程度 推荐语:经常听到培训班待过的朋友给我说他们的老师是怎么教他们“包装”自己的,不光是培训班,我认识的很多朋友也都会在面试之前“包装”一下自己,所以这个现象是普遍存在的。但是面试官也不都是傻子,通过下面这篇文章来看看面试官是如何甄别应聘者的包装程度。 > 原文地址: 上到职场干将下到职场萌新,都会接触到包装简历这个词语。当你简历投到心仪的公司,公司内负责求职的工作人员是如何甄别简历的包装程度的11/6/2024
斩获 20+ 大厂 offer 的面试经验分享 推荐语:很实用的面试经验分享! > 原文地址: 突然回想起当年,我也在秋招时也斩获了 20+的互联网各大厂 offer。现在想起来也是有点唏嘘,毕竟拿得再多也只能选择一家。不过许多朋友想让我分享下互联网面试方法,今天就来给大家仔细讲讲打法! 如今金九银十已经过去,满是硝烟的求职战场上也只留下一处处炮灰。在现在这段日子,又是重新锻炼,时刻准备着明年金三银四的时候。 对于还没毕业的学生来说,11/6/2024
普通人的春招总结(阿里、腾讯offer) 推荐语:牛客网热帖,写的很全面!暑期实习,投了阿里、腾讯、字节,拿到了阿里和腾讯的 offer。 > 原文地址: > 下篇:十年饮冰,难凉热血——秋招总结 写这篇文章的时候,腾讯 offer 已经下来了,春招也算结束了,这次找暑期实习没有像去年找日常实习一样海投,只投了 BAT 三家,阿里和腾讯收获了 offer,字节没有给面试机会,可能是笔试太拉垮了。 楼主大三,双非本科,我的春招的11/6/2024
校招进入飞书的个人经验 推荐语:这篇文章的作者校招最终去了飞书做开发。在这篇文章中,他分享了自己的校招经历以及个人经验。 > 原文地址: 我是 C++主要是后台开发的方向。 2021 春招入职字节飞书客户端,入职字节之前拿到了百度 offer(音视频直播部分) 以及腾讯 PCG (微视、后台开发)的 HR 面试通过(还没有收到录用意向书)。 实验室在 1 月份元旦的那天正式可以放假回家,但回家仍然继续“远11/6/2024
阿里技术面试的一些秘密 推荐语:详细介绍了求职者在面试中应该具备哪些能力才会有更大概率脱颖而出。 > 原文地址: 最近我的工作稍微轻松些,就被安排去校招面试了 当时还是有些激动的,以前都是被面试的,现在我自己也成为一个面试别人的面试官 接下来就谈谈我的面试心得(谈谈阿里面试的秘籍) 面试之前都是要筛选简历,这个大家应该知道 阿里对待招聘非常负责任,面试官必须对每位同学的简历进行查看和筛选,如果不合适还需11/6/2024
十年大厂成长之路 推荐语:这篇文章的作者有着丰富的工作经验,曾在大厂工作了 12 年。结合自己走过的弯路和接触过的优秀技术人,他总结出了一些对于个人成长具有普遍指导意义的经验和特质。 > 原文地址: 最近这段时间,有好几个年轻的同学和我聊到自己的迷茫。其中有关于技术成长的、有关于晋升的、有关于择业的。我很高兴他们愿意听我这个“过来人”分享自己的经验。 我自己毕业后进入大厂,在大厂工作 12 年,我说的内容11/6/2024
工作五年之后,对技术和业务的思考 推荐语:这是我在两年前看到的一篇对我触动比较深的文章。确实要学会适应变化,并积累能力。积累解决问题的能力,优化思考方式,拓宽自己的认知。 > 原文地址: 苦海无边,回头无岸。 前言 晃晃悠悠的,在互联网行业工作了五年,默然回首,你看哪里像灯火阑珊处? 初入职场,大部分程序员会觉得苦学技术,以后会顺风顺水升职加薪,这样的想法没有错,但是不算全面,五年后你会不会继续做技术写代码这是核心问11/6/2024
程序员如何快速学习新技术 推荐语:这是[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)练级攻略篇中的一篇文章,分享了我对于如何快速学习一门新技术的看法。 > ![《Java 面试指北》练级攻略篇](https://img-01-javaguide.xiegei.com/0031/training-strategy-articl11/6/2024
程序员的技术成长战略 推荐语:波波老师的一篇文章,写的非常好,不光是对技术成长有帮助,其他领域也是同样适用的!建议反复阅读,形成一套自己的技术成长策略。 > 原文地址: 前言 在波波的微信技术交流群里头,经常有学员问关于技术人该如何学习成长的问题,虽然是微信交流,但我依然可以感受到小伙伴们焦虑的心情。 技术人为啥焦虑? 恕我直言,说白了是胆识不足格局太小。胆就是胆量,焦虑的人一般对未来的不确定性怀有恐惧。识11/6/2024
糟糕程序员的 20 个坏习惯 推荐语:Kaito 大佬的一篇文章,很实用的建议! > 原文地址: 我想你肯定遇到过这样一类程序员:他们无论是写代码,还是写文档,又或是和别人沟通,都显得特别专业。每次遇到这类人,我都在想,他们到底是怎么做到的? 随着工作时间的增长,渐渐地我也总结出一些经验,他们身上都保持着一些看似很微小的优秀习惯,但正是因为这些习惯,体现出了一个优秀程序员的基本素养。 但今天我们来换个角度,来看看一11/6/2024
给想成长为高级别开发同学的七条建议 推荐语:普通程序员要想成长为高级程序员甚至是专家等更高级别,应该注意在哪些方面注意加强?开发内功修炼号主飞哥在这篇文章中就给出了七条实用的建议。 > 内容概览: > 1. 刻意加强需求评审能力 2. 主动思考效率 3. 加强内功能力 4. 思考性能 5. 重视线上 6. 关注全局 7. 归纳总结能力 > 原文地址: 1:刻意加强需求评审能力 先从需求评审开始说。在互联网公司,需求评审是开发11/6/2024
美团三年,总结的10条血泪教训 推荐语:作者用了很多生动的例子和故事展示了自己在美团的成长和感悟,看了之后受益颇多! > 内容概览: > 本文的作者提出了以下十条建议,希望能对其他职场人有所启发和帮助: > 1. 结构化思考与表达,提高个人影响力 2. 忘掉职级,该怼就怼,推动事情往前走 3. 用好平台资源,结识优秀的人,学习通识课 4. 一切都是争取来的,不要等待机会,要主动寻求 5. 关注商业,升维到老板思维,看清趋势,11/6/2024