- 博客(35)
- 资源 (3)
- 收藏
- 关注
原创 Java基础:枚举的用法与原理
在学习过程中,我们也只是在定义常量的时候,会意识到枚举的存在,而定义常量其实可以在类中实现,这时就会感觉枚举有点鸡肋。但在实际项目开发的过程中,枚举因相当迷人的特性而受到越来越多的关注。本文将按以下小节点来,一一介绍枚举:枚举的实现枚举的用法枚举的原理枚举与单例(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)1. 枚举的实现枚举是JDK1.5之后的特性,在此之前一般是在类中对常量进行定义。那么为什么需要枚举呢?举个栗子:使用静态变量定义四季假如我们需要使用四个变量来代表“春
2020-05-12 10:00:34
1101
1
原创 《软技能:代码之外的生存指南》笔记
前言知道这本书,正是我完成毕设,又不能去实习这种尴尬的时候(直到发布这篇文章的时候,我还没去实习),想着怎么计划未来一两年的学习方向和大致的发展方向(笔者还是很想读研,只是因为家里的环境不适合)。遇到这本书,感觉像是一位经历了很多的大哥,用他自己的经历,告诉我未来可以怎么生存,而不仅仅是单纯地学习技术。因为笔者还没有毕业,可能视角比较狭窄,有兴趣的朋友可以去找找这本书,希望各位有所收获。(因为这本书也比较厚,里面几乎全是干货,所以需要分章节来展示)职业篇(上)主动管理职业生涯,想清楚:要做什么——
2020-05-12 09:58:06
645
原创 Shiro框架:认证和授权原理
前言Shiro作为解决权限问题的常用框架,常用于解决认证、授权、加密、会话管理等场景。本文将对Shiro的认证和授权原理进行介绍:Shiro可以做什么?、Shiro是由什么组成的?举个Shiro的例子呗?Shiro认证的原理是咋样的?Shiro授权的原理是咋样的?(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)1. Shiro可以做什么?在构建一个网络应用的时候,权限检验管理作为非常重要的安全措施,需要包含以下几点:用户认证 — 用户身份识别。得知道来的人是谁;用户授
2020-05-09 10:45:26
1490
原创 Java集合:List、Set和Map需要注意的5个问题
前言Java集合中的List、Set和Map作为Java集合食物链的顶级,可谓是各有千秋。本文将对于List、Set和Map之间的联系与区别进行介绍,以及这三者衍生出来的问题进行介绍(若无特地说明,jdk版本皆为1.8):List、Set和Map的联系和区别是什么?List、Set和Map的使用场景有哪些?List与Set之间的怎么转换?Set是怎么保证元素不重复?如何在遍历的同时删...
2020-05-04 13:12:35
922
原创 Java集合:Collections与Collection的区别
前言印象中,Collections像是一个工具箱类,里面有着集合类的各种帮助性质的方法,如reverse()等。而Collection是集合类的上级接口,继承它的主要接口有List和Set,而List和Set的实现类也需要实现Collection定义的方法。本文主要对Collections和Collection的区别进行介绍:Collections与Collection在类型上的区别C...
2020-04-22 20:14:05
1174
原创 【Java关键字】理解final关键字
前言我们在了解final关键字之前,可以先从它的字面意思去理解,有道翻译查询如下:也就是说,final的中文意思就是最终的、不可改变的。在Java中,final关键字表达的也是这样的意思。final关键字修饰变量、方法和类,不管修饰什么,其本意都是指“它是无法更改的”。本文将介绍final关键字:final关键字修饰变量final关键字修饰方法参数final关键字修饰方法final...
2020-04-17 13:44:24
408
原创 分布式系统理论:Quorum算法
前言笔者在分布式一致性算法的重要原理:鸽巢原理中介绍了鸽巢原理,而本文将要介绍Quorum算法正是鸽巢原理的应用之一。本文将按以下顺序对Quorum算法进行介绍:分布式系统为什么需要Quorum算法?——WARO机制鸽巢原理是怎么应用到Quorum算法中?什么是Quorum算法?怎么运用Quorum算法解决WARO机制的负载均衡问题?运用了Quorum算法的系统架构简图是怎么样的?...
2020-04-16 14:58:36
2770
原创 【Java关键字】理解instanceof关键字
前言前文对static关键字进行了介绍,读者可以知道static关键字是一个可以控制成员变量、成员方法以及代码块的加载顺序和作用范围。我们在平时看源码的时候会时不时看到instanceof关键字,Java开发者对它的第一印象就是:instanceof是用于测试一个对象是否是另一个类的实例。本文主要对instanceof关键字进行介绍:了解instanceofinstanceof作用的类型...
2020-04-15 16:31:32
1579
原创 【Java关键字】理解static关键字
前言关于Java关键字,笔者打算有些结合具体Java基础一起写,如transient关键字就写在你真的有好好了解过序列化吗:Java序列化实现的原理里面了,有些就单独拿出来介绍,如static、final等。本文主要对static关键字进行介绍:static修饰成员变量static修饰成员方法static静态块static静态导包static静态内部类(若文章有不正之处,或难以理...
2020-04-14 17:36:09
392
原创 【Java集合】你回答得出HashMap(JDK1.8)的7个问题吗?
【Java集合】你真的懂HashMap(JDK1.8)的7个问题吗?前言可能有小伙伴问,现在Java 14都发布了,我们还在回顾Java 8的内容,不会跟不上时代了吗?其实学习Java 8中HashMap的底层原理,除了应付面试,我们还可以多问问:为什么要做出这些改变?有什么好处吗?本文主要对HashMap的底层结构和功能原理进行介绍。(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎...
2020-04-13 16:22:43
5449
15
原创 HashMap的加载因子为什么是0.75?
前言有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的时候发现有很多可以去细究的问题,最终是会回归于数学的,如HashMap的加载因子为什么是0.75?本文主要对以下内容进行介绍:为什么HashMap需要加载因子?解决冲突有什么方法?为什么加载因子一定是0.75?而不是0.8,0.6?为什么HashMap需要加载因子?HashMap的底层是哈希表,是存储键值对的结...
2020-04-11 15:59:40
7480
2
原创 分布式一致性算法的重要原理:鸽巢原理
在分布式BASE理论:数据一致性模型有哪些?中,我们谈到了BASE理论的最终一致性,以及简单介绍了数据一致性模型,但我们都是站在一个使用者的角度,在发出数据更新的请求给分布式系统之后,观察返回的数据是否更新。为了更好使用、理解分布式系统,不妨换个视角,观察在服务端是怎么实现一致性的。因为分布式算法还是比较难的,柿子先挑软的捏,笔者在这篇文章先对分布式中一致性算法的基石原理——鸽巢原理进行介绍:...
2020-04-10 17:30:46
1641
1
原创 计算机网络知识框架总结(复习)
计算机网络协议入门(复习)前言上大二的时候学习了计算机网络,已经复习好几遍了,依然会忘记一些内容,虽然每次复习的时候都能重新认识到新的知识,但脑海中没有形成一个大致的框架,在复习的时候会没有查漏补缺的效果。笔者打算写一篇学习笔记,初步搭建计算机网络的知识框架,从总体把握,读者们大致能清楚计算机网络协议之间的关系。主要参考了阮一峰老师的文章:互联网协议入门(一),写得很棒。本文在这基础上加入...
2020-04-08 17:09:13
3116
原创 分布式BASE理论:数据一致性模型有哪些?
前言在上一篇的《分布式CAP理论:为什么CAP理论中的三个指标不能同时满足呢?》中,提到了CAP中只能三者择其二,有CP(一致性+分区容错性)和AP(可用性+分区容错性)两种选择。一般来说,放弃强一致性,追求分区容错性和可用性,是很多分布式系统设计的选择。在工程实践中,基于CAP定义逐步演化出了Base理论。本文主要对以下两个问题进行介绍:Base理论有哪些内容?Base理论下的一致性模...
2020-04-05 17:31:22
972
原创 【Java集合】除了Vector,还有另一个提供线程安全的List是什么?
前言金三银四,势在必得。我自信又有点紧张地走进了面试现场。面试官:“我们先聊点Java基础吧,除了Vector,还有另一个提供线程安全的List是什么?”。我:“我知道可以通过Collections.synchronizedList()方法,将线程不安全的List转给线程安全。"面试官笑着说:“那么Collections.synchronizedList()的实现原理是什么?“。我:“额...
2020-04-04 10:45:51
1022
原创 分布式CAP理论:为什么CAP理论中的三个指标不能同时满足呢?
文章目录前言分布式系统的特点分布式系统技术是用来解决什么问题的呢?CAP代表什么含义一致性(Consistency)可用性(Availability)分区容错性(Partition Tolerance)CAP理论的证明CAP理论的应用CP和AP架构的取舍CP架构:放弃可用性,追求一致性和分区容错性AP架构:放弃强一致性,追求分区容错性和可用性结语前言为什么CAP理论中的三个指标不能同时满足呢?...
2020-04-03 09:23:35
5588
原创 【Java集合】LinkedList的使用及原理
前言在【Java集合】ArrayList的使用及原理中,我们介绍了关于ArrayList的相关原理。无论是在面试还是在平时应用中,我们经常将LinkedList与ArrayList进行比较,因为他们虽然都是List主力军,但因其结构的不同,其应用场景也不太相同。本文首先对LinkedList的原理进行介绍,而后再介绍二者的不同。(本文中若无特地说明,LinkedList版本基于JDK 1.8)。...
2020-03-30 10:29:14
893
原创 leetcode刷题:我好像戳到奇妙的知识点了——Trie树
前言3月份Leetcode发起了"每日一题"的打卡活动,本人参加过一次之后,就觉得这活动真有意思,然后就忘了,直到活动快结束了才想起来。今天戳的题目是:820. 单词的压缩编码题目是这样的,给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#...
2020-03-29 13:29:52
234
原创 【Java集合】ArrayList的使用及原理
前言ArrayList属于Collection集合类大家族的一员,是分支List中的主力军之一。ArrayList的使用非常广泛,无论是在数据库表中查询,还是网络信息爬取都需要使用,所以了解ArrayList的原理就十分重要了(本文中若无特地说明,ArrayList版本基于JDK 1.8)。(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)如何定义一个ArrayList?Arr...
2020-03-19 16:29:48
1098
原创 你真的有好好了解过序列化吗:Java序列化实现的原理
前言在开发过程中经常会对实体进行序列化,但其实我们只是在“只知其然,不知其所以然”的状态,很多时候会有这些问题:什么是序列化和反序列化?为什么要序列化?怎么实现序列化?序列化的原理是什么呢?序列化时应注意什么?如果你也有这些疑问,不妨看看本文?(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)什么是序列化和反序列化?Java序列化是指把Java对象转换为字节序列的...
2020-03-17 17:46:37
596
原创 推荐Idea十款优秀插件(提高开发效率)
前言Idea作为我们日常使用的编辑工具之一,因其强大和人性化而被各大神推荐。笔者闲来无事学了下Idea的操作,在找插件的过程中发现了一些宝藏插件,对我们日常开发或者提升代码功力都挺有帮助的吧,特此选出十个来推荐给大家~10. FindBugs虽说Idea本身提供的代码检查工具已经很强大了,但Idea提供的更多是规范性的检查,如果需要深入地检查异常,可以使用此插件。使用方式:右键点击项目、包...
2020-03-17 14:24:20
8369
原创 关于String的这9个问题,值得一看
前言Java中String的应用无处不在,无论是算法题还是面试题,String都独占一方,甚至是无数面试者心中难以名状的痛。本文着重对String(若无特地说明,默认是JDK 1.8版本)常见的问题来进行介绍:字符串的不可变性JDK 1.6和JDK 1.7中substring的原理及区别replaceFirst、replaceAll、replace区别String对“+”的“重载”字...
2020-03-15 14:03:08
736
2
原创 初识配置中心Apollo(携程)的设计原理
前言Apollo是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端。本文介绍了配置的概念、配置中心的必要性以及Apollo的特点,着重拆解分析Apollo客户端的设计原理,了解Apollo的原理,也能帮助读者更加能够理解配置中心的实现原理。(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)一、什么是配置配置是程序运行时...
2020-03-12 19:12:57
1018
原创 Java的基本数据类型、拆装箱(深入版)
前言本文主要总结了Java的八种基本数据类型以及它们在虚拟机中的标记,还会对:“什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?”这些问题进行解释。在Java中已经提供基本数据类型,为什么还要提供包装类型?Integer的缓存机制是什么样的?(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)八种基本数据类型、包装类Java基本数据类型如下:类型值域...
2020-03-11 17:17:39
669
原创 Java的访问级别(深入版)
前言本文会对Java的四种访问级别进行总结,以及解释访问权限在类加载的哪一步实施。(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)四种访问级别Java中有四种访问级别,分别是private、protected、缺省和public,它们之间的访问级别区别如下表所示:ModifierClassPackageSubclassWorldpublicYY...
2020-03-11 15:06:43
630
原创 Java的成员变量、局部变量(深入版)
前言在《Java的构造函数与默认构造函数(深入版)》介绍Java对象初始化过程时,提到了实例变量。本文介绍Java中包括实例变量在内的几种变量,以及它们的作用域。(咳,本文结语有一个小总结哦~)(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)变量初学Java时,我们一般会将变量分为成员变量和局部变量,类中方法外的变量是成员变量,类中方法内的变量是局部变量。举个栗子:publi...
2020-03-09 17:56:01
707
原创 Java的构造函数与默认构造函数(深入版)
前言我们知道在创建对象的时候,一般会通过构造函数来进行初始化。在Java的继承(深入版)有介绍到类加载过程中的验证阶段,会检查这个类的父类数据,但为什么要怎么做?构造函数在类初始化和实例化的过程中发挥什么作用?(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)构造函数与默认构造函数构造函数构造函数,主要是用来在创建对象时初始化对象,一般会跟new运算符一起使用,给对象成员变量赋...
2020-03-07 22:39:11
9292
1
原创 Java的多态(深入版)
前言面向对象的三大特性:封装、继承、多态。在这三个特性中,如果没有封装和继承,也不会有多态。那么多态实现的途径和必要条件是什么呢?以及多态中的重写和重载在JVM中的表现是怎么样?(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)多态多态是同一个行为具有多个不同表现形式或形态的能力。举个栗子,一只鸡可以做成白切鸡、豉油鸡、吊烧鸡、茶油鸡、盐焗鸡、葱油鸡、手撕鸡、清蒸鸡、叫花...
2020-03-06 21:14:51
7635
18
原创 Java的继承(深入版)
前言前文我们了解了面向对象的三大特征:封装、继承、多态。那么在Java中是如何展现继承的特性呢?对于子类继承于父类时,又有什么限制呢?在此解答这些问题之后,我们再了解下类的加载过程,加深对继承的了解。(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)引入继承假如我们有两个类:生物类、猫类。生物类:class Animal{ private String name; p...
2020-03-05 20:52:49
619
原创 “Java有值传递和引用传递”为什么错了?
前言初学Java的时候,老师在课堂上说“Java有值传递和引用传递”,但网上“Java只有值传递”的呼声很高。本人在查找资料的过程中,在这两个说法之间反复横跳。经过本人的整理后,其实还真的是Java只有值传递。什么是值传递?什么是引用传递?首先,我们先明确一下值传递和引用传递的定义(来自维基百科)。值传递When a parameter is passed by value, the...
2020-03-04 18:16:12
745
原创 不来了解下JVM支持的语言有哪些?
前言与上文我们知道,JVM作为一个可以将Class文件转换成机器码的平台,只要安装了虚拟机,就可以在上面运行字节码。同样,只要其他原因在编译过程中生成了字节码,那么照样可以通过JVM在不同平台上运行,这就实现了跨平台能力了。目前,可以直接在JVM上运行的语言除了Java之外有很多,本文主要介绍九种。正如平时我们了解一个语言时通常会先学这个语言里最经典的一句话——【我爱你】。本文将每种语言通过...
2020-03-03 15:21:13
5847
原创 Java的平台无关性是怎么实现的?
前言在接触Java的时候,经常能听到Java的特点之一就是:“一次编译,到处运行(Write Once, Run Anywhere)”。这种特点对于Java来说,有什么好处呢?Java又是怎么支持这一特性呢?本文简单对这个特点简单介绍一下。什么是平台无关性?平台无关性,就是在一种语言在计算机运行时,不受其平台的约束。换句话说,源码不做任何修改就可以在多个平台上运行。平台无关性有什么好处...
2020-03-01 17:19:59
3888
原创 面向对象的三大基本特征和五大基本原则
前言前文提到,面向对象的三个特征:封装、继承、多态。那么面向对象是怎么体现这三个特征呢?关于五大基本原则,个人找资料的时候看得头都大了,对新手(如我)来说还是比较有理解难度的,本篇用较为简单的表述来帮助理解,想先看进阶版(完全版)的可以先移步:牢记面向对象五个基本原则面向对象的三大基本特征1. 封装封装,就是将客观事物抽象为逻辑实体,实体的属性和功能相结合,形成一个有机的整体。并对实体的...
2020-02-29 22:57:55
2259
原创 面向对象与面向过程
前言如果你总是对面向对象和面向过程傻傻分不清,这篇博客尽量会用通俗的方式来讲解。面向过程与面向对象的区别面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了;而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。面向过程思想偏向于我们做一件事的流程,首先做什么,其...
2020-02-29 00:01:47
540
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人