06 2019 档案
摘要:MySQL SQL优化 1、建表 1)、主键使用合适的无符号unsigned整型自增(避免数据增加时索引页分裂) 2)、长度固定的字符串字段使用CHAR类型,Varchar会额外使用1或者2个字节(长度小于255使用1字节)存储字符串长度 3)、选择合适的字符串数据类型和日期类型(优先TIMESTA
阅读全文
摘要:1、给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 时间复杂度待优化
阅读全文
摘要:一、链表相关 1、单链表倒序 定义链表节点Node public class Node { private int index; //当前节点值 public Node next; public Node(NodeBuilder builder) { this.index = builder.get
阅读全文
摘要:缓存由于其高并发和高性能的特征,已经在项目中被广泛应用。 使用缓存的同时,也带来了缓存和数据库一致性问题。对于缓存数据库一致性问题,有很多解决方案,没有最完美的方案,只有适合自身业务的尽可能完美的方案。 缓存读取和更新过程: 查询时一般先查询缓存,如果缓存命中的话,那么直接将数据返回。 如果缓存中没
阅读全文
摘要:什么是微服务? 传统的单机应用程序随着应用规模和复杂度的增长,多个团队在一个应用上进行开发,每当各个团队需要修改代码时,整个应用程序都需要重新构建、重新测试和重新部署。 而微服务允许将一个大型的应用分解为具有严格职责定义的便于管理的组件系统,即分解和分离应用程序的功能,使它们完全独立,形成多个小的,
阅读全文
摘要:I/O是什么? I/O其实就是 input 和 output 的缩写,即输入/输出。 I/O 就是指内存与外部设备之间的交互(数据拷贝) 磁盘 I/O 指的是硬盘和内存之间的输入输出 读取本地文件的时候,要将磁盘的数据拷贝到内存中,修改本地文件的时候,需要把修改后的数据拷贝到磁盘中 网络 I/O 指
阅读全文
摘要:使用Java Socket实现一个简单的RPC调用,其基本原理如下: 角色说明: Service Api:客户端定义的服务接口 Consumer Proxy:Service API接口的代理类,内部逻辑通过Socket与服务的提供方进行通信,包括写入调用参数与获取调用返回的结果对象,通过代理使通信及
阅读全文
摘要:Spring Boot的特性 1)、创建独立的Spring应用 2)、直接嵌入Tomcat、Jetty或Undertow等Web容器(不需要部署WAR文件) 3)、提供固化的starter依赖,简化构建配置和依赖管理 4)、当条件满足时自动地装配Spring或第三方类库 5)、提供运维(Produc
阅读全文
摘要:什么是Servlet? Servlet是运行在Web服务器或应用服务器(如tomcat)上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。 使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创
阅读全文
摘要:微服务架构:微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中进行,服务之间通过基于HTTP的RESTful API进行通信协作。被拆分的每一个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建,并且每个服务都维护着自身
阅读全文
摘要:Enum源码: Enum.java /* * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject
阅读全文
摘要:设计模式分为创建型、行为型和结构型 设计模式的6大原则: 1、开闭原则:对扩展开放,对修改关闭 2、里氏替换:任何父类出现的地方,子类都可以替换。子类不要重写和重载父类的方法 3、迪米特原则:减少类之间的耦合,调用依赖类封装好的方法,不对其进行修改 4、接口隔离:接口最小化,实现的接口不应包含不需要
阅读全文
摘要:堆dump文件分析 Java代码: public class HeapTest2 { static class OOMObject { private byte[] arrs = new byte[64 * 1024]; // 会占用64k的堆内存 } public static void fill
阅读全文
摘要:先复习Java中的异常 java.lang.Throwable 顶层父类 |– Error错误:JVM内部的严重问题,如OOM,程序员无法在代码中无法处理。 |–Exception异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求程序员要进行处理。 |–RuntimeExceptio
阅读全文
摘要:前言 进程:进程是操作系统资源分配的最小单位 进程有自己的虚拟地址空间,这个空间包括了各种资源,例如堆、栈,各种段,它们其实都是虚拟地址空间的一块区域。所以说进程是资源分配的最小单位。 线程:线程是操作系统任务调度和执行的最小单位。 线程包含在进程之中,是进程中实际运作单位 协程:协程运行在线程之上
阅读全文
摘要:ArrayList是容量可以改变的非线程安全集合。内部实现使用数组进行存储(需要一块内存连续的空间),集合扩容时会创建更大的数组空间,把原有数据复制到新的数组中。 ArrayList支持对元素的快速随机访问,但是插入与删除速度通常很慢(会涉及元素的移动,时间复杂度为O(n))。 public cla
阅读全文
摘要:Lock Lock是顶层接口,它的实现逻辑并未用到synchronized,而是利用了volatile的可见性。 public interface Lock { /** * Acquires the lock.获取锁 * 如果锁不可用,则当前线程将被禁用以用于线程调度,并处于休眠状态,直到获得锁为止
阅读全文
摘要:一、 线程不安全验证: /** * SimpleDateFormat线程安全测试 * 〈功能详细描述〉 * * @author 17090889 * @see [相关类/方法](可选) * @since [产品/模块版本] (可选) */ public class SimpleDateFormatT
阅读全文
摘要:了解HashMap原理之前先了解一下几种数据结构: 1、数组:采用一段连续的内存空间来存储数据。对于指定下标的查找,时间复杂度为O(1),对于给定元素的查找,需要遍历整个数据,时间复杂度为O(n)。但对于有序 数组的查找,可用二分查找法,时间复杂度为O(logn),对于一般的插入删除操作,涉及到数组
阅读全文
摘要:在分布式时代,分库分表是非常常见的,在微服务系统中,各个系统通常有自己的独立的数据库,所以,事务很难靠数据库本身保证,只能靠业务系统来控制。这就是分布式事务的由来。 在分布式系统中,每一个机器节点虽然都能够明确知道自己在事务操作过程中的结果是成功或失败,但却无法直接获取到其他分布式节点的操作结果。(
阅读全文
摘要:在冯诺依曼定义的计算机模型中,任何程序都需要加载到内存中才能与CPU进行交流。字节码.class文件同样需要加载到内存中,才可以实例化类。 ClassLoader类加载器负责将提前加载.class类文件到内存中,使用双亲委派机制 类加载是一个将.class字节码文件读入内存,并实例化为Class对象
阅读全文
摘要:一、拓展原理 1、BeanPostProcessor:bean的后置处理器,在bean创建对象之后的初始化前后做一些拦截工作 2、BeanFactoryPostProcessor:beanFactory的后置处理器,在BeanFactory初始化之后调用【postProcessBeanFactory
阅读全文
摘要:Spring中最核心的两个类:DefaultListableBeanFactory和XmlBeanDefinitionReader 1、DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现,其继承AbstractAutowire
阅读全文
摘要:1、Hashtable是线程安全的,采用全量加锁的方式控制多线程并发访问 2、不允许null键和null值(HashMap可以接受为null的键值(key)和值(value)) 3、一次仅能有一个对象来读取和修改Hashtable,每个线程要获取或修改都要先拿到同步锁,其他线程要等待同步锁被释放之后
阅读全文
摘要:HashMap不是线程安全的,其所有的方法都未同步,虽然可以使用Collections的synchronizedMap方法使其线程安全,但是针对的只是当前的map对象。 对此,JDK提供了线程安全的Hashtable,其所有的方法都是同步的,使用的是全局同步锁,即使用Synchronized关键字进
阅读全文
摘要:1、Lambda 表达式 Lambda表达式,也可称为闭包 Lamdba允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 ambda 表达式的语法格式如下: (parameters) -> expression 接收的参数->元素表达式 或 (parameters) ->{ stateme
阅读全文
摘要:一、Spring容器: 在基于Spring的应用中,你的应用对象生存于Spring容器(container)中,Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡。(在这里,可能就是从new()到finalize())。 容器是Spring框架的核心。Spring
阅读全文