自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 问答 (1)
  • 收藏
  • 关注

原创 GOF23种设计模式面试之建造者模式

建造者模式◆定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道◆如果-个对象有非常复杂的内部结构(很多属性)◆想把复杂对象的创建和使用分离优点:封装性好,创建和使用分离◆扩展性好、建造类之间独立、一定程度上解耦缺点:产生多余的Builder对象产品内部发生变化,建造者都要修改,成本较大建造者模式更注重方法的调用顺序,工厂模式更注重创建产品。粒度不同:建造者模式,可以创造复杂的产品,而工厂模式创

2020-09-20 19:31:13 171

原创 GOF23种设计模式面试之三种工厂模式

简单工厂简单工厂模式属于创建型模式,但是并不属于GOF23种设计模式,通过简单工厂模式,我们可以了解一下工厂模式相关的概念。将实例化的操作放在一个类中,这个类就成为简单工厂类,简单工厂模式,定义了某一个工厂对象能够创建出哪一种产品类的实例。借此将客户类和具体子类的实现进行解耦,客户端只注重于传入工厂类的参数,对于创建对象的逻辑不关心例:现在有一个抽象类Sword,可以打造各种剑public abstract class Sword { public abstract void prod

2020-09-15 21:32:07 305

原创 JVM面试常考点全在这:多图看懂Java虚拟机

class文件class文件也叫字节码文件,由Java源代码(.java文件)编译而成的字节码(.class文件)class文件格式数据类型名称数量u4magic(魔数)1u2minor_version(副版本号)1u2major_version(主版本号)1u2constant_pool_count(常量池计数器)1cp_infoconstant_pool [](常量池)constant_ pool_ count-1u2acc

2020-08-20 21:45:47 2130 3

原创 Vscode中不再支持JDK8的解决方案

昨天还用得好好的,今天突然给我说支持JDK11以上了,也不能进行正常的代码补全了。看了一下,是Language Support for Java™ by Red Hat这个拓展更新到0.65.0的原因。因为Eclipse平台决定将JDK11作为9月发布的最低要求,而vscode是依赖eclipsejdt.ls服务器的,所以需要更新到JDK11。解决方案1如果不是必须使用JDK8,可以选择更换为JDK11或更新解决方案2官方说可以在settings.json中配置java.configurat

2020-07-25 11:32:56 30745 11

原创 初探redis:redis集群的数据分区和故障转移

redis 集群根据之前的诸多分析,我们知道单机的redis有很多的局限性,所以可以使用多台机器来实现分区存储,构建更大的数据库,满足更高的业务需求。之前我们实现的主从复制,可以实现一主多从的架构,但是抽象来看,其实也只是一个redis架构,只有一个主库实现读写,并不是多主多从的结构,所以我们需要redis集群来分散单台服务器的访问压力,实现负载均衡,同时减轻单机的存储上限,提高扩展性。单机架构在redis3.0时,提供了redis cluster来满足集群搭建的需求,可以进行手动搭建,分配节点和

2020-07-20 01:06:43 321 1

原创 初探redis:redis的主从复制与哨兵机制

Redis的主从复制单机的redis情况下,不能满足所有的需求1、机器故障,当机器发生故障时,可能导致数据丢失,redis将不能提供服务2、单机性能瓶颈,一台机器的硬件提升是有上限的,不能一直提升,并且一台机器到后面能够提升的空间越来越小,而代价却越爱越高所以,除了纵向提升服务器性能外,可以横向提升服务器规模,部署多个redis服务器,同时也避免单点redis服务器的机器故障,只需要保证这多台redis服务器的数据都是同步的。即使有某台服务器发生故障,也不影响其他服务器提供服务主从结构图片主节点

2020-07-17 22:36:08 143

原创 初探redis:redis持久化之RDB和AOF,redis的事务和分布式锁

redis的持久化持久化就是将数据存储在永久性存储介质(硬盘)中,当需要时再恢复保存的数据。持久化机制保证了数据的可用性。redis的数据是存储在内存中,而内存中的数据会在关机后消失,而我们平时操作redis时发现,前几天的数据仍然存在啊?这是因为redis的持久化RDBRDB是以快照形式对数据进行持久化,将数据作为二进制的RDB文件存储在硬盘上这种形式就是将当前的全部数据文件保存下来,每次启动时都会载入如果已经存在老文件,会被新文件覆盖RDB有这三种触发机制:save(同步)、bgsave(

2020-07-14 23:32:49 300

原创 初探redis:Docker安装redis,redis的数据结构、发布订阅

redisredis(REmote DIctionary Server),基于ANSI C语言编写的一个内存型NoSQL数据库(也可以持久化存储),性能极强,使用键值数据存储,提供多种语言的API。之前的redis是单线程的(广义上来说,其实还有后台线程),因为所有命令都是串行的交给一个线程来处理,而最新的redis是支持多线程的。redis的安装之前使用传统的安装方式在Linux上安装redis,第一次搞得时候折腾了我几个小时。这次就使用docker安装redis,方便快捷,最后启动redis

2020-07-12 18:28:42 268

原创 vscode使用wsl2的Java环境

WSL2的Java环境因为开发环境都部署在WSL2中,JDK也是安装在WSL2里的,Win10并没有配置JDK。这样有时想写写算法题就很麻烦了,需要进入WSL2的图形界面,启动IDEA才能开始写。所以这里在Windows下使用Vscode来调用WSL2内部的Java环境。(同理可以使用WSL2内的C++、Python环境等)Vscode安装拓展安装Remote-WSL拓展然后F1,启动Remote-WSL:New Window在Remote-WSL模式下安装Java Extension P

2020-07-10 15:42:28 3032 1

原创 面试MySQL所需要知道的:事务、锁(锁类型、Next-Key Lock详解)、MVCC

事务

2020-07-07 18:07:27 867

原创 面试MySQL所需要知道的:索引和SQL优化(下)SQL的执行计划

索引idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra电脑$1600----------------------------------------手机$12----------------------------------------导管$1----------------------------------------...

2020-07-03 17:57:29 156

原创 面试MySQL所需要知道的:索引和SQL优化(上)B+树、聚簇索引和二级索引、覆盖索引、索引下推

索引

2020-06-30 19:11:14 406

原创 面试MySQL所需要知道的:数据库设计优化

谈到数据库优化,往往联想到SQL语句的优化,但SQL语句优化并不是数据库优化的全部。数据库的优化有多种方式这是不同层面的优化,有硬件级别的优化、系统的合理配置优化(比如连接数、占用内存等)、数据库表结构的优化以及SQL和索引的优化。硬件和系统配置的优化暂且不谈,先来看看数据库结构的优化。数据库结构优化数据库命名数据库的命名和编码数据库命名必须要有规范,命名通常需要和项目名称一致,可以显而易见的知道该数据库属于哪个项目。数据库的编码要选用合适的字符集,对于使用UTF-8字符集时通常使用utf

2020-06-27 16:19:15 279

原创 计算机网络常见面试问题之同步异步、阻塞非阻塞、socket和网络编程模型BIO、NIO、AIO

同步/异步和阻塞/非阻塞在关于多线程的文章中,了解过同步和异步机制,这是一个相对的术语,适用于所有类型的计算,而不仅仅是IO操作。通常异步指得是某些操作发生在另一个线程中(相对于发起请求IO计算的线程)而阻塞和非阻塞是一种调用时的状态。阻塞式调用则是:发起任务后,等待收到任务结果才能继续执行。非阻塞式调用:发起任务后,在等待任务结果时,还能继续执行其他任务。通常我们会把同步异步、阻塞非阻塞混为一谈,其实他们之间没有必然的联系,按照排列组合,也是有四种情况。同步阻塞同步非阻塞异步阻塞异步

2020-06-26 15:10:53 418

原创 WSL2+Ubuntu18.04+gnome图形界面+docker搭建开发环境

最近换了电脑,系统更新到2004,捣腾了一下WSL2,尝试把开发环境搭建在WSL2里面,看了很多教程,基本都是Xfce的,但是更喜欢Gnome,所以就用Ubuntu主流的Gnome作为桌面GUIWSL2的安装WSL 2的安装因为微软提供了安装教程,所以贴上链接省略。https://docs.microsoft.com/zh-cn/windows/wsl/install-win10这里推荐安装windows新推出的命令行工具,Windows Terminal,微软商店下载就行,可以自定义样式。..

2020-06-21 17:42:27 33711 38

原创 计算机网络常见面试问题之HTTP协议,Cookie与Session,HTTPS

HTTP协议Hyper Text Transfer Protocol(超文本连接协议)简称HTTP协议。HTTP协议是客户/服务器模式的,用户使用的浏览器就是客户端程序。HTTP目前市面上多种版本共存,分别是HTTP1.0、HTTP1.1、HTTP2.0。HTTP1.1用得最为广泛,2.0虽然更加高级,但是1.1已经满足当前需求,且升级成本不少,所以目前还是1.1作为主流版本。在HTTP1.0,TCP连接默认使用短连接(Close),而从HTTP1.1开始默认使用长连接(Keep-alive)。

2020-06-20 23:19:10 643

原创 计算机网络常见面试问题之TCP和UDP,TCP的三次握手,四次挥手,滑动窗口问题

TCP之前提到网络层的ip协议,是无连接的协议,它不会占用主机之间的通信线路,ip只是保证了数据在互联网中的流动。而数据传输的控制就交给了上层协议TCP和UDPTCP是面向连接的、可靠的、基于字节流的传输层协议,每条TCP链接都是端对端的TCP将应用层层传下的数据分割为报文段发送到目标的传输层传输的数据包有序号,对方收到就发送回ACK确认,否则会重新传输TCP会校验数据是否有错误,发送的数据按序到达,不重复不丢失。TCP提供全双工通信,每端都有发送缓存和接受缓存。TCP的报文头也称为T

2020-06-18 17:16:04 880 2

原创 计算机网络常见面试问题之OSI七层模型和TCP/IP四层模型

网络的分层网络中主机A向主机B发送文件,表面上看来是直接传达到的,就像QQ聊天,你发出去了,对方收到了,好像是直连的。其实并不是这样,由于计算机网络是很庞大的,我们传输一个文件需要考虑到方方面面的细节,这也是一个庞大的问题,通过分层将这个问题拆分为一个个小问题,分别来解决每一层的活动元素就是实体,同层之间的实体称为对等实体,对等实体之间拥有协议,协议指得是对等实体之间数据交换的规则或约定,来规范这一层的操作。上下层之间存在接口,用来表示两层之间的连接,是上层使用下层服务的入口。服务指得是相邻两层之间

2020-06-09 18:15:11 1073

原创 体系化深入学习并发编程(十)Future和Callable

Future和CallableCallable接口Future接口线程池submit()获取future对象使用集合存储多个Future对象call方法发生异常时get()、cancel()超时的情况FutureTaskCallable接口Callable接口是对Runnable接口的一种补充为什么这么说呢,因为我们之前调用Runnable接口时就发现,其中的run()方法是没有返回值的,同时也不能抛出异常。public abstract void run();因为所以我们都是在run()方法内

2020-06-06 21:51:09 166

原创 体系化深入学习并发编程(九)并发控制与AQS

并发控制与AQS原理控制并发流程的工具类CountDownLatchSemaphoreConditionCyclicBarrier我们经常需要处理线程间的协作问题,比如哪些线程先执行,哪些线程后执行,或者哪些线程需要一起执行。之前的文章中,用到了CountDownLatch等类来控制并发流程,现在就来详细地了解一下有关控制并发流程的类。控制并发流程的工具类CountDownLatchCountDownLatch,翻译过来就是倒计时的闩锁。等待计数达到要求后才执行下一操作。生活中处处都能见到类似的

2020-06-05 00:15:17 144

原创 体系化深入学习并发编程(八)并发容器

并发容器早期的并发容器Vector和HashtableCollections类中的同步方法早期的并发容器Vector和HashtableVector和Hashtable都是JDK1.0就有了的并发容器,其作用和ArrayList和HashMap的用法相差无几。不过前二者是线程安全的,而后两者是线程不安全的。不过这两个线程安全的容器,现在也被后来者取代了。这是由于,这两个容器为了保证并发安全,在可能出现并发冲突的方法上,直接采用synchronized关键字来保障线程安全。比如在Vector中:

2020-06-01 20:44:21 204

原创 体系化深入学习并发编程(七)final关键字与不可变性

final关键字final关键字的知识点属于Java语言的基础,这里再次回顾final关键字的三种用法:final修饰的类不可被继承final修饰的方法不可被重写final修饰的变量不可被更改final修饰变量被final修饰的变量的值不可更改。但是有一点需要注意的是变量为引用类型时,变量的值存放的是引用类型的地址,这个地址不能发生改变,但是引用类型的内容是可以变化的。public static void main(String[] args) { final List<Inte

2020-05-31 14:45:36 150

原创 体系化深入学习并发编程(六)原子类和CAS

原子类和CAS原子类原子基本类型原子数组类型原子引用类型原子类原子类是指JUC库里的atomic包下的类。这些原子类都具有原子性(在JMM文章中有详细叙述)提到原子,就会想到化学,在高中化学所学的相关的一些化学方程式中,原子是不可再分的(这里并不去探究中子、质子、夸克什么)而我们所谓的原子性就是这个性质:不可再分原子性可以保障线程安全,因为是不可再分,所以在同一时间,只能有一个线程能够正确操作,达到了线程安全的效果相对于锁而言,原子类的粒度更细,锁保证的原子性的粒度通常一个临界区,有多个代码,

2020-05-30 14:47:35 146

原创 体系化深入学习并发编程(五)若有“锁”思

聊聊并发中的锁一级目录二级目录一级目录二级目录

2020-05-27 18:20:19 254

原创 体系化深入学习并发编程(四)揭开ThreadLocal的面纱

ThreadLocalThreadLocal的用途每个线程需要独享的对象如果多个线程共享一个非线程安全对象,我们通常考虑使用锁来达到线程安全。实际上,也可以选择不共享这个对象,而是每个线程来创建一个该对象的实例,每个线程只能访问自己创建的实例。这种被一个线程独有的对象就被称为线程特有对象,相应的持有该对象的线程就称为持有线程ThreadLocal类相当于线程访问其线程特有对象的代理,各个线程通过这个对象可以创建并访问各自的线程特有对象。ThreadLocal类可以理解为当前线程访问其线程特有对象的代

2020-05-23 22:11:29 231

原创 体系化深入学习并发编程(三)更好地了解Java线程池

并发死锁问题一级目录二级目录三级目录一级目录二级目录三级目录

2020-05-22 18:17:09 222

原创 GOF23种设计模式面试之单例模式

单例模式的8种写法饿汉式:很急迫,在类加载的时候就初始化完毕了饿汉式(静态常量)【可用】饿汉式(静态代码块)【可用】懒汉式:lazy-load,只有在调用的时候才初始化懒汉式(线程不安全)【不可用】懒汉式(线程安全)【不推荐】 效率低懒汉式(同步代码块,线程不安全)【不可用】双重检查【推荐】静态内部类【可用】枚举【推荐】...

2020-05-21 16:33:27 179

原创 体系化深入学习并发编程(二)刨根问底Java内存模型

Java内存模型一级目录二级目录三级目录一级目录二级目录三级目录

2020-05-20 21:37:05 195

原创 体系化深入学习并发编程(一)由简入繁系统梳理并发知识点

线程八大核心基础实现线程的方式继承Thread类实现Runnable接口两种方式的比较线程的正确启动如何停止线程线程的声明周期Thread类和Object类中关于线程的方法线程的重要属性线程的未捕获异常多线程的利与弊实现线程的方式Java实现多线程到底有几种方式呢?在看面试题的时候,多数都说是两种,但是在网上总会看到不同的声音,所以查阅了Java的官方文档There are two ways to create a new thread of execution.One is to declare

2020-05-17 15:40:19 381

原创 HashMap深入剖析笔记

HashMaP散列表jdk1.7的底层数据结构jdk1.8的底层数据结构HashMap中的一些位运算hash值的计算数组容量数组下标的计算散列表HashMap的核心是散列表,散列表是一个基于数组实现实现的数据结构,使用的是数组支持随机下标访问的特性,通过将一个key通过hash函数转化为数组下标。但是不同的key算出来的hash值可能相同,这就导致了hash冲突(也叫hash碰撞)对于ha...

2020-04-24 16:11:33 98

原创 排序算法——归并、快排

归并、快排归并排序快速排序归并排序归并排序的思想是分治法,如果想要将一个数组排序,那么将这个数组分为左区间和右区间,左区间一定是小于右区间的,再将左区间继续划分,右区间也继续划分。。。最后将排好序的数组全都归并起来,这样听起来像是从上向下划分,其实归并排序主要是是从下向上,合并的过程。先将单个元素的数组归并为两个元素的有序数组再将包含两个元素的有序数组归并为四个元素的有序数组…最后...

2020-04-20 00:39:29 715

原创 排序算法——冒泡、插入、选择

冒泡、插入、选择冒泡排序插入排序选择排序冒泡排序冒泡排序只比较相邻两个元素之间的大小,如果元素大小关系不正确,则交换这两个数,重复该步骤,直到我们到达数组的末尾。一次冒泡至少让一个元素处于正确位置,重复n次冒泡,则完成了n个元素的排序冒泡排序也能进行优化改进的思路很简单:如果我们通过内部循环完全不交换,这意味着数组已经排序,我们可以在这个点上停止冒泡排序。public static ...

2020-04-16 14:54:55 679 1

原创 Java复习——核心机制之反射

反射能够分析类能力的程序称之为反射反射机制可以用来:在运行时分析类的能力在运行时查看对象实现通用的数组操作代码利用Method对象Class类在程序运行期间,Java 运行时系统始终为所有的对象维护一个被称为运行时的类型标识 。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行 。然而,可以通过专门的 Java 类访问这些信息。保存这些信息的类被称为C...

2020-04-10 15:04:27 126

空空如也

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

TA关注的人

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