![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
face
IT瘾君
一招入此门,从此了红尘…
展开
-
1.Spring常见问题总结
1. 什么是 Spring 框架?Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是:核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。比如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和 Context 组件是实现IOC和依赖注入的基础,AO原创 2020-08-04 17:16:32 · 196 阅读 · 0 评论 -
RestFul API 简明教程
一、重要概念实际上 REST 的全称是 Resource Representational State Transfe ,直白地翻译过来就是 “资源”在网络传输中以某种“表现形式”进行“状态转移” 。**资源(Resource) :**我们可以把真实的对象数据称为资源。一个资源既可以是一个集合,也可以是单个个体。比如我们的班级 classes 是代表一个集合形式的资源,而特定的 class 代表单个个体资源。每一种资源都有特定的 URI(统一资源定位符)与之对应,如果我们需要获取这个资源,访问这个 UR原创 2020-08-04 14:09:55 · 900 阅读 · 0 评论 -
Redis集群入门实践教程
一、Redis 集群概述Redis 主从复制到 目前 为止,我们所学习的 Redis 都是 单机版 的,这也就意味着一旦我们所依赖的 Redis 服务宕机了,我们的主流程也会受到一定的影响。所以一开始我们的想法是:搞一台备用机。这样我们就可以在一台服务器出现问题的时候切换动态地到另一台去:幸运的是,两个节点数据的同步我们可以使用 Redis 的 主从同步 功能帮助到我们。后来因为某种神秘力量,Redis 老会在莫名其妙的时间点出问题 (比如半夜 2 点),我总不能 24 小时时刻守在电脑旁边切换原创 2020-08-04 13:22:22 · 291 阅读 · 0 评论 -
Redis 中的发布/订阅功能
发布/ 订阅系统 是 Web 系统中比较常用的一个功能。简单点说就是 发布者发布消息,订阅者接受消息,这有点类似于我们的报纸/ 杂志社之类的:虽然可以使用一个 list 列表结构结合 lpush 和 rpop 来实现消息队列的功能,但是似乎很难实现实现 消息多播 的功能:为了支持消息多播,Redis 不能再依赖于那 5 种基础的数据结构了,它单独使用了一个模块来支持消息多播,这个模块就是 PubSub,也就是 PublisherSubscriber (发布者/ 订阅者模式)。PubSub 简介我原创 2020-07-24 17:01:22 · 3637 阅读 · 0 评论 -
分布式锁深入探究 、Redlock分布式锁 、如何做可靠的分布式锁,Redlock真的可行么
分布式锁深入探究一、分布式锁简介锁 是一种用来解决多个执行线程 访问共享资源 错误或数据不一致问题的工具。为何需要分布式锁一般情况下,我们使用分布式锁主要有两个场景:1.避免不同节点重复相同的工作:比如用户执行了某个操作有可能不同节点会发送多封邮件;2.避免破坏数据的正确性:如果两个节点在同一条数据上同时进行操作,可能会造成数据错误或不一致的情况出现;Java 中实现的常见方式上面我们用简单的比喻说明了锁的本质:同一时间只允许一个用户操作。所以理论上,能够满足这个需求的工具我们都能够使用原创 2020-07-14 18:15:12 · 2841 阅读 · 0 评论 -
跳表
一、跳跃表简介跳跃表(skiplist)是一种随机化的数据结构,是一种可以于平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下完成,以下是一个典型的跳跃表例子:我们在上一篇中提到了 Redis 的五种基本结构中,有一个叫做 有序列表 zset 的数据结构,它类似于 Java 中的 SortedSet 和 HashMap 的结合体,一方面它是一个 set 保证了内部 value 的唯一性,另一方面又可以给每个 value 赋予一个排序的权重值 score,来达到 排序 的目的。原创 2020-07-14 15:17:09 · 202 阅读 · 0 评论 -
Redis 5种基本数据结构
在线redis操作http://try.redis.io/#run1)设置和获取键值对SET key valueOKGET key"value"值可以是任何种类的字符串(包括二进制数据),例如你可以在一个键下保存一张 .jpeg 图片,只需要注意不要超过 512 MB 的最大限度就好了。当 key 存在时,SET 命令会覆盖掉你上一次设置的值:SET key newValueOKGET key"newValue"另外你还可以使用 EXISTS 和 DEL 关键字来查询是否存在和删除原创 2020-07-14 13:53:23 · 185 阅读 · 0 评论 -
Redis 常见问题总结
简单说说有哪些本地缓存解决方案?那本地缓存的方案有哪些呢?一:JDK 自带的 HashMap 和 ConcurrentHashMapConcurrentHashMap 可以看作是线程安全版本的 HashMap ,两者都是存放 key/value 形式的键值对。但是,大部分场景来说不会使用这两者当做缓存,因为只提供了缓存的功能,并没有提供其他诸如过期时间之类的功能。一个稍微完善一点的缓存框架至少要提供:过期时间、淘汰机制、命中率统计这三点。二:Ehcache 、 Guava Cache 、Spring原创 2020-07-13 18:52:18 · 405 阅读 · 0 评论 -
MySql常见问题总结
存储引擎查看MySQL提供的所有存储引擎mysql> show engines;可以查看出 MySQL 当前默认的存储引擎是InnoDB,并且在5.7版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。查看MySQL当前默认的存储引擎mysql> show variables like '%storage_engine%';查看表的存储引擎show table status like "table_name" ;MyISAM和In原创 2020-07-10 18:29:12 · 449 阅读 · 0 评论 -
一条SQL语句执行得很慢的原因有哪些?
一、分类讨论一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论。1、大多数情况是正常的,只是偶尔会出现很慢的情况。2、在数据量不变的情况下,这条SQL语句一直以来都执行的很慢。针对这两种情况,我们来分析下可能是哪些原因导致的。二、针对偶尔很慢的情况一条 SQL 大多数情况正常,偶尔才能出现很慢的情况,针对这种情况,我觉得这条SQL语句的书写本身是没什么问题的,而是其他原因导致的,那会是什么原因呢?1、数据库在刷原创 2020-07-10 18:07:46 · 296 阅读 · 0 评论 -
MySQL高性能优化规范建议
数据库命令规范•所有数据库对象名称必须使用小写字母并用下划线分割•所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)•数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符•临时库表必须以 tmp_为前缀并以日期为后缀,备份表必须以 bak_为前缀并以日期 (时间戳) 为后缀•所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低)数据库基原创 2020-07-10 17:18:43 · 186 阅读 · 0 评论 -
一条SQL语句在MySQL中如何执行的
MySQL 由那些组件组成以及这些组件的作用是什么,分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。1.1 MySQL 基本架构概览•连接器: 身份认证和权限相关(登录 MySQL 的时候)。•查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。•分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你原创 2020-07-10 16:54:01 · 118 阅读 · 0 评论 -
计算机网络常见面试题
一 OSI与TCP/IP各层的结构与功能,都有哪些协议?1.1 应用层应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文域名系统是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式原创 2020-07-09 18:17:18 · 593 阅读 · 0 评论 -
Java8 foreach指南
1 概述在Java 8中引入的forEach循环为程序员提供了一种新的,简洁而有趣的迭代集合的方式。在本文中,我们将看到如何将forEach与集合一起使用,它采用何种参数以及此循环与增强的for循环的不同之处。2 基础知识public interface Collection<E> extends Iterable<E>Collection 接口实现了 Iterable 接口,而 Iterable 接口在 Java 8开始具有一个新的 API:void forEach(原创 2020-07-09 15:57:39 · 300 阅读 · 0 评论 -
Java 8 新特性
如何使用默认接口方法,lambda表达式,方法引用和可重复注释。 在本文的最后,您将熟悉最新的 API 更改,如流,函数式接口(Functional Interfaces),Map 类的扩展和新的 Date API。接口的默认方法Java 8使我们能够通过使用 default 关键字向接口添加非抽象方法实现。 此功能也称为虚拟扩展方法。第一个例子:interface Formula{ double calculate(int a); default double sqrt(int原创 2020-07-08 14:50:36 · 208 阅读 · 0 评论 -
NIO与AIO学习
Java NIO 概览NIO简介:Java NIO 是 java 1.4, 之后新出的一套IO接口NIO中的N可以理解为Non-blocking,不单纯是New。NIO的特性/NIO与IO区别:1)IO是面向流的,NIO是面向缓冲区的;2)IO流是阻塞的,NIO流是不阻塞的;3)NIO有选择器,而IO没有。读数据和写数据方式:从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数...原创 2019-10-22 17:41:01 · 344 阅读 · 1 评论 -
IO流学习总结
java 中 IO 流分为几种?按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的角色划分为节点流和处理流。Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0流的40多个类都是从如下4个抽象类基类中派生出来的。InputStream/Reader: 所有的输入流的基类,前者是字...原创 2019-10-22 15:01:10 · 166 阅读 · 0 评论 -
BIO,NIO,AIO 总结
同步与异步同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。阻塞和非阻塞阻塞: ...原创 2019-10-22 14:47:40 · 104 阅读 · 0 评论 -
类加载器
所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存JVM 中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoader:1.BootstrapClassLoader(启动类加载器) :最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录...原创 2019-10-22 13:37:29 · 129 阅读 · 0 评论 -
类加载过程
Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。加载类加载过程的第一步,主要完成下面3件事情:1.通过全类名获取定义此类的二进制字节流2.将字节流所代表的静态存储结构转换为方法区的运行时数据结构3.在...原创 2019-10-22 11:38:15 · 114 阅读 · 0 评论 -
类文件结构
一 概述在 Java 中,JVM 可以理解的代码就叫做*字节码(*即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机...原创 2019-10-21 17:57:06 · 204 阅读 · 0 评论 -
JDK 监控和故障处理工具
JDK 命令行工具这些命令在 JDK 安装目录下的 bin 目录下:jps (JVM Process Status): 类似 UNIX 的 ps 命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;jstat( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据;jinfo (Configura...原创 2019-10-21 17:19:00 · 617 阅读 · 0 评论 -
JVM 垃圾回收
本节常见面试题1、如何判断对象是否死亡(两种方法)。2、简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。3、如何判断一个常量是废弃常量4、如何判断一个类是无用的类5、垃圾收集有哪些算法,各自的特点?6、HotSpot 为什么要分为新生代和老年代?7、常见的垃圾回收器有那些?8、介绍一下 CMS,G1 收集器。9、Minor G...原创 2019-10-21 16:41:36 · 136 阅读 · 0 评论 -
Java 内存区域详解
如果没有特殊说明,都是针对的是 HotSpot 虚拟机。常见面试题基本问题介绍下 Java 内存区域(运行时数据区)Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么)对象的访问定位的两种方式(句柄和直接指针两种方式)拓展问题String 类和常量池8 种基本类型的包装类和常量池一 概述对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像...原创 2019-10-16 15:29:40 · 284 阅读 · 0 评论 -
AQS 原理以及 AQS 同步组件总结
1 AQS 简单介绍AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQu...原创 2019-10-15 11:46:06 · 248 阅读 · 0 评论 -
JUC 中的 Atomic 原子类总结
1 Atomic 原子类介绍Atomic 翻译成中文是原子的意思。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的类。并发包 java.util.concurrent 的原子类都存放在java.util.concurrent.atomic下,如下图所示。根据操作...原创 2019-10-15 11:13:56 · 310 阅读 · 0 评论 -
乐观锁与悲观锁
何谓悲观锁与乐观锁悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等...原创 2019-10-15 10:46:42 · 97 阅读 · 0 评论 -
JDK提供的并发容器总结
一 简介JDK提供的这些容器大部分在 java.util.concurrent 包中。ConcurrentHashMap: 线程安全的HashMapCopyOnWriteArrayList: 线程安全的List,在读多写少的场合性能非常好,远远好于Vector.ConcurrentLinkedQueue: 高效的并发队列,使用链表实现。可以看做一个线程安全的 LinkedList,这是一个...原创 2019-10-14 13:29:27 · 224 阅读 · 0 评论 -
Java 并发进阶常见面试题总结
1. synchronized 关键字1.1. 说一说自己对于 synchronized 关键字的了解synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统...原创 2019-10-12 17:47:51 · 224 阅读 · 0 评论 -
Java 并发基础常见面试题总结
1. 什么是线程和进程?1.1. 何为进程?进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。如下图所示,在 windows 中通过查看任务管理器的方式,我们就可以清楚看...原创 2019-10-12 14:37:06 · 153 阅读 · 0 评论 -
ConcurrentHashMap源码分析
ConcurrentHashMap线程安全的具体实现方式/底层具体实现JDK1.7首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。Segment 实现了 ReentrantLock,所以 Segment 是一...原创 2019-10-12 13:15:37 · 202 阅读 · 0 评论 -
HashMap(默认16/2,2幂次 )源码学习
HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。底层数...原创 2019-10-12 11:32:35 · 176 阅读 · 0 评论 -
LinkedList源码学习
简介LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性; LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法:List list=...原创 2019-10-12 11:13:14 · 114 阅读 · 0 评论 -
Java集合框架常见面试题
Collection关系1. ListArraylist: Object数组Vector: Object数组LinkedList: 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环)2. SetHashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素LinkedHashSet: LinkedHashSet 继承于 HashSet,...原创 2019-10-12 10:28:26 · 159 阅读 · 0 评论 -
J2EE基础知识
Servlet总结在Java Web程序中,Servlet主要负责接收用户请求 HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet 可以设置初始化参数,供Servlet内部使用。一个Servlet类只会有一个实例,在它初始化时调用init()方法,销毁时调用destroy()方法**。*...原创 2019-10-11 17:06:23 · 162 阅读 · 0 评论 -
Java 基础知识回顾
1.面向对象和面向过程的区别面向过程性能比面向对象高,面向对象易维护、易复用、易扩展面向过程 :面向过程性能比面向对象高??面向过程语言大多都是直接编译成机械码在电脑上执行,Java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制机械码2. Java 语言有哪些特点?1.简单易学;2.面向对象(封装,继承,多态);3.平台无关性( Java 虚拟机实现平台无关性);4...原创 2019-10-11 15:57:24 · 266 阅读 · 1 评论 -
Java面试突击
Java基础Java 基础知识回顾Java 基础知识疑难点/易错点一些重要的Java程序设计题J2EE 基础知识回顾容器Java容器常见面试题/知识点总结ArrayList 源码学习LinkedList 源码学习HashMap(JDK1.8)源码学习并发Java 并发基础常见面试题总结Java 并发进阶常见面试题总结并发容器总结乐观锁与悲观锁JUC 中的 Atomi...原创 2019-10-11 14:47:02 · 756 阅读 · 0 评论