自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Thomas.Sir’s Article

世事洞明皆学问,人情练达即文章!

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 JavaIO 面试题

1. Java字节流与字符流2. 字节流和字符流哪个好?怎么选择?大多数情况下使用字节流会更好,因为大多数时候 IO 操作都是直接操作磁盘文件,所以这些流在传输时都是以字节的方式进行的(图片等都是按字节存储的)如果对于操作需要通过 IO 在内存中频繁处理字符串的情况使用字符流会好些,因为字符流具备缓冲区,提高了性能。3. 什么是缓冲区?有什么作用?缓冲区就是一段特殊的内存区域,很多情况下当程序需要频繁地操作一个资源(如文件或数据库)则性能会很低,所以为了提升性能就可以将一

2022-04-22 11:46:11 4319

原创 您知道Java8有哪些新特性吗?

Java8新特性概览​Lambda表达式 函数式接口 方法引用与构造器引用 Stream API 接口的默认方法与静态方法 新时间日期API 其他新特性最广泛的新特性是Lambda表达式和Stream API。Java8优点​1. 什么是Lambda表达式?Lambda表达式是一个匿名函数,使用Lambda表达式能够使Java的语言表达能力得到提升。匿名内部类:Comparator<Integer> com = new Compara

2022-04-20 07:59:02 443

原创 08:对比Vector、ArrayList、LinkedList有何区别?

我们在日常的工作中,能够高效地管理和操作数据是非常重要的。由于每个编程语言支持的数据结构不尽相同,比如我最早学习的 C 语言,需要自己实现很多基础数据结构,管理和操作会比较麻烦。相比之下,Java 则要方便的多,针对通用场景的需求,Java 提供了强大的集合框架,大大提高了开发者的生产力。今天我要问你的是有关集合框架方面的问题,对比 Vector、ArrayList、LinkedList 有何区别?典型回答这三者都是实现集合框架中的 List,也就是所谓的有序集合,因此具体功能也比较近似

2022-03-30 22:24:05 159

原创 07:int和Integer有什么区别?

典型回答int 是我们常说的整形数字,是 Java 的 8 个原始数据类型(Primitive Types,boolean、byte 、short、char、int、float、double、long)之一。Java 语言虽然号称一切都是对象,但原始数据类型是例外。Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。在 Java 5 中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java

2022-03-30 07:15:03 174

原创 01:面试的正确姿势你掌握了吗?

目录一、如何准备面试?(2页简历;STAR;重点突出;)二、面试如何答问?一、如何准备面试?(2页简历;STAR;重点突出;)1、简历写作技巧1.1)简历技巧--排板(既不要密密麻麻,也不要松松垮垮!)1.2)简历技巧--分类(分类维度:中间件、存储、框架、数据库、缓存、编程语言等)例如上述简历可以改为:1)熟练掌握Redis和Kafka的应用以及底层原理,能够基于业务需求设计相应方案; 2)熟练掌握ZooKeeper、Nacos、Dubbo.

2022-03-27 00:18:40 343

原创 05:消息队列篇(8)

目录一、MQ有什么用?有哪些具体的使用场景?二、如何进行产品选型?三、如何保证消息不丢失?四、如何保证消息消费的幂等性?五、如何保证消息的顺序?六、如何保证消息的高效读写?七、使用MQ如何保证分布式事务的最终一致性?八、让你设计一个MQ,你会如何设计?一、MQ有什么用?有哪些具体的使用场景? MQ: MessageQueue,消息队列。 队列是一种FIFO先进先出的数据结构。消息由生产者发送到MQ进行排队,然后由消费者对消息进行处理。QQ、 微信 就是典型的M

2022-03-26 15:49:39 6420

原创 06:缓存篇(6)

一、为什么使用缓存? 1、高性能 2、高可用 二、什么是缓存穿透?缓存击穿?缓存雪崩? 怎么解决? 1. 缓存穿透: 缓存中查不到,数据库中也查不到。 解决方案: 1)对参数进行合法性校验。2)将数据库中没有查到结果的数据也写入到缓存。这时要注意为了防止Redis被无用的Key占满,这一类缓存的有效期要设置得短一点。 3)引入布隆过滤器,在访问Redis之前判断数据是否存在。 要注意布隆过滤器存在一定的误判率,并且,布隆过滤器只能加数据不能减数据。.

2022-03-26 15:05:06 1076

原创 04:JVM调优篇(6)

目录一、说一说JVM的内存模型二、JAVA类加载的全过程是怎样的?什么是双亲委派机制?有什么作用?三、怎么确定一个对象到底是不是垃圾? 什么是GC Root?四、JVM有哪些垃圾回收算法?五、JVM有哪些垃圾回收器?他们都是怎么工作的?什么是STW?他都发生在哪些阶段?什么是三色标记?如何解决错标记和漏标记的问题?为什么要设计这么多的垃圾回收器?六、如何进行JVM调优?JVM参数有哪些?怎么查看一个JAVA进程的JVM参数?谈谈你了解的JVM参数。如果一个java程序每次运行一段时间

2022-03-25 21:45:32 137

原创 03:JAVA网络通信篇(5)

目录一、TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?二、JAVA有哪几种IO模型?有什么区别?三、JAVA NIO的几个核心组件是什么?分别有什么作用?四、select,poll和epoll有什么区别?五、描述下HTTP和HTTPS的区别一、TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次? TCP Transfer Control Protocol 是一种面向连接的、可靠的、传输层通信协议。 特点: 好比是打电话:面向连接的,点对点的通信,

2022-03-25 15:51:40 124

原创 02:Java并发篇(6)

目录一、Java如何开启线程?怎么保证线程安全?二、 Volatile和Synchronized有什么区别?Volatile能不能保证线程安全?DCL(DoubleCheck Lock)单例为什么要加Volatile?三、JAVA线程锁机制是怎样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?四、谈谈你对AQS的理解。AQS如何实现可重入锁?五、有A,B,C三个线程,如何保证三个线程同时执行?如何在并发情况下保证三个线程依次执行?如何保证三个线程有序交错进行?六、如何.

2022-03-25 15:29:41 119

原创 07:微服务篇(5)

一、谈谈你对微服务的理解,微服务有哪些优缺点? 微服务是由Martin Fowler大师提出的。微服务是一种架构风格,通过将大型的单体应用划分为比较小的服务单元,从而降低整个系统的复杂度。 优点: 1)服务部署更灵活:每个应用都可以是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性降低。 2)技术更新灵活:在大型单体应用中,技术要进行更新,往往是非常困难的。而微服务可以根据业务特点,灵活选择技术栈。 3)应用的性能得到提高: 大型单体应用中,往往启动就会成为一个很大的难关。而采

2022-03-25 10:46:57 290

原创 11:安全验证篇(7)

一、什么是认证和授权?如何设计一个权限认证框架? 认证: 就是对系统访问者的身份进行确认。 用户名密码登录、 二维码登录、手机短信登录、指纹、刷脸......授权:就是对系统访问者的行为进行控制。授权通常是在认证之后,对系统内的用户隐私数据进行保护。后台接口访问权限、前台控件的访问权限。 RBAC模型: 主体 -》 角色 -》 资源 -》访问系统的行为。 认证和授权也是对一个权限认证框架进行扩展的两个主要的方面。 二、Cookie和Ses.

2022-03-25 09:36:11 381

原创 10:搜索引擎篇(6)

一、什么是倒排索引?有什么好处? 正排索引:书本的目录倒排索引:书本的索引图书和搜索引擎的对比图书:正牌索引-目录页倒排索引-索引页搜索引擎:正排索引-文档Id到文档内容和单词的关联倒排索引-单词到文档Id的关系倒排索引的核心组成倒排索引包含两个部分:(1)单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系(2)倒排列表(Posting List)- 记录了单词对应的文档结合,由倒排索引项组成倒排索引项:> 文档ID

2022-03-25 08:38:39 2354

原创 09:MySQL数据库篇(7)

一、MySQL有哪几种数据存储引擎?有什么区别? MySQL中通过show ENGINES指令可以看到所有支持的数据库存储引擎。 最为常用的就是MyISAM 和InnoDB 两种。 MyISAM和InnDB的区别: 1、存储文件。 MyISAM每个表有两个文件。 MYD和MYISAM文件。 MYD是数据文件。 MYI是索引文件。 而InnDB每个表只有一个文件,idb。 2、InnoDB支持事务,支持行级锁,支持外键。 3、InnoDB支持XA事务 4、InnoDB支持savePoi

2022-03-25 05:08:23 213

原创 08:Spring底层相关篇(7)

一、什么是Spring?谈谈你对IOC和AOP的理解?Spring: 是一个企业级java应用框架,他的作用主要是简化软件的开发以及配置过 程,简化项目部署环境。 Spring的有点: 1、Spring低侵入设计,对业务代码的污染非常低。 2、Spring的DI机制将对象之间的关系交由框架处理,减少组件的耦合。 3、Spring提供了AOP技术,支持将一些通用的功能进行集中式管理,从而提供更 好的复用。 4、Spring对于主流框架提供了非常好的支持。 IOC就是控制反转

2022-03-25 03:51:07 176

原创 几种常用限流算法之计数器算法/漏桶算法/令牌桶算法对比?

定义 优点 缺点 实现方式 计数器算法 从第一个请求进来开始计时,在接下去的1s内,每来一个请求,就把计数加1,如果累加的数字达到了100,那么后续的请求就会被全部拒绝。等到1s结束后,把计数恢复成0,重新开始计数。 简单、方便 突刺现象 AutomicLong AutomicAdapter 漏桶算法 算法内部有一个容器,类似生活用到的漏斗,当请求进来时,相当于水倒入漏斗,然后从下端小口慢慢匀速的流出。 可以消除突刺现象 不管上...

2022-03-24 12:08:09 446

原创 如何优雅的理解云原生?

定义云原生是一种新型的技术体系,是云计算未来的发展方向。特点云原生应用也就是面向“云”设计的应用,在使用云原生技术后,开发者无需考虑底层的技术实现,可以充分发挥云平台的弹性和分布式优势,实现快速部署、按需伸缩、不停机交换等。技术域1. DevopsDevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试

2022-03-23 15:26:16 497

原创 如何产出规范、安全、高质量的代码?

代码质量扫描工具1. Checkstyle这是常用于 Java 项目的扫描工具,检查源代码是否与代码规范相符,检查项目主要包括:Javadoc 注释、imports、过长的类和方法、空格、重复文件、圈复杂度等,默认使用 sun 的代码规则,也可以配置自定义的代码规则,例如阿里就发布了相应的检查规则。2. FindBugs通过 Bug Patterns 的概念,寻找代码中可能出现的 Bug,检查项目主要包括:不良编程习惯导致的问题、性能问题、安全问题、线程问题等。例如,应使用 equals 判

2022-03-22 13:24:28 150

转载 高可用的本质

本文采用“高可用是什么,为什么要高可用,怎么做高可用,为什么这么做,软件风险又在哪里”的逻辑来介绍。一 高可用是一种控制风险的能力高可用是一种面向风险设计,使系统具备控制风险,提供更高的可用性的能力。二 为什么要高可用对于一个公司而言,“为什么要高可用”可以完整理解为“公司为什么要(做系统)高可用”。以公司为对象,从内看包括:人,软件(物),硬件(物);从外看包括:客户,股东,社会;从自身看包括:公司。高可用的大前提:所有事物都不是100%可靠的..

2022-03-20 11:38:45 163

原创 Tomcat中的对象池技术?

public class SynchronizedStack<T> { //内部维护一个对象数组,用数组实现栈的功能 private Object[] stack; //这个方法用来归还对象,用synchronized进行线程同步 public synchronized boolean push(T obj) { index++; if (index == size) { if (limit == -1.

2022-03-15 13:09:41 643

原创 Lvs & Nginx 对比?

lvs和nginx都是现在很主流的负载均衡方式,他们各有优缺点,在生产环境需要根据其特点做出选择: LVS Nginx 四层 四层/七层 抗负载能力 强 弱 配置性 可配置性低 同时也减少了人为出错的概率 可配置性高 可以配置一些高级功能 稳定性 稳定性高 有完整的双机热备方案 稳定性低,有单机故障 无现成的双机热备方案 网络架

2022-03-15 12:50:50 3588

原创 Spring Boot如何使用内嵌式的Tomcat和Jetty?

Spring Boot 中 Web 容器相关的接口既然要支持多种 Web 容器,Spring Boot 对内嵌式 Web 容器进行了抽象,定义了 WebServer 接口:public interface WebServer { void start() throws WebServerException; void stop() throws WebServerException; int getPort();}各种 Web 容器比如 Tomcat 和 Jetty

2022-03-15 08:25:30 390

原创 您知道十万级用户到亿级用户系统架构是如何演进的吗?

上述三张图概要描述了,IM架构的演进过程!

2022-03-14 13:01:18 3893

原创 Java 中单例模式的正确用法?

单例模式指的是,保证一个类只有一个实例,并且提供一个全局可以访问的入口。那么我们为什么需要单例呢,其中一个理由,那就是为了节省内存、节省计算。很多情况下,我们只需要一个实例就够了,如果出现了更多的实例,反而属于浪费。举个例子:public class ExpensiveResource { public ExpensiveResource() { field1 = // 查询数据库 field2 = // 然后对查到的数据做大量计算 fiel

2022-03-14 03:47:52 663

原创 业务架构图、前端架构图、系统架构图、部署架构图、系统序列图、区别?

2022-03-14 02:51:05 5348

原创 String、StringBuffer、StringBuilder有什么区别?

回答(1)String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。(2)StringBuffer 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append 或者 add 方法,把字符串添

2022-03-13 11:53:50 167

原创 强引用、软引用、弱引用、幻象引用有什么区别?

回答不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了,当然具体回收时机还是要看垃圾收集策略。软引用(SoftReference),是一种相对强引用弱化一些的引用,可以

2022-03-12 00:14:24 154

原创 final、finally、 finalize 不同之处?

回答final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。finally 则是 Java 保证重点代码一定要被执行的一种机制。我们可以使用 try-finally 或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlock 锁等动作。finalize 是基础类 java.lang.Object 的一个方法,它的设计

2022-03-12 00:00:25 100

原创 Exception和Error的区别?

对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?回答Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Error 是指在正常情

2022-03-11 23:31:16 98

原创 谈谈您对Java平台的理解?

“Write once, run anywhere”,这句话您是怎么理解的?“Java 是解释执行”,这句话是否正确?一些经典的回答是这样的1. Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC, Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操

2022-03-11 21:59:48 90

原创 Mac版JProfiler+JVM性能调优工具介绍及在Idea上的应用

一、主要功能简介1.内存剖析JProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。所有对象 显示类或在状况统计和尺码信息堆上所有对象的包。你可以标记当前值并显示差异值。 记录对象 Record objects 显示类或所有已记录对象的包。你可以标记出当前值并且显示差异值。 分配访问树 Allocation call tree 显示一棵请求树或者方法、类、包或...

2022-03-04 10:40:32 2471

原创 分布式事务XA两阶段提交协议简析

因为事务需要实现ACID,即原子性、一致性、隔离性、持久性,所以需要采用一定的机制来保证,通常采用的是分阶段提交的方式。 XA:XA协议,规定事务管理器和资源管理器接口,采用二阶段提交协议。一阶段提交协议 一阶段提交协议相对简单,如下图:当然,前提是开启了事务,然后在应用程序发出提交/回滚请求后,数据库执行操作,而后将成功/失败返回给应用程序,程序继续执行。 一阶段提交协议相对简单,简单带来的优点就是,它不用再与其他的对象...

2020-12-03 18:09:00 616

转载 分布式中hash取模算法

hash算法单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。良好的分布式cahce系统中的一致性hash算法应该满足以下几个方面: 平衡性(Balance)平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。 单调性(Monoto...

2020-12-03 11:08:41 1362

原创 springboot 整合 redis 报 io.netty.util.internal.OutOfDirectMemoryError

报错页面:报错场景:在使用jmeter进行压测 从redis 获取 商品分类结果,使用的是 spring boot 整合的 redis启动器,会报以上错误。(只有在压力并发测试的时候,才能测试错以为报错)1 2报错原因:springboot2.0 整合redis 默认使用的是 lettuce 操作的reids ,lettuce底层使用的netty进行网络通信 lettuce 的bug 导致netty堆外内存溢出, netty如果没有指定堆外内存,那么netty

2020-12-02 11:01:56 750

原创 SpringBoot 实现并发登录人数控制

今天跟大家分享SpringBoot 实现并发登录人数控制的知识。1SpringBoot 实现并发登录人数控制通常系统都会限制同一个账号的登录人数,多人登录要么限制后者登录,要么踢出前者,Spring Security 提供了这样的功能,本文讲解一下在没有使用Security的时候如何手动实现这个功能本文借鉴了https://jinnianshilongnian.iteye.com/blog/2039760如果你是使用 Shiro + Session 的模式,可以阅读此文demo.

2020-12-02 11:01:15 826

转载 如何用git命令行上传本地代码到github

注意:安装的前提条件是配置好Git的相关环境或者安装好git.exe,此处不再重点提及 上传的步骤:    本文采用git 命令界面进行操作,先执行以下两个命令,配置用户名和email【设置用戶名和e-mail地址。这是非常重要的,因為每次Git提交都会使用该信息。它被永遠的嵌入到了你的提交中】 git config --global user.ema...

2019-08-03 03:43:15 4164

转载 搭建Windows系统的Jenkins持续集成环境

Jenkins自动化部署:几条具体的思路:1、开发人员将产品开发完后提交到集成代码库(git/svn)托管2、通过Jenkins创建服务项目3、从git/svn上拉取最新的master代码分支...

2019-08-03 02:47:55 179

Mac版jvm性能调优工具+内存监控+系统性能分析+Java开发助手+三高性能分析必备+Jprofiler_12.0.4

软件主要功能如下: (1)监控堆内存的占用情况和创建对象实例的数量,找出内存泄露的原因; (2)监控占用CPU较多的方法; (3)监控线程的阻塞和死亡; (4)监控GC的耗时;

2022-03-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除