12 2021 档案

摘要:为什么要使用并发编程 提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论上讲操作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了CPU的使用效率,如果使用单线程就只能有一个CPU核心被使用。 比如当我们在网上购物时,为了提升响应 阅读全文
posted @ 2021-12-26 08:48 残城碎梦 阅读(102) 评论(0) 推荐(0)
摘要:什么是IO Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据传输流 阅读全文
posted @ 2021-12-25 08:29 残城碎梦 阅读(167) 评论(0) 推荐(0)
摘要:什么是网络编程 网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。在网络编程中,发起连接程序,也就 阅读全文
posted @ 2021-12-24 14:34 残城碎梦 阅读(410) 评论(0) 推荐(0)
摘要:ZooKeeper是什么? ZooKeeper是一个分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分 阅读全文
posted @ 2021-12-23 13:47 残城碎梦 阅读(224) 评论(0) 推荐(0)
摘要:什么是设计模式 设计模式是一套经过反复使用的代码设计经验,目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式使得代码编写真正工程化,它是软件工程的基石。 总体来说,设计模式分为三大类: 创建型模式:共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 结构型模式:共 阅读全文
posted @ 2021-12-23 13:46 残城碎梦 阅读(109) 评论(0) 推荐(0)
摘要:String的两种创建方式的区别 String str1 = "abc"; String str2 = new String("abc"); sout(str1 == str2);//false 其中,第一种方式是从常量池中获取对象,第二种方式是直接在堆内存中创建一个新的对象。 String 类型的 阅读全文
posted @ 2021-12-23 08:40 残城碎梦 阅读(165) 评论(0) 推荐(0)
摘要:String String并不是基本数据类型,而是一个被final修饰的不可变对象。通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的String对象。 字符串为对象,那么在初始化之前,它的值为null,到这里就有必要提下null、””、new String() 阅读全文
posted @ 2021-12-23 08:34 残城碎梦 阅读(168) 评论(0) 推荐(0)
摘要:什么是Linux Linux是一套免费使用和自由传播的类似Unix操作系统,一般的WEB项目都是部署在Linux操作系统上。 Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行在主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Li 阅读全文
posted @ 2021-12-22 23:31 残城碎梦 阅读(145) 评论(0) 推荐(0)
摘要:什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。 (2)作为一个半ORM框架,MyBatis 可以使用 XML 阅读全文
posted @ 2021-12-22 23:29 残城碎梦 阅读(80) 评论(0) 推荐(0)
摘要:NIO的组成 Buffer:与Channel进行交互,数据是从Channel读入缓冲区,从缓冲区写入Channel中的。 flip方法 :反转此缓冲区,将position给limit,然后将position置为0,其实就是切换读写模式 clear方法 :清除此缓冲区,将position置为0,把ca 阅读全文
posted @ 2021-12-22 23:29 残城碎梦 阅读(99) 评论(0) 推荐(0)
摘要:算法介绍 算法分类 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 归并排序 计数排序 桶排序 基数排序 算法复杂度 相关概念 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度:对排 阅读全文
posted @ 2021-12-22 23:28 残城碎梦 阅读(66) 评论(0) 推荐(0)
摘要:SpringCloud Alibaba是什么? Spring Cloud Alibaba是Spring Cloud的子项目;包含微服务开发必备组件;基于和符合Spring Cloud标准的阿里的微服务解决方案。 Spring Cloud Alibaba 包含组件 Nacos:一个更易于构建云原生应用 阅读全文
posted @ 2021-12-22 23:25 残城碎梦 阅读(97) 评论(0) 推荐(0)
摘要:什么是微服务架构? 微服务架构就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。 Spring C 阅读全文
posted @ 2021-12-22 23:25 残城碎梦 阅读(91) 评论(0) 推荐(0)
摘要:Spring回顾 Spring的扩展机制 IoC容器负责管理容器中所有bean的生命周期,而在bean生命周期的不同阶段,Spring提供了不同的扩展点来改变bean的命运。 (1)BeanFactoryPostProcessor(容器启动阶段) BeanFactory的前置处理器,允许我们在容器实 阅读全文
posted @ 2021-12-22 23:23 残城碎梦 阅读(131) 评论(0) 推荐(0)
摘要:常用的存储引擎?InnoDB与MyISAM的区别? 存储引擎是对底层物理数据执行实际操作的组件,为Server服务层提供各种操作数据的API。常用的存储引擎有InnoDB、MyISAM、Memory。这里我们主要介绍InnoDB 与 MyISAM 的区别: (1)事务:MyISAM不支持事务,Inn 阅读全文
posted @ 2021-12-22 23:22 残城碎梦 阅读(131) 评论(0) 推荐(0)
摘要:Tomcat是什么 Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。 Tomcat的目录结构 /bin:存放用于启动和暂停Tomca 阅读全文
posted @ 2021-12-22 23:21 残城碎梦 阅读(62) 评论(0) 推荐(0)
摘要:为什么要用Dubbo? 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服 阅读全文
posted @ 2021-12-22 23:20 残城碎梦 阅读(143) 评论(0) 推荐(0)
摘要:为什么需要分布式事务 什么是事务 事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。 通俗的说,事务是指程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所做的所有更改都会被撤销。 数据库事务正 阅读全文
posted @ 2021-12-22 23:19 残城碎梦 阅读(249) 评论(0) 推荐(0)
摘要:Spring是什么? Spring是一个轻量级Java开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE一站式轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开 阅读全文
posted @ 2021-12-22 23:18 残城碎梦 阅读(81) 评论(0) 推荐(0)
摘要:什么是Elasticsearch? Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据。 全文检索是指对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当查询时,根据事先建立的索引进行 阅读全文
posted @ 2021-12-22 23:17 残城碎梦 阅读(173) 评论(0) 推荐(0)
摘要:什么是Redis Redis 是一个使用 C 语言写成的,开源的高性能key-value非关系缓存数据库。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。Redis的数据都基于缓存 阅读全文
posted @ 2021-12-22 23:16 残城碎梦 阅读(193) 评论(0) 推荐(1)
摘要:什么是MQ? MQ就是消息队列。是软件和软件进行通信的中间件产品。 使用消息队列的优点有哪些? (1)解耦:将系统按照不同的业务功能拆分出来,消息生产者只管把消息发布到 MQ 中而不用管谁来取,消息消费者只管从 MQ 中取消息而不管是谁发布的。消息生产者和消费者都不知道对方的存在; (2)异步:主流 阅读全文
posted @ 2021-12-22 23:15 残城碎梦 阅读(131) 评论(0) 推荐(0)
摘要:为什么要使用MQ? 因为项目做了分布式系统,所有远程服务调用请求都是同步执行经常出问题,所以引入了mq。 主要作用有以下几点: 解耦:系统耦合度降低,没有强依赖关系 异步:不需要同步执行的远程调用可以有效提高响应时间 削峰:请求达到峰值后,后端service还可以保持固定消费速率消费,不会被压垮 R 阅读全文
posted @ 2021-12-22 23:15 残城碎梦 阅读(476) 评论(0) 推荐(0)
摘要:什么是kafka? Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。目标是实现一个为处理实时数据提供一个统一、高吞吐、低延迟的平台。 名词解释 消息:Record。Kafka是消息引擎,这里的消息就是Kafka处理的主要对象。主体:Topic。主题就是承载消息的 阅读全文
posted @ 2021-12-22 23:13 残城碎梦 阅读(107) 评论(0) 推荐(0)
摘要:什么是 Lock 接口 JDK5 之后在 JUC 中加入了 Lock 接口,该接口中只有6个方法的声明。Lock 锁是显式锁,锁的持有与释放都必须手动编写,当前线程使用 lock() 方法与 unlock() 对临界区进行加锁与释放锁,当前线程获取到锁之后,其他线程由于无法持有锁将无法进入临界区,直 阅读全文
posted @ 2021-12-22 23:11 残城碎梦 阅读(256) 评论(0) 推荐(0)
摘要:什么是阻塞队列 阻塞队列最大的特性在于支持阻塞添加和阻塞删除方法: 阻塞添加:当阻塞队列已满时,队列会阻塞加入元素的线程,直到队列元素不满时才重新唤醒线程执行加入元素操作。 阻塞删除:但阻塞队列元素为空时,删除队列元素的线程将被阻塞,直到队列不为空再执行删除操作 Java 中的阻塞队列接口 Bloc 阅读全文
posted @ 2021-12-22 22:59 残城碎梦 阅读(72) 评论(0) 推荐(0)
摘要:计算机网络模型 TCP/IP 与 OSI 都是为了使网络中的两台计算机能够互相连接并实现通信与回应,但他们最大的不同在于,OSI 是一个理论上的网络通信模型,而 TCP/IP 则是实际上的网络通信标准。 OSI七层模型 物理层 实现计算机节点之间比特流的透明传输,规定传输媒体接口的标准,屏蔽掉具体传 阅读全文
posted @ 2021-12-22 22:27 残城碎梦 阅读(282) 评论(0) 推荐(0)
摘要:Servlet API中forward()与redirect()的区别? 从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。 redi 阅读全文
posted @ 2021-12-22 22:22 残城碎梦 阅读(60) 评论(0) 推荐(0)
摘要:AQS 的工作原理 什么是 AQS AQS,Abstract Queued Synchronizer,抽象队列同步器,是 J.U.C 中实现锁及同步组件的基础。工作原理就是如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态,如果被请求的共享资源被占用, 阅读全文
posted @ 2021-12-22 22:07 残城碎梦 阅读(228) 评论(0) 推荐(0)
摘要:CountDownLatch 什么是 CountDownLatch CountDownLatch,闭锁,就是一个基于 AQS 共享模式的同步计数器,它内部的方法都是围绕 AQS 实现的。主要作用是使一个或一组线程在其他线程执行完毕之前,一直处于等待状态,直到其他线程执行完成后再继续执行。 Count 阅读全文
posted @ 2021-12-22 21:42 残城碎梦 阅读(68) 评论(0) 推荐(0)
摘要:在 Java 中,实现多线程的主要有以下四种: (1)继承 Thread 类,重写 run() 方法;(2)实现 Runnable 接口,实现 run() 方法,并将 Runnable 实现类的实例作为 Thread 构造函数的参数 target;(3)实现 Callable 接口,实现 call( 阅读全文
posted @ 2021-12-22 21:41 残城碎梦 阅读(149) 评论(0) 推荐(0)
摘要:JMM 内存模型 什么是 JMM 内存模型 Java 内存模型是 Java 虚拟机定义的一种多线程访问 Java 内存各个变量的访问规范,主要围绕如何解决并发过程中的原子性、可见性、有序性这三个问题来解决线程的安全问题。 Java 内存模型将内存分为了主内存和工作内存(也称为栈空间)。主内存存放所有 阅读全文
posted @ 2021-12-22 14:16 残城碎梦 阅读(87) 评论(0) 推荐(0)
摘要:何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过 阅读全文
posted @ 2021-12-22 11:54 残城碎梦 阅读(122) 评论(0) 推荐(0)
摘要:为什么使用异常 异常的处理机制可以确保我们程序的健壮性,提高系统可用率。在我们的程序设计当中,任何时候任何地方都有可能会出现异常,在没有异常机制的时候我们是这样处理的:通过函数的返回值来判断是否发生了异常(这个返回值通常是已经约定好了的),调用该函数的程序负责检查并且分析返回值。虽然可以解决异常问题 阅读全文
posted @ 2021-12-22 11:40 残城碎梦 阅读(114) 评论(0) 推荐(0)
摘要:内部类:可以将一个类的定义放在另一个类的定义内部,这就是内部类。 内部类是一个编译时概念,编译后外部类及其内部类会生成两个独立的class文件: OuterClass.class和OuterClass$InnerClass.class。 在Java中内部类主要分为四种:成员内部类、局部内部类、匿名内 阅读全文
posted @ 2021-12-22 11:18 残城碎梦 阅读(125) 评论(0) 推荐(0)
摘要:封装 什么是封装 封装,就是将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过该对象对外提供的接口来访问该对象。 使用封装有几大好处 (1)良好的封装能够减少耦合。(2)类内部的结构可 阅读全文
posted @ 2021-12-22 08:34 残城碎梦 阅读(277) 评论(0) 推荐(0)
摘要:抽象类和接口的定义 (1)抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。 (2)接口是抽象方法的集合,声明了一系列的方法操作,自身并不能做任何事情。如果一个类实现了某个接口,那么它必须实现这个接口的所有抽象方法。 抽象类与接口的区别 (1)抽象类和接口都不 阅读全文
posted @ 2021-12-21 23:35 残城碎梦 阅读(176) 评论(0) 推荐(0)
摘要:什么是回调 回调是一种双向的调用模式,程序模块之间通过这样的接口调用完成通信联系,回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后再告诉回调方它想要知道的信息。 回调函数用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个 阅读全文
posted @ 2021-12-21 23:33 残城碎梦 阅读(237) 评论(0) 推荐(0)
摘要:什么是泛型 泛型的本质是 参数化类型,也就是说 将所操作的数据类型 指定为一个参数,在不创建新类的情况下,通过参数来指定所要操作的具体类型(类似于方法中的变量参数,此时类型也定义成参数形式),也就是说,在创建对象或者调用方法的时候才明确下具体的类型。可以在类、接口、方法中使用,分别称为泛型类、泛型接 阅读全文
posted @ 2021-12-21 23:33 残城碎梦 阅读(250) 评论(0) 推荐(0)
摘要:枚举类的使用 自定义枚举类 class Season{ private final String SEASONNAME;//季节的名称 private final String SEASONDESC;//季节的描述 private Season(String seasonName,String se 阅读全文
posted @ 2021-12-21 23:32 残城碎梦 阅读(57) 评论(0) 推荐(0)
摘要:数据类型分类 Java语言的变量按数据类型分类如下: 整数型 byte(1字节=8bit) 、short(2字节) 、 int(4字节) 、 long(8字节) ① byte范围:-128 ~ 127② 声明long型变量,必须以"l"或"L"结尾③ 通常,定义整型变量时,使用int型。④ 整型的常 阅读全文
posted @ 2021-12-21 23:30 残城碎梦 阅读(144) 评论(0) 推荐(0)
摘要:Atomic 原子类的原理 Atomic 原子操作类是基于无锁 CAS + volatile 实现的,并且类中的所有方法都使用 final 修饰,进一步保证线程安全。而 CAS 算法的具体实现方式在于 Unsafe 类中,Unsafe 类的所有方法都是 native 修饰的,也就是说所有方法都是直接 阅读全文
posted @ 2021-12-21 23:16 残城碎梦 阅读(190) 评论(0) 推荐(0)
摘要:什么是线程池 线程池主要是为了解决新任务执行时,应用程序为任务创建一个新线程以及任务执行完毕时,销毁线程所带来的开销。通过线程池,可以在项目初始化时就创建一个线程集合,然后在需要执行新任务时重用这些线程而不是每次都新建一个线程,一旦任务已经完成了,线程回到线程池中并等待下一次分配任务,达到资源复用的 阅读全文
posted @ 2021-12-21 23:14 残城碎梦 阅读(182) 评论(0) 推荐(0)
摘要:线程安全是并发编程中的重要关注点,造成线程安全问题的主要原因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进 阅读全文
posted @ 2021-12-21 23:13 残城碎梦 阅读(158) 评论(0) 推荐(0)
摘要:什么是ThreadLocal ThreadLocal 提供了线程内部的局部变量,当在多线程环境中使用 ThreadLocal 维护变量时,会为每个线程生成该变量的副本,每个线程只操作自己线程中的变量副本,不同线程间的数据相互隔离、互不影响,从而保证了线程的安全。 ThreadLocal 适用于无状态 阅读全文
posted @ 2021-12-21 23:09 残城碎梦 阅读(178) 评论(0) 推荐(0)
摘要:上下文切换 在并发编程中,并不是线程越多就效率越高,线程数太少可能导致资源不能充分利用,线程数太多可能导致竞争资源激烈,然后上下文切换频繁造成系统的额外开销。那什么是上下文切换呢? 什么是上下文切换? 在处理多线程并发任务时,处理器会给每个线程分配CPU时间片,线程在各自分配的时间片内占用处理器并执 阅读全文
posted @ 2021-12-21 22:34 残城碎梦 阅读(666) 评论(0) 推荐(0)
摘要:Java中的static关键字表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以修饰代码块。 当JVM加载一个类的时候,如果该类存在static修饰的成员变量和成员方法,就会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域;同时被static修饰的成员变量和成员方法是被 阅读全文
posted @ 2021-12-21 17:53 残城碎梦 阅读(139) 评论(0) 推荐(0)
摘要:final表示的是“无法被改变的”,不想被改变的理由有两种,一种是效率,一种是设计。使用到final的一般有四种情况:变量、方法、类、参数。 final变量 有时候变量的恒定不变是很有用的,它能够减轻系统运行时的负担。对于这些恒定不变的数据我可以叫做“常量”。“常量”主要应用与以下两个地方: (1) 阅读全文
posted @ 2021-12-21 17:52 残城碎梦 阅读(94) 评论(0) 推荐(0)
摘要:什么是集合 集合就是一个放数据的容器,准确的说是放数据对象引用的容器 集合类存放的都是对象的引用,而不是对象的本身 集合类型主要有3种:set(集)、list(列表)和map(映射)。 集合的特点 集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理。 和数组对比对象的大小不确定 阅读全文
posted @ 2021-12-21 15:19 残城碎梦 阅读(174) 评论(0) 推荐(0)
摘要:什么是反射 (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。 (2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时 阅读全文
posted @ 2021-12-21 14:16 残城碎梦 阅读(83) 评论(0) 推荐(0)
摘要:bit:位byte:字节1 byte= 8 bit int 类型为 4 byte,共32位bit,unsigned int也是2^32 byte = 4G 1G= 2^30 =10.7亿 所谓海量数据处理,就是指数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。而解决方案就是:针对时间, 阅读全文
posted @ 2021-12-21 12:47 残城碎梦 阅读(496) 评论(0) 推荐(0)
摘要:常见的JVM参数配置 垃圾回收统计信息 -XX:+PrintGC 打印GC简要信息-XX:+PrintGCDetails打印GC的详细信息-XX:+PrintGCTimeStamps打印CG发生的时间戳-Xloggc:log/gc.log 指定GC log的位置,以文件输出-XX:+PrintHea 阅读全文
posted @ 2021-12-21 11:24 残城碎梦 阅读(309) 评论(0) 推荐(0)
摘要:平台无关性 Java的无关性的实现,是由Java源代码编译后生成的字节码class文件和Java虚拟机实现的。无关性包括:平台无关性以及语言无关性。 (1) 平台无关性,是指java代码可以运行在不同操作系统的虚拟机上面,因为不同的操作系统都有各自的Java虚拟机,从而实现程序的“一次编写,到处运行 阅读全文
posted @ 2021-12-21 10:09 残城碎梦 阅读(145) 评论(0) 推荐(0)
摘要:Java中内存分配策略 在比较堆和栈的区别之前,我们先了解下Java的内存分配策略,按照编译原理的观点,程序运行时的内存分配有三种策略,分别是:静态的,栈式的,和堆式的。 (1) 静态存储分配:是指在编译时,就能确定每个数据在运行时的存储空间,因而在编译时就可以给他们分配固定的内存空间。这种分配策略 阅读全文
posted @ 2021-12-21 09:07 残城碎梦 阅读(231) 评论(0) 推荐(0)
摘要:JVM主要组成部分 JVM包含两个子系统和两个组件,分别为: Class loader(类装载子系统):根据给定的全限定名类名来装载class文件到运行时数据区的方法区中 Execution engine(执行引擎子系统):执行引擎也叫解释器,负责解释class的指令,再提交给操作系统执行 Runt 阅读全文
posted @ 2021-12-21 08:51 残城碎梦 阅读(101) 评论(0) 推荐(0)
摘要:垃圾回收机制 垃圾回收过程 JVM内存区域的程序计数器,虚拟机栈、本地方法栈的生命周期是和线程同步的,随着线程的销毁而自动释放内存,所以只有堆和方法区需要GC。方法区主要是针对常量池的回收和对类型的卸载,堆区针对的是不再使用的对象进行回收内存空间。我们常说的GC一般指的是堆区的垃圾回收,堆内存空间可 阅读全文
posted @ 2021-12-20 22:30 残城碎梦 阅读(85) 评论(0) 推荐(0)
摘要:对象的创建过程 对象的创建过程 对象的创建过程一般是从 new 指令(JVM层面)开始的,整个创建过程如下: (1) 首先检查 new 指令的参数是否能在常量池中定位到一个类的符号引用; (2) 如果没有,说明类还没有被加载,则须先执行相应的类加载、解析和初始化等类加载过程; (3) 如果有,虚拟机 阅读全文
posted @ 2021-12-20 22:01 残城碎梦 阅读(145) 评论(0) 推荐(0)
摘要:什么是Mybatis? (1) Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。 (2) 作为一个半ORM框架,MyBatis 可以使用 X 阅读全文
posted @ 2021-12-20 12:56 残城碎梦 阅读(71) 评论(0) 推荐(0)
摘要:什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错 阅读全文
posted @ 2021-12-20 08:49 残城碎梦 阅读(67) 评论(0) 推荐(0)
摘要:Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。 主要模块有: Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); 阅读全文
posted @ 2021-12-19 19:40 残城碎梦 阅读(115) 评论(0) 推荐(0)
摘要:什么是反射 反射是一种能够在程序运行时动态访问、修改某个类中任意属性(状态)和方法(行为)的机制(包括private实例和方法),java反射机制提供了以下几个功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意 阅读全文
posted @ 2021-12-19 16:28 残城碎梦 阅读(94) 评论(0) 推荐(0)
摘要:ArrayList ArrayList底层是基于动态数组,根据下标随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。 只要ArrayList的当前容量足够大,add()操作向数组的尾部的效率非常高的,当向数组指定位置添加数据时 阅读全文
posted @ 2021-12-19 16:23 残城碎梦 阅读(115) 评论(0) 推荐(0)
摘要:SpringBoot之所以可以做到简化配置文件直接启动,无外乎是其内部的两种设计策略:开箱即用和约定大于配置。 开箱即用:在开发过程中,通过maven项目的pom文件中添加相关依赖包,然后通过相应的注解来代替繁琐的XML配置以管理对象的生命周期。 约定大于配置:由SpringBoot本身来配置目标结 阅读全文
posted @ 2021-12-19 16:22 残城碎梦 阅读(324) 评论(0) 推荐(0)
摘要:单独的数据库 微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。它是基于下面三个原因。 优化服务接口:微服务之间的接口越小越好,最好只有服务调用接口(RPC或消息),没有其他接口。如果微服务不能独享自己的数据库,那么数据库也变成了接口的一 阅读全文
posted @ 2021-12-19 15:45 残城碎梦 阅读(158) 评论(0) 推荐(0)
摘要:服务熔断 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。 服务降级 服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非 阅读全文
posted @ 2021-12-19 15:36 残城碎梦 阅读(185) 评论(0) 推荐(0)
摘要:应对大流量的一些思路 什么是大流量? TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+...。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性能,那么这个量就可以称之为大流量了。 应对大流量的一些常见手段是什么? 缓存:让数据尽早进入缓存,离程序近 阅读全文
posted @ 2021-12-19 14:54 残城碎梦 阅读(70) 评论(0) 推荐(0)
摘要:正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。 下面从几个例子作为切入点来讲解下 Java 里有哪些方法来实现线程间通信。 如何让两个线程依次执行? 那如何让 两个线程按照指定方式有序交叉运行呢? 四个线程 A B 阅读全文
posted @ 2021-12-19 13:31 残城碎梦 阅读(67) 评论(0) 推荐(0)
摘要:拷贝的引入 引用拷贝 Teacher teacher = new Teacher("Taylor",26); Teacher otherteacher = teacher; System.out.println(teacher); System.out.println(otherteacher); 阅读全文
posted @ 2021-12-19 12:46 残城碎梦 阅读(88) 评论(0) 推荐(0)
摘要:Object 的 wait()和notify() 方法 Object 对象中的 wait()和notify()是用来实现实现等待 / 通知模式。其中等待状态和阻塞状态是不同的。等待状态的线程可以通过notify() 方法唤醒并继续执行,而阻塞状态的线程则是等待获取新的锁。 调用 wait()方法后, 阅读全文
posted @ 2021-12-19 11:59 残城碎梦 阅读(53) 评论(0) 推荐(0)
摘要:线程安全的原因 SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日期相关String, Date等等, 都是交由Cale 阅读全文
posted @ 2021-12-19 10:42 残城碎梦 阅读(97) 评论(0) 推荐(0)
摘要:分布式事务的实现主要有以下 5 种方案: XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案 两阶段提交方案/XA方案 所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据 阅读全文
posted @ 2021-12-19 09:21 残城碎梦 阅读(224) 评论(0) 推荐(0)
摘要:能不能说一说 TCP 和 UDP 的区别? TCP是一个面向连接的、可靠的、基于字节流的传输层协议。而UDP是一个面向无连接的传输层协议。和 UDP 相比,TCP 有三大核心特性: 面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信之前,TCP 需要三次握手建立连接,而 UDP 没有相 阅读全文
posted @ 2021-12-18 22:38 残城碎梦 阅读(88) 评论(0) 推荐(0)
摘要:Redis 是速度非常快的非关系型(NoSQL)内存键值数据库。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis常用的数据类型 数据类型 可以存储的值 操作 STRING 字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作对整数和浮点数执行 阅读全文
posted @ 2021-12-18 21:39 残城碎梦 阅读(115) 评论(0) 推荐(0)
摘要:Redis两种持久化的方式 RDB持久化可以在指定的时间间隔内生成数据集的时间点快照 AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,AOF文件中全部以redis协议的格式来保存,新命令会被追加到文件的末尾,redis还可以在后台对AOF文件进行重写。 阅读全文
posted @ 2021-12-18 21:18 残城碎梦 阅读(131) 评论(0) 推荐(0)
摘要:cpu个数:是指物理上,也及硬件上的核心数;核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;一个CPU核心数模拟出2线程的CPU线程数:是同一时刻设备能并行执行的程序个数,线程数=cpu个数 * 核数,及程数=cpu个数(2) * 核数(2)=4 cpu线程数和Java多线程 (1) 线程是CPU 阅读全文
posted @ 2021-12-18 12:26 残城碎梦 阅读(118) 评论(0) 推荐(0)
摘要:Thread.State枚举类型中定义了线程的六种状态:NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING和TERMINATED。 线程在某一时刻只能拥有一种状态,但是在线程的整个生命周期,线程的状态会发生变化。 public enum State { NEW, R 阅读全文
posted @ 2021-12-18 11:46 残城碎梦 阅读(184) 评论(0) 推荐(0)
摘要:首先我们来了解几个知识。 自动装箱 对于下面这行代码: Integer a = 1; 变量a为Integer类型,而1为int类型,且Integer和int之间并无继承关系,按照Java的一般处理方法,这行代码应该报错。 但因为自动装箱机制的存在,在为Integer类型的变量赋int类型值时,Jav 阅读全文
posted @ 2021-12-15 13:43 残城碎梦 阅读(279) 评论(0) 推荐(0)
摘要:索引是个什么东西? 我们可以创建哪些索引? 哪些字段适合建立索引呢? 索引是不是越多越好呢? 为什么我们不建议使用uuid、身份证号等数据做为主键? 为什么不建议使用select * from table? 我们使用模糊匹配 ’%三‘ ’张%‘ 在前在后会影响索引的使用吗? 什么是索引 在关系数据库 阅读全文
posted @ 2021-12-15 08:42 残城碎梦 阅读(156) 评论(0) 推荐(0)
摘要:线程池常问问题: 线程池各个参数的作用,简单阐述一下线程池工作流程。 常见的线程池有哪些,分别适用于什么场景? 使用无界队列的线程会导致内存飙升吗? 线程池的好处 降低线程创建和销毁线程造成的开销 提高响应速度。任务到达时,相对于手工创建一个线程,直接从线程池中拿线程,速度肯定快很多 提高线程可管理 阅读全文
posted @ 2021-12-15 08:19 残城碎梦 阅读(114) 评论(0) 推荐(0)
摘要:MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。 其中重做日志和回滚日志与事务 阅读全文
posted @ 2021-12-14 23:36 残城碎梦 阅读(303) 评论(0) 推荐(0)
摘要:ZooKeeper是什么? ZooKeeper是一个分布式应用程序协调服务。 Zookeeper提供了文件系统和通知机制。 文件系统 Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点 阅读全文
posted @ 2021-12-14 21:29 残城碎梦 阅读(79) 评论(0) 推荐(0)
摘要:Spring是核心,提供了基础功能,核心是控制反转(IOC)和面向切面(AOP); Spring MVC 是基于Spring的一个 MVC 框架,主要处理web开发的路径映射和视图渲染,属于Spring框架中WEB层开发的一部分 ; Spring Boot 是为简化Spring配置的快速开发整合包, 阅读全文
posted @ 2021-12-14 21:26 残城碎梦 阅读(104) 评论(0) 推荐(0)
摘要:通知类型 在基于Spring AOP编程的过程中,基于AspectJ框架标准,spring中定义了五种类型的通知,它们分别是: 前置通知 (@Before) 。 返回通知 (@AfterReturning) 。 异常通知 (@AfterThrowing) 。 后置通知 (@After)。 环绕通知 阅读全文
posted @ 2021-12-14 17:27 残城碎梦 阅读(128) 评论(0) 推荐(0)
摘要:主从复制的方式 一主一从 主主复制 一主多从(扩展系统读取的性能,因为读是在从库读取的); 多主一从(5.7开始支持) 联级复制 主从复制的用途及条件 MySQL主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从部署必要条件 主库开启binlog日志(设置log- 阅读全文
posted @ 2021-12-14 15:50 残城碎梦 阅读(152) 评论(0) 推荐(0)
摘要:主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。 主从复制的作用(或者说为什么要做主从) 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足 阅读全文
posted @ 2021-12-14 14:20 残城碎梦 阅读(78) 评论(0) 推荐(0)
摘要:缓存是什么 存储的速度是有区别的。缓存就是把低速存储的结果,临时保存在高速存储的技术。 如图所示,金字塔更上面的存储,可以作为下面存储的缓存。 为什么需要缓存 存储如mysql通常支持完整的ACID特性,因为可靠性,持久性等因素,性能普遍不高,高并发的查询会给mysql带来压力,造成数据库系统的不稳 阅读全文
posted @ 2021-12-14 13:45 残城碎梦 阅读(146) 评论(0) 推荐(0)
摘要:在复杂的分布式系统中,ID就是大量的数据和消息的唯一标识。 举个例子,数据库的ID字段在单体的情况下可以使用自增来作为ID,但是对数据分库分表后一定需要一个唯一的ID来标识一条数据,这个ID就是分布式ID。对于分布式ID而言,也需要具备分布式系统的特点:高并发,高可用,高性能等特点。 分布式ID实现 阅读全文
posted @ 2021-12-14 13:22 残城碎梦 阅读(92) 评论(0) 推荐(0)
摘要:效率低的原因 阿里开发手册:【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。 说明: 增加查询分析器解析成本。 增减字段容易与 resultMap 配置不一致。 无用字段增加网络 消耗,尤其是 text 类型的字段。 不需要的列会增加数据传输时间和网络开销 用“S 阅读全文
posted @ 2021-12-14 13:22 残城碎梦 阅读(53) 评论(0) 推荐(0)
摘要:① map的key采用简单形式和复杂形式时(如:整型和字符串),查找的效率是不同的,简单的key值效率更高 ② 当数据量大的时候,采用entrySet遍历key+value的效率要高于keySet ③ 当我们只需要取得value值时,采用values来遍历效率更高 参考: 面试官:Java遍历Map 阅读全文
posted @ 2021-12-14 13:11 残城碎梦 阅读(130) 评论(0) 推荐(0)
摘要:什么是 CAP 定理 CAP 理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的2个。 什么是分区 在分布式系统中,不同的节点分布在不 阅读全文
posted @ 2021-12-14 12:57 残城碎梦 阅读(646) 评论(0) 推荐(0)
摘要:在实践中我们发现对于大多数的应用领域,评估一个垃圾收集(GC)算法如何根据如下两个标准: 吞吐量越高算法越好 暂停时间越短算法越好 首先让我们来明确垃圾收集(GC)中的两个术语:吞吐量(throughput)和暂停时间(pause times)。 JVM在专门的线程(GC threads)中执行GC 阅读全文
posted @ 2021-12-14 10:12 残城碎梦 阅读(1406) 评论(0) 推荐(0)
摘要:新生代回收器:Serial、ParNew、parallel老年代回收器:Serial Old、CMS、Parallel Old新生代和老年代回收器:G1 Serial 特点 JDK1.3.1前,Serial是HotSpot新生代收集的唯一选择。 有如下特点: 针对新生代; 采用复制算法; 单线程收集 阅读全文
posted @ 2021-12-14 09:15 残城碎梦 阅读(565) 评论(0) 推荐(0)
摘要:写时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。 核心思想是,如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调 阅读全文
posted @ 2021-12-14 08:37 残城碎梦 阅读(527) 评论(0) 推荐(0)
摘要:服务与缓存 所谓的服务,一层应用 + 一层数据,应用从数据层获取数据然后加工输出。 数据层,通常我们指的是持久化介质上的持久化存储。它有多种形式的,可以是文件,或者数据库。 数据存储在持久化介质上,而应用运行与内存中。内存和持久化介质是两个有着量级速度差别的不同介质,由此,应用和数据之间便有了“矛盾 阅读全文
posted @ 2021-12-14 00:22 残城碎梦 阅读(103) 评论(0) 推荐(1)
摘要:为什么使用MQ? MQ的使用场景有很多,但是比较核心的就是:解耦、异步、削锋。 系统解耦 举例,有ABCDE五个系统,BCDE系统都需要调用A系统的接口获取数据,这样A系统跟其他四个系统严重耦合,需要时时刻刻考虑其他四个系统要是挂了怎么办,需不需要重新发送数据给他们,这个时候的A系统内心是崩溃的。 阅读全文
posted @ 2021-12-13 23:34 残城碎梦 阅读(112) 评论(0) 推荐(0)
摘要:接口的安全性主要围绕token、timestamp和sign三个机制展开设计,保证接口的数据不会被篡改和重复调用。 Token授权机制 用户使用用户名密码登录后,服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行T 阅读全文
posted @ 2021-12-13 23:19 残城碎梦 阅读(223) 评论(0) 推荐(0)
摘要:动态代理实现 Spring底层的动态代理有两种实现方式,一是JDK的动态代理技术,二是Cglib开源框架提供的动态代理技术。 JDK动态代理 JDK的动态代理,必须是基于接口进行代理,也就是我们的目标类必须实现一个接口,才能进行代理。 创建代理的三个要素: 原始对象 额外功能 代理对象和原始对象实现 阅读全文
posted @ 2021-12-13 21:18 残城碎梦 阅读(1907) 评论(0) 推荐(0)
摘要:InnoDB逻辑存储结构 首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地存放在表空间,表空间又由段,区,页组成。 段 段就是上图的segment区域,常见的段有数据段、索引段、回滚段等,在InnoDB存储引擎中,对段的管理都是由引擎自身所完成的。 区 区就是上图的exte 阅读全文
posted @ 2021-12-13 16:13 残城碎梦 阅读(152) 评论(0) 推荐(0)
摘要:对于写Java的程序员来说,Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的红利的同时,我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,本期我们就一起来讨论一下Spring中Bean的实例化过程。 这里我们并不会详细的分析 阅读全文
posted @ 2021-12-13 15:20 残城碎梦 阅读(105) 评论(0) 推荐(0)
摘要:从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而在分析零拷贝。 I/O概念 缓冲区 缓冲区是所有I/O的基础,I/O讲的无非就是把数据 阅读全文
posted @ 2021-12-13 13:06 残城碎梦 阅读(68) 评论(0) 推荐(0)
摘要:Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪 阅读全文
posted @ 2021-12-13 09:06 残城碎梦 阅读(383) 评论(0) 推荐(0)
摘要:结论:String是有长度限制的。 首先要知道String的长度限制我们就需要知道String是怎么存储字符串的,String其实是使用的一个char类型的数组来存储字符串中的字符的。 那么String既然是数组存储,那数组会有长度的限制吗?是的,有限制,但是是在有先提条件下的,我们看看String 阅读全文
posted @ 2021-12-13 08:40 残城碎梦 阅读(431) 评论(0) 推荐(0)
摘要:先列一段代码: package cn.yqh.interview; public class Singleton { private static volatile Singleton singleton = null; private Singleton() { } public static S 阅读全文
posted @ 2021-12-13 08:34 残城碎梦 阅读(217) 评论(0) 推荐(0)
摘要:5种创建对象的方法 使用new关键字 这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。 Employee emp1 = new Employee(); 使用Class类的newInstance方法 这个方法创建对象其实我们用得也比较多,但是,这个 阅读全文
posted @ 2021-12-13 08:20 残城碎梦 阅读(414) 评论(0) 推荐(0)
摘要:Spring MVC的异步请求模式是Spring3.2就推出了,它是基于Servlet3.0规范实现的,而此规范是2011年推出的,距现在已经有近10的历史了,可谓是非常非常成熟的一种技术规范了。 Spring MVC的同步模式 要知道什么是异步模式,就先要知道什么是同步模式。 浏览器发起请求,We 阅读全文
posted @ 2021-12-12 17:11 残城碎梦 阅读(1022) 评论(0) 推荐(0)
摘要:PropertySource 注意:此处指的是org.springframework.core.env.PropertySource,而不是注解org.springframework.context.annotation.PropertySource PropertySource是抽象类,表示一个键 阅读全文
posted @ 2021-12-12 12:08 残城碎梦 阅读(1461) 评论(0) 推荐(1)
摘要:循环依赖:就是N个类循环(嵌套)引用。通俗的讲就是N个Bean互相引用对方,最终形成闭环。用一副经典的图示可以表示成这样(A、B、C都代表对象,虚线代表引用关系): 注意:其实可以N=1,也就是极限情况的循环依赖:自己依赖自己 这里指的循环引用不是方法之间的循环调用,而是对象的相互依赖关系。(方法之 阅读全文
posted @ 2021-12-12 12:07 残城碎梦 阅读(621) 评论(0) 推荐(1)
摘要:Spring的一个优秀之处在于,把view层技术与MVC框架的其他部分离开来。 例如,选择使用Velocity或者XSLT来代替已有的JSP方式只需要修改配置就可以实现。 我们知道,当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处 阅读全文
posted @ 2021-12-12 12:05 残城碎梦 阅读(478) 评论(0) 推荐(0)
摘要:@PropertySource和@ImportResource或许很多人都用过,并且都还没有用错。但是若真把它们拿过来一起的时候,却有点傻傻分不清楚了。 它们都是向容器中导入Bean/属性信息,但是使用起来还是有很大的区别的。 在讲解之前,可以记住一个通用的的结论: @PropertySource用 阅读全文
posted @ 2021-12-12 12:04 残城碎梦 阅读(404) 评论(0) 推荐(0)
摘要:本文介绍Spring MVC中的一个极其重要的组件:HttpMessageConverter消息转换器。 有一副非常著名的图,来形容Spring MVC对一个请求的处理: 从图中可见HttpMessageConverter对Spring MVC的重要性。它对请求、响应都起到了非常关键的作用~ 为何需 阅读全文
posted @ 2021-12-12 10:07 残城碎梦 阅读(1670) 评论(0) 推荐(0)
摘要:Spring MVC处理入参靠的是HandlerMethodArgumentResolver这个接口,解析返回值靠的是HandlerMethodReturnValueHandler这个策略接口。 Spring MVC支持非常多的返回值类型,然后针对不同的返回值类型:比如Map、比如ViewName、 阅读全文
posted @ 2021-12-12 10:07 残城碎梦 阅读(488) 评论(0) 推荐(0)
摘要:Spring MVC其实是内置了非常多的转换器来处理各种各样的MediaType。绝大多数情况下我们并不需要自己去定义转换器,全都交给Spring MVC去处理就够了。 但是Spring MVC既然帮我们内置了这么多的转换器,它默认都给我们加载进去了哪些了?若不是全部都加载进去,那我们遇到特殊的需求 阅读全文
posted @ 2021-12-12 10:05 残城碎梦 阅读(743) 评论(0) 推荐(0)
摘要:本文将聚焦于Spring MVC中最重要的一个组件:HandlerMapping。 HandlerMapping 用来查找Handler的。在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,具体接收到一个请求之后使用哪个Handler进行处理呢?这就是HandlerMappi 阅读全文
posted @ 2021-12-12 08:52 残城碎梦 阅读(1140) 评论(0) 推荐(0)
摘要:ServiceLoader:服务提供者加载器 SPI概念介绍 SPI:Service Provider Interfaces(服务提供者接口)。正如从SPI的名字去理解SPI就是Service提供者接口 SPI定位:给服务提供厂商与扩展框架功能的开发者使用的接口。 比如大名鼎鼎的JDBC驱动,Jav 阅读全文
posted @ 2021-12-11 22:28 残城碎梦 阅读(612) 评论(0) 推荐(0)
摘要:JDK中的事件驱动机制 在了解其它之前,有必要先了解下JDK为我们提供的事件驱动(EventListener、EventObject)、观察者模式(Observer)。 JDK不仅提供了Observable类、Observer接口支持观察者模式,而且也提供了EventObject、EventList 阅读全文
posted @ 2021-12-11 21:14 残城碎梦 阅读(1282) 评论(0) 推荐(1)
摘要:在阅读Spring源码的时候,经常会遇见一些处理器、提供器之类的组件,有的时候不深入去理解它的含义,确实还读不下去了。 为了方便自己流畅的阅读下去,本文介绍Spring提供的处理组件,尽量的解释清楚它们的作用甚至原理,以便我们能更自由的阅读。 ParameterNameDiscoverer:获取方法 阅读全文
posted @ 2021-12-11 19:05 残城碎梦 阅读(835) 评论(0) 推荐(1)
摘要:ConfigurationClassParser#doProcessConfigurationClass protected final SourceClass doProcessConfigurationClass(ConfigurationClass configClass, SourceCla 阅读全文
posted @ 2021-12-11 18:07 残城碎梦 阅读(210) 评论(0) 推荐(0)
摘要:为什么要控制Bean的加载顺序? @Order注解等并不能控制Bean的加载顺序的~~因为Spring在解析Bean的时候,根本就没有参考这个注解。另外@Configuration配置类的加载,也不会受到@Order注解的影响,它拿到配置的数组后,仅仅就是一个for循环遍历去解析。 另外需要说明的一 阅读全文
posted @ 2021-12-11 17:14 残城碎梦 阅读(5638) 评论(0) 推荐(0)
摘要:不可否认的是,把Bean交给Spring管理,确实极其的方便,优点一大把,并且还几乎没有啥缺点。这也就是为何咱们一言不合就把Bean扔给Spring的原因。(在Spring的技术栈里这么做,完全没有问题) 然而,就Spring框架本身而言。它的强大的依赖注入,不仅仅能给自家的Bean使用,还能赋能给 阅读全文
posted @ 2021-12-11 15:56 残城碎梦 阅读(399) 评论(0) 推荐(0)
摘要:BeanFactory和ApplicationContext 区别 BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用 基本区别 BeanFactory:BeanFacotry是Spring中最 阅读全文
posted @ 2021-12-11 14:39 残城碎梦 阅读(553) 评论(0) 推荐(0)
摘要:@Import模式向容器导入Bean是一种非常重要的方式,特别是在注解驱动的Spring项目中,@Enablexxx的设计模式中有大量的使用,在当下最流行的Spring Boot中,被用来做底层抽象、组件式的设计。 比如我们熟悉的:@EnableAsync、@EnableAspectJAutoPro 阅读全文
posted @ 2021-12-11 12:54 残城碎梦 阅读(1697) 评论(0) 推荐(1)
摘要:在介绍Spring IOC容器的刷新(初始化)过程,以及Spring 容器的Bean的实例化、初始化过程。我们提到了泛型依赖注入,本文就来聊聊Spring是如何做到的。 先来看一个例子: // 准备一个带泛型的Bean @Getter @Setter @NoArgsConstructor @AllA 阅读全文
posted @ 2021-12-11 08:28 残城碎梦 阅读(1147) 评论(0) 推荐(1)
摘要:先上图: 从截图上可以看到我标红的我们比较熟悉,配置过的一些Filter,他们都继承自OncePerRequestFilter。 该Filter从字面上理解:只执行一次的Filter。可能有人会问了,我们自己写的Filter不都只执行一次吗?为何Spring还要专门提供这么一个类来处理呢? 在Spr 阅读全文
posted @ 2021-12-10 20:15 残城碎梦 阅读(4991) 评论(1) 推荐(1)
摘要:在Java Web的开发中,我们大都执行着三层的开发模式(Controller、Service、Dao)。 在实际开发中:有不少小伙伴想在Service层或者某个工具类层里获取HttpServletRequest对象,甚至response的都有。 其中一种方式是,把request当作入参,一层一层的 阅读全文
posted @ 2021-12-10 18:13 残城碎梦 阅读(1252) 评论(0) 推荐(0)
摘要:问题剖析: 一个请求url是怎么样找到Handler进行处理的? 拦截器为何preHandler顺序执行,postHandler就倒序执行呢? Spring MVC是怎么样去优雅的处理异常的? …... 请求处理流程: 了解之前,我们先宏观看看,一个请求达到Spring MVC,它的一个处理流程。 阅读全文
posted @ 2021-12-10 17:53 残城碎梦 阅读(419) 评论(0) 推荐(0)
摘要:为了更好的去理解Spring MVC的工作机制,这篇文章我们主要来讲Spring MVC在初始化的时候(容器启动的时候),做了哪些准备工作。 比如URL和Controller的绑定,以及URL和方法method的绑定,拦截器的初始化,视图解析器的初始化等Spring MVC web9大组件的初始化。 阅读全文
posted @ 2021-12-10 16:08 残城碎梦 阅读(404) 评论(0) 推荐(0)
摘要:Servlet3.0是一次Java EE规范的一次重要升级,支持到可以全部采用注解驱动,大大简化了配置web.xml的麻烦。现在启动一个web容器并不强制依赖于web.xml部署描述符了。 最让我们印象深刻的是,之前我们在使用Spring MVC的时候,DispatcherServlet是必须要要在 阅读全文
posted @ 2021-12-10 09:59 残城碎梦 阅读(651) 评论(0) 推荐(0)
摘要:bean的生命周期指的是bean创建——初始化到销毁的过程。 我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法。 单实例:在容器启动的时候创建对象多实例:容器不会管理这个bean;容器不会调用销毁方法; Bean生命周期初始化、销毁相关的4种方 阅读全文
posted @ 2021-12-09 23:17 残城碎梦 阅读(334) 评论(0) 推荐(0)
摘要:Spring是一个非常优秀且流行的框架,里面不乏有很多优秀的设计模式、设计思想。 SimpleAliasRegistry这个类实现了接口AliasRegistry,而这个接口顾名思义:它就是别名管理器。SimpleAliasRegistry就是Spring提供的一个默认实现,其内部会缓存这些别名和真 阅读全文
posted @ 2021-12-09 22:06 残城碎梦 阅读(197) 评论(0) 推荐(1)
摘要:直接区别 直面意思:Bean工厂、工厂Bean。 BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。 Facto 阅读全文
posted @ 2021-12-09 21:44 残城碎梦 阅读(348) 评论(0) 推荐(0)
摘要:Spring的工具类ConfigurationClassParser用于分析@Configuration注解的配置类,产生一组ConfigurationClass对象。它的分析过程会接受一组种子配置类(调用者已知的配置类,通常很可能只有一个),从这些种子配置类开始分析所有关联的配置类,分析过程主要是 阅读全文
posted @ 2021-12-09 18:11 残城碎梦 阅读(160) 评论(0) 推荐(0)
摘要:在Spring3.0以后,官方推荐我们使用注解去驱动Spring应用。那么很多人就一下子懵了,不需要xml配置文件了,那我的那些配置项怎么办呢? @Configuration是Spring3.0推出来的注解,用来代替xml配置文件。若一个Class类被标注了这个注解,我们就认为这个类就是一个配置类, 阅读全文
posted @ 2021-12-09 13:12 残城碎梦 阅读(539) 评论(1) 推荐(2)
摘要:在Spring Framework里的spring-core核心包里面,有个org.springframework.util包,里面有不少非常实用的工具类。 该工具包里面的工具类虽然是被定义在Spring下面的,但是由于Spring框架目前几乎成了JavaEE实际的标准了,因此我们直接使用也是无妨的 阅读全文
posted @ 2021-12-09 08:20 残城碎梦 阅读(424) 评论(0) 推荐(0)
摘要:本文主要聊聊Spring提供的多个关于注解相关的工具类:AnnotationUtils和AnnotatedElementUtils等等。 因为很多逻辑都封装在了工具类里面,因此要理解Spring的深层意思,有时候不了解工具类也是比较麻烦的。虽然说都是Spring内部去使用,但是有些工具类是publi 阅读全文
posted @ 2021-12-08 23:59 残城碎梦 阅读(1496) 评论(0) 推荐(0)
摘要:这篇文章主要讲解Spring IOC容器的主要内容:Bean的实例化、初始化。 通过之前跟踪Spring IOC刷新的源码,我们所有的剩余的单例Bean都是通过这一步:finishBeanFactoryInitialization(beanFactory);来进行初始化的。最重要的一个方法就为:De 阅读全文
posted @ 2021-12-08 23:38 残城碎梦 阅读(420) 评论(0) 推荐(2)
摘要:基本概念 主键、外键、超键、候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。 候选键:是最小超键,即没有冗余元素的超键。 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数 阅读全文
posted @ 2021-12-07 13:07 残城碎梦 阅读(162) 评论(0) 推荐(0)
摘要:两种注入方式 第一种注入方式: 第二种注入方式: 结合策略设计模式 策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,可以替代代码中大量的 if-else。 比如我们生活中的场景:买东西结账可以使用微信支付、支付宝支付或者银行卡支付,这些交易方式就是不同的策 阅读全文
posted @ 2021-12-07 08:57 残城碎梦 阅读(2575) 评论(0) 推荐(2)
摘要:我们基本已经形成了常识,需要用到金钱的地方要用BigDecimal而不是其他,而我们也都知道浮点型变量在进行计算的时候会出现丢失精度的问题。 那么,你知道其实BigDecimal也会丢失精度吗? 如下一段代码: System.out.println(0.05 + 0.01); System.out. 阅读全文
posted @ 2021-12-07 08:29 残城碎梦 阅读(93) 评论(0) 推荐(0)
摘要:关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。 策略模式 关于策略模式的使用方式,在Spring中其实比较简单,从本质上讲,策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。 Sp 阅读全文
posted @ 2021-12-07 08:28 残城碎梦 阅读(223) 评论(0) 推荐(0)
摘要:创建SpringBoot项目的3种方式Spring Boot 简介 SpringBoot是一个快速开发框架,通过maven依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置,内置HTTP服务器(Tomcat,Jetty),最终以Java应用程序进行执行。 三种创建 Spr 阅读全文
posted @ 2021-12-05 15:44 残城碎梦 阅读(2553) 评论(0) 推荐(0)
摘要:什么是分布式事务 分布式对应的是单体架构,互联网早起单体架构是非常流行的,好像是一个家族企业,大家在一个家里劳作,单体架构如下图: 但是随着业务的复杂度提高,大家族人手不够,此时不得不招人,这样逐渐演变出了分布式服务,互相协作,每个服务负责不同的业务,架构如下图: 因此需要服务与服务之间的远程协作才 阅读全文
posted @ 2021-12-05 07:10 残城碎梦 阅读(665) 评论(0) 推荐(0)
摘要:单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点! 懒汉, 线程安全 在方法上添加synchronized。在多线程下可以很好的工作,也延迟加载了,但是效率很低,99%情况下不需要同步。 饿汉, 线程安全 定义一个static变量,直接创建单例对象,线程安全,无延迟加载。 这种方 阅读全文
posted @ 2021-12-04 22:50 残城碎梦 阅读(51) 评论(0) 推荐(0)
摘要:单一职责原则——SRP 开闭原则——OCP 里式替换原则——LSP 依赖倒置原则——DIP 接口隔离原则——ISP 迪米特原则——LOD 单一职责原则 单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情(单例模式其实是违背该原则的)。如果一个类负责了方法 阅读全文
posted @ 2021-12-04 22:50 残城碎梦 阅读(66) 评论(0) 推荐(0)
摘要:基础概念简述 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 锁 数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资 阅读全文
posted @ 2021-12-04 22:50 残城碎梦 阅读(76) 评论(0) 推荐(0)
摘要:Java中创建线程主要有三种方式 继承Thread类创建线程类 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 创建Thread子类的实例,即创建了线程对象。 调用线程对象的start()方法来启动该线程。 Threa 阅读全文
posted @ 2021-12-04 15:03 残城碎梦 阅读(47) 评论(0) 推荐(0)
摘要:线程池的好处 线程池的重用 线程的创建和销毁的开销是巨大的,而通过线程池的重用大大减少了这些不必要的开销,当然既然少了这么多消费内存的开销,其线程执行速度也是突飞猛进的提升。 控制线程池的并发数 并发:在某个时间段内,多个程序都处在执行和执行完毕之间;但在一个时间点上只有一个程序在运行。头脑风暴:老 阅读全文
posted @ 2021-12-04 15:01 残城碎梦 阅读(93) 评论(0) 推荐(0)
摘要:新手常犯的错误 可能很多新手(包括当年的我)第一时间想到的写法是下面这样的: public static void main(String[] args) { List<String> platformList = new ArrayList<>(); platformList.add("博客园") 阅读全文
posted @ 2021-12-04 15:01 残城碎梦 阅读(72) 评论(0) 推荐(0)
摘要:知识回顾 线程与进程 一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。 线程类Thread的几个重要方法 start()方法,调用该方法开始执行该线程; join方法,调用该 阅读全文
posted @ 2021-12-04 15:01 残城碎梦 阅读(61) 评论(0) 推荐(0)
摘要:为什么使用线程池 每个请求对应一个线程方法的不足是:为每个请求创建一个新线程的开销很大;为每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。容易引起资源不足,造成浪费。为解决单个任务处理时间很短而请求的数目巨大的问题,引出线程池: 通过 阅读全文
posted @ 2021-12-04 15:00 残城碎梦 阅读(62) 评论(0) 推荐(0)
摘要:volatile的作用 通常情况下我们可以通过Synchronized关键字来解决可见性、有序性及原子性问题,不过synchronized是一个比较重量级的操作(但是jdk1.6以后做了优化),对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用synchronized来解决问题 阅读全文
posted @ 2021-12-04 13:11 残城碎梦 阅读(107) 评论(0) 推荐(0)
摘要:线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。 New:新建状态,当线程创建完成时为新建状态,即new Thread(…),还没有调用start方法时,线程处于新建状态。 R 阅读全文
posted @ 2021-12-04 13:10 残城碎梦 阅读(65) 评论(0) 推荐(0)
摘要:Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。 Synchronized的作用主要有三个: 确保线程互斥的访问同步代码 保证共享变量的修改能够及时可见 有效解决重排序问题 从语法上讲,Synchronized总共有三种用 阅读全文
posted @ 2021-12-04 13:10 残城碎梦 阅读(64) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2021-12-04 13:06 残城碎梦 阅读(51) 评论(0) 推荐(0)
摘要:对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定! 问题复现 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,接着就是各种报警:例如接口超时报警等。此时急需快速线上排查问题。 问题排查 不管什么问题, 阅读全文
posted @ 2021-12-04 12:07 残城碎梦 阅读(524) 评论(0) 推荐(0)
摘要:存储引擎的比较 注:上面提到的B树索引并没有指出是B-Tree和B+Tree索引,但是B-树和B+树的定义是有区别的。 在 MySQL 中,主要有四种类型的索引,分别为:B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。 B-Tree 索引是 MySQL 数据库中 阅读全文
posted @ 2021-12-04 11:18 残城碎梦 阅读(174) 评论(0) 推荐(0)
摘要:下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 INNER JOIN(内连接) 在表中存在至少一个匹配时,INNER JOIN 关键字返回行(并集)。 注意:INNER JOIN 与 JOIN 是相同的。 SELECT <sel 阅读全文
posted @ 2021-12-04 10:14 残城碎梦 阅读(272) 评论(0) 推荐(0)
摘要:MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。 如何加锁? MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给 阅读全文
posted @ 2021-12-04 10:03 残城碎梦 阅读(600) 评论(0) 推荐(0)
摘要:每次谈到数据库的事务隔离级别,大家一定会看到这张表。 经常看到RR(可重复读)级别是可以重复读的,但是无法解决幻读,只有可串行化(Serializable)才能解决幻读,这个说法是否正确呢? 假设我们的数据库中有如下结构和数据的Users表,下文中我们将对这张表进行操作 什么是幻读 在说幻读之前,我 阅读全文
posted @ 2021-12-02 23:02 残城碎梦 阅读(434) 评论(0) 推荐(0)
摘要:MySQL是一个开放源码的关系数据库管理系统,目前为Oracle旗下产品。被甲骨文公司收购后,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。原先一些使用MySQL的开源软件,部分转向了MariaDB或其它的数据库。不可否认的是,MySQL由于其性能高、成本低、可靠 阅读全文
posted @ 2021-12-02 21:52 残城碎梦 阅读(513) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2021-12-02 15:39 残城碎梦 阅读(39) 评论(0) 推荐(0)
摘要:MySQL中myisam与innodb的区别 MyISAM: 不支持事务,但是每次查询都是原子的; 支持表级锁,即每次操作对整个表加锁; 存储表的总行数; 一个MYISAM表有三个文件:索引文件、表结构文件、数据文件; 采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致, 阅读全文
posted @ 2021-12-02 13:29 残城碎梦 阅读(215) 评论(0) 推荐(0)
摘要:选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。 为经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GR 阅读全文
posted @ 2021-12-02 12:59 残城碎梦 阅读(72) 评论(0) 推荐(0)
摘要:Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如 Android或者第三方服务商都是使用 RestTemplate 请求 restfu 阅读全文
posted @ 2021-12-02 10:39 残城碎梦 阅读(382) 评论(0) 推荐(0)
摘要:公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺 阅读全文
posted @ 2021-12-02 09:29 残城碎梦 阅读(79) 评论(0) 推荐(0)
摘要:在线下载JDK 命令如下: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/ 阅读全文
posted @ 2021-12-02 08:09 残城碎梦 阅读(426) 评论(0) 推荐(0)
摘要:判断一个整数是否是奇数: public boolean isOdd(int i) 很多人都会这样写: public boolean isOdd(int i) { if (i % 2 == 1) { return true; } else { return false; } } 优化以下: publi 阅读全文
posted @ 2021-12-01 22:51 残城碎梦 阅读(122) 评论(0) 推荐(0)
摘要:随着时间和业务的发展,数据库中表的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大。因此,把其中一些大表进行拆分到多个数据库中的多张表中。 本篇文章是基于非事务消息的异步确保的方式来完成分库分表中的事务问题。 需要解决的问题 原有事务 由于分库分表之后,新表在另外一个数据库中,如何保证 阅读全文
posted @ 2021-12-01 22:50 残城碎梦 阅读(580) 评论(0) 推荐(0)
摘要:BeanFactory和FactoryBean的区别 BeanFactory是接口,提供了IOC容器最基本的形式,给具体的IOC容器的实现提供了规范。 ApplicationContext由BeanFactory接口派生而来,包含BeanFactory的所有功能。 FactoryBean也是接口,为 阅读全文
posted @ 2021-12-01 22:22 残城碎梦 阅读(125) 评论(0) 推荐(0)
摘要:1、首先final修饰成员变量(final单独修饰不和static一起使用)是在实例初始化的时候被赋值的。这个和非final修饰成员变量赋值时机没有什么不同,只不过final修饰的不能多次赋值罢了。 2、final static修饰的成员变量只有在其类型为ConstantValue时才会在准备阶段被 阅读全文
posted @ 2021-12-01 09:09 残城碎梦 阅读(477) 评论(0) 推荐(0)