- 博客(81)
- 收藏
- 关注
原创 ElasticSearch快速入门
Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
2022-06-22 16:25:41 381 1
原创 HR面-面试题及套路总结
互联网技术行业更重要的是技术面 ,HR面只是最后一道把关,,检查这个应聘者是否存在一些 "致命缺陷"。所以整体的面试过程,我们要保持不卑不亢,,淡定从容,条理清晰,,沉着稳健,,就不会有太大的问题的。
2022-03-06 21:01:43 2870 1
原创 volatile可见性、有序性实现原理
volatile写-读的内存语义 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。 volatile可见性实现原理 JMM内存交互层面实现 volatile修饰的变量的read、load、use操作和assign、store、write必须是连续的,即修改后必须立即同步回主内存,使用时必须从主内存刷新,由此保证volatile变量操作对多线
2022-02-19 15:37:18 252
原创 JMM内存模型
JMM定义 JMM描述的是一种抽象的概念,一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性、有序性、可见性展开的。JMM与硬件内存架构的关系 Java内存模型与硬件内存架构之间存在差异。硬件内存架构没有区分线程栈和堆。对于硬件,所有的线程栈和堆都分布在主内存中。部分线程栈和堆可能有时候会出现在CPU缓存中和CPU内部的寄存器中。如下图所示,Java内存模型和计算机硬件内存架构是一个交叉关系: 内存交互操作 关于主内存.
2022-02-17 20:06:12 393
原创 并发三大特性
可见性 当一个线程修改了共享变量的值,其他线程能够看到修改的值。Java 内存模型是通过在变量 修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介 的方法来实现可见性的。 如何保证可见性?通过 volatile 关键字保证可见性。 通过 内存屏障保证可见性。 通过 synchronized 关键字保证可见性。 通过 Lock保证可见性。 通过 final 关键字保证可见性 有序性 即程序执行的顺序按照代码的先后顺序执行。JVM
2022-02-15 22:29:30 143
原创 一条SQL的执行过程
MySQL的内部组件结构MySQL逻辑架构可以分为三层: 客户端:最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。 Server层:大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(日期、时间、数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。 存储引擎层:第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。Server层通过API与存储
2022-02-14 21:38:36 128
原创 索引优化实践
一、全值匹配EXPLAIN SELECT * FROM employees WHERE name= 'LiLei';EXPLAIN SELECT * FROM employees WHERE name= 'LiLei' AND age = 22;EXPLAIN SELECT * FROM employees WHERE name= 'LiLei' AND age = 22 AND position ='manage r';二、最左前缀法则 如果索引了多列,要遵守..
2022-02-13 20:35:08 526
原创 Explain详解
Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 ,在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。explain 两个变种 1)explain extended:会在 explain 的基础上额外提供一些查询优化的信息。紧随其后通过 show war
2022-02-10 21:10:36 283
原创 MySQL索引底层数据结构
索引定义索引是帮助MySQL高效获取数据的排好序的数据结构。索引数据结构二叉树每个节点有两个子节点,数据量的增大必然导致高度的快速增加,对那种逐渐增大的数据查询相当于链表查询,效率低下,显然这个不适合作为大量数据存储的基础结构。红黑树红黑树相对于平衡二叉树,对那种逐渐增大的数据查询会进行平衡,比二叉树快一点,但是树的高度会很高,如果要查询叶子节点,会很慢。Hash对索引的key进行一次hash计算就可以定位出数据存储的位置,很多时候Hash索引要比
2022-02-08 19:43:39 1684 4
原创 模板模式详解
模板模式在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。介绍意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。何时使用:有一些通用的方法。如何解决:将这些通用算法抽象出来。关键代码:在抽象类实
2022-02-06 08:08:39 419
原创 观察者模式详解
观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。介绍意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。如何解决:
2022-02-02 21:50:35 708
原创 适配器模式详解
适配器模式适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。
2022-01-31 18:01:36 184
原创 秒杀项目详解
一、秒杀应该考虑哪些问题? 超卖问题 分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低,如果超卖将严重影响公司的财产利益,因此首当其冲的就是解决商品的超卖问题。 高并发 秒杀具有时间短、并发量大的特点,秒杀持续时间只有几分钟,而一般公司都为了制造轰动效应,会以极低的价格来吸引用户,因此参与抢购的用户会非常的多。短时间内会有大量请求涌进来,后端如何防止并发过高造成缓存击穿或者失效,击垮数据库都是需要考虑的问题。
2022-01-30 21:06:38 5481
原创 代理模式详解
代理模式在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。介绍意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加
2022-01-29 19:48:11 132
原创 责任链模式详解
责任链模式责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。介绍意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解
2022-01-29 19:32:14 1065
原创 链表_模板
运行结果:代码:package Mo_Ban;import java.util.Scanner;//链表模板public class Lian_Biao { /** * 值域 */ public static class ListNode { int val; ListNode next; public ListNode(int x) { val = x; .
2022-01-25 14:51:15 419
原创 面试高频题之网络篇
1、为什么TCP连接的时候是3次?2次不可以吗? 因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。 如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认a
2022-01-23 19:28:37 101
原创 手动安装RocketMQ(Linux)
第一步:下载去RocketMQ官网下载合适的版本。第二步:上传找到上面下载的rocketmq安装包,然后在文件夹栏输入cmd,进入cmd界面。输入scp rocketmq-all-4.8.0-bin-release.zip root@119.91.194.100:/root(上面这个命令的含义:把rocketmq-all-4.8.0-bin-release.zip上传到119.91.194.100服务器的root文件下)第三步:连接通过Linux连接软件,连接
2022-01-22 20:41:49 1816
原创 面试高频题之Netty篇
1.Netty是什么? Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。 2.Netty 的优势有哪些? 使用简单:封装了 NIO 的很多细节,使用更简单。 功能强大:预置了多种编解码功能,支持多种主流协议。 定制能力强:可以通过 ChannelHandler 对通信框架进行灵活地扩展。 性能高:通过与其他业界主流的 NIO 框架对比,Netty 的综合性
2022-01-21 22:26:39 727
原创 手动安装Zookeeper(Linux)
第一步:下载去zookeeper官网下载合适的版本。第二步:上传找到上面下载的zookeeper安装包,然后在文件夹栏输入cmd,进入cmd界面。输入scp zookeeper-3.5.9.tar.gz root@119.91.194.100:/root(上面这个命令的含义:把zookeeper-3.5.9.tar.gz 上传到119.91.194.100服务器的root文件下)第三步:连接通过Linux连接软件,连接服务器。第四步:移位.
2022-01-21 07:02:32 2322
原创 手动安装Redis(Linux)
第一步:下载去redis官网选择合适的版本进行下载。第二步:上传找到上面下载的redis安装包,然后在文件夹栏输入cmd,进入cmd界面。输入scp redis-6.2.5.tar.gz root@119.91.194.100:/root(上面这个命令的含义:把redis-6.2.5.tar.gz 上传到119.91.194.100服务器的root文件下)第三步:连接通过linux连接软件,连接服务器。第四步:移位mkdir /usr/local.
2022-01-18 07:52:54 806
原创 手动安装Nginx(Linux)
第一步:下载在nginx官网下载想要的nginx版本安装包,推荐下载稳定版。第二步:上传找到上面下载的nginx安装包,然后在文件夹栏输入cmd,进入cmd界面。 输入scp nginx-1.20.2.tar.gz root@119.91.194.100:/root(上面这个命令的含义:把nginx-1.20.2.tar.gz上传到119.91.194.100服务器的root文件下)第三步:连接通过linux连接软件,连接服务器。第四步:移位.
2022-01-18 06:43:45 1853
原创 手动安装jdk(Linux)
第一步:下载在Oracle官网下载你想要的jdk安装包第二步:上传找到上面下载的jdk安装包,然后在文件夹栏输入cmd,进入cmd界面。 输入scp jdk-8u301-linux-x64.tar.gz root@119.91.194.100:/root(上面这个命令的含义:把jdk-8u301-linux-x64.tar.gz上传到119.91.194.100服务器的root文件下)第三步:连接通过linux连接软件,连接服务器。第四步:移位进入到.
2022-01-18 05:55:21 1128
原创 二叉树_模板
0表示null节点代码运行结果:代码:package Ji_Ben_Yu_Fa.shu;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class tree { //值域 public static class TreeNode { int val; TreeNode left; ...
2022-01-17 12:48:29 365
原创 yum源安装MySQL8
第一步:打开MobaXterm、Xshell、Putty输入账号密码登录第二步:(1)输入cd / 这个命令是切换到根目录(2)输入yum list mysql-server 这个命令是搜索 mysql 的版本。 第三步:输入yum install -y mysql-server.aarch64 (-y,中间安装过程中,所有提示都 yes。) ,这个命令是进行安装。第四步:输入systemctl status mysqld 这个命令是查看...
2022-01-16 21:54:51 5637
原创 面试高频题之MQ篇
1、为什么使用MQ?MQ的优点?异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。日志处理 - 解决大量日志传输。 消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。2、消息队列有什么优缺点?优点:在特殊场景下有其对应的好处,解耦、异步、削峰。 缺点: .
2022-01-16 21:30:03 571
原创 工厂模式详解
工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。介绍意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决:主要解决接口选择的问题。何时使用:我们明确地计划不同条件下创建不同实例时。如何解决:让其子类实现工厂接口,返回
2022-01-15 19:29:19 178
原创 面试高频题之Dubbo篇
1、Dubbo 是什么?以及它的使用场景有哪些?Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动发现等高效服务治理方案,可以和 Spring 框架无缝集成。使用场景:透明化的远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制:可在内网替代 F5 等硬件负载均衡器,降低成本,减少单点。服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者.
2022-01-14 21:50:35 151
原创 动态代理详解
动态代理 什么是动态代理?动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。代理类在程序运行期间,创建的代理对象称之为动态代理对象。这种情况下,创建的代理对象,并不是事先在Java代码中定义好的。而是在运行期间,根据我们在动态代理对象中的“指示”,动态生成的。也就是说,你想获取哪个对象的代理,动态代
2022-01-13 23:00:15 4075
原创 面试高频题之Zookeeper篇
1. ZooKeeper是什么? ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。 ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 Zookeeper 保证了如下分布式一致性特性: (1)顺序一致性 (2)原子性 (3)
2022-01-12 21:28:34 133
原创 单例模式详解
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。介绍意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2022-01-11 22:16:27 149
原创 Bean的生命周期详解
第一步:启动ApplicationContext第二步:创建BeanFactory工厂第三步:初始化BeanFactory1、解析配置类,得到BeanDefinition,并注册到BeanFactory中 i. 解析@ComponentScan,此时就会完成扫描 ii. 解析@Import iii. 解析@Bean 2、 因为ApplicationContext还支持国际化,所以还需要初始化MessageSource对象 3、 因为ApplicationContext
2022-01-10 02:13:09 476
原创 面试高频题之Redis篇(2)
1、Redis如何做内存优化?可以好好利用Hash,list,sorted set,set等集合类型数据,因为通常情况下很多小的Key-Value可以用更紧凑的方式存放到一起。尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的web系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的key,而是应该把这个用户的所有信息存储到一张散列表里面。2、Redis线程模型? Redis.
2022-01-08 19:49:55 702
原创 Spring依赖注入详解
Spring中有两种依赖注入的方式1. 手动注入 2. 自动注入 手动注入 在XML中定义Bean时,就是手动注入,因为是程序员手动给某个属性指定了值。 <bean name="userService" class="com.luban.service.UserService"> <property name="orderService" ref="orderService"/> </bean> 上面这种底层是通过set方法进行注入。
2022-01-07 22:27:27 243
原创 面试高频题之Redis篇(1)
1、什么是Redis?Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。 Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Va.
2022-01-07 01:17:58 159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人