- 博客(95)
- 收藏
- 关注
原创 软件开发流程
1、产品调研需要了解产品需求,需要开发的功能,并且整理成文档。2、需求评审这时需要开会,(产品/设计/前端/后端/测试/运营),一起讨论,评估。考虑开发时间,功能是否合理,能否完成,难点等等。1.UI设计。在ui设计完成之后进行前后端开发。2.后端开发架构设计、数据库、编码、单元测试、API文档、MOCK数据(假数据,模拟一些数据来实现联调,具体百度。)3.前端开发与后端类似4.前后端联调3、项目提测功能测试,压力测试,(测试人员)4、修复bug5、回归测试6、部署上线7、
2021-12-11 12:29:24
1215
原创 docker安装mysql主从集群(一主一从)
1、安装docker安装yum-utils:yum install -y yum-utils device-mapper-persistent-data lvm2为yum源添加docker仓库位置:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo安装docker:yum install docker-ce启动docker:systemctl start doc
2021-10-11 04:18:17
983
原创 懒汉式单例模式的问题和Double Check
单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。该模式有三个基本要点:这个类只能有一个实例;它必须自行创建这个实例;它必须自行向整个系统提供这个实例。懒汉式单例模式,使用的时候才创建但懒汉式单例在多线程情况下会出现一个问题, 就是在多线程情况下会出现单例对象会创建多个实例;/** * 懒汉式单例模式,使用的时候才创建, * 在多线程情况下会出现一个问题, * 就是在多线程情况下会出现单例对象会创建多个实例; */class Singleton {
2021-09-27 15:28:09
437
转载 mybatis中关于example类详解mybatis的Example[Criteria]的使用
一、什么是example类 mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。具体配置可以参考MBG有关配置。 下面是mybatis自动生成example的使用。二、了解example成员变量 //升序还是降序 //参数格式:字段+空格+asc(desc) pr
2021-08-28 15:33:08
11902
1
原创 ArrayList和LinkedList的区别
面试中经常会被问到ArrayList和LinkedList的区别,今天总结一下。数据结构图示顺序表(ArrayList)顺序表一般表现为数组,使用一组地址连续的存储单元依次存储数据元素,如图 1 所示。它具有如下特点:长度固定,必须在分配内存之前确定数组的长度。存储空间连续,即允许元素的随机访问。存储密度大,内存中存储的全部是数据元素。要访问特定元素,可以使用索引访问,时间复杂度为 O(1)O(1)O(1)。要想在顺序表中插入或删除一个元素,都涉及到之后所有元素的移动,因此时间复杂度为 O(
2021-06-04 05:25:17
610
原创 Java知识点汇总(不断完善中)--面试必备
链接:https://www.processon.com/view/link/5feda9bde0b34d19e4f5a52c#map
2021-03-23 18:50:53
81
原创 关于synchronized的三道面试题
1.为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。2.实现原理synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性3.synchronized的三种应用方式Ja
2021-03-21 20:09:36
613
4
转载 Mysql的MVCC的理解
MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。在Mysql的InnoDB引擎中就是指在已提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别下的事务对于SELECT操作会访问版本链中的记录的过程。这就使得别的事务可以修改这条记录,反正每次修改都会在版本链中记录。SELECT可以去版本链中拿记录,这就实现了读-写,写-读的并发执行,
2021-03-05 13:35:38
78
原创 相关前端概念
Vue.JS是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。Node.JS简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。NPMNPM全称Node Package
2021-02-14 01:23:52
94
原创 StringTable的概念、hashcode()、equals的区别与联系、String、StringBuffer、StringBuilder区别、ArrayList 和 LinkedList
String table又称为String pool,字符串常量池,其存在于堆中(jdk1.7之后改的)。最重要的一点,String table中存储的并不是String类型的对象,存储的而是指向String对象的索引,真实对象还是存储在堆中。此外String table还存在一个hash表的特性,里面不存在相同的两个字符串。此外String对象调用intern()方法时,会先在String table中查找是否存在于该对象相同的字符串,若存在直接返回String table中字符串的引用,若不存在则在
2021-02-05 12:19:55
172
原创 MySQL经典书籍:MySQL技术内幕 InnoDB存储引擎
链接:https://pan.baidu.com/s/1JUgRZrEtel5a7aAp-7Dbwg提取码:34py
2021-02-04 23:52:23
720
原创 JSON转Java POJO就是这么简单快捷(转)
1. 前言作为一名 Java 后端程序员经常会有封装一些调用第三方接口的实际需求。比如胖哥最近对微信支付 V3 的封装。❝https://github.com/NotFound403/payment-spring-boot欢迎 star 哦。大家都明白第三方接口的参数和返回值都是提供方定义好的,我们封装时需要生成自己的POJO类。这种工作没有技术含量不说,还耗时耗力。就拿微信支付新出的商家券参数来举例:{ "stock_name":"8月1日活动券", "belong_merchant"
2021-01-28 16:30:18
533
1
转载 Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
PO(bean、entity等命名):Persistant Object持久对象,数据库表中的记录在java对象中的显示状态最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。BO(service、manager、business等命名):Business Object业务对象主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。形象描述为一个对象的形为和动作,当然也有涉及到基它对象的一些形为和动作。比如处理一个人
2021-01-25 08:54:47
155
原创 二分查找算法及其应用
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。查找过程首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。算法复杂度二分查找的
2021-01-13 06:55:35
828
原创 使用LinkedHashMap来实现LRU算法
LRU算法:即淘汰最近最少未使用的请求算法LinkedHashMap中除了具有链表和HashMap的特征之外,还具有实现LRU算法的一些特性。从其源码注解中可以得知:This kind of map is well-suited to building LRU caches. Invoking the {@code put}, {@code putIfAbsent}, {@code get}, {@code getOrDefault}, {@code compute}, {@code compute
2020-12-31 10:24:49
140
转载 Java注解之 @Target、@Retention、@Documented简介
@Target:注解的作用目标@Target(ElementType.TYPE)——接口、类、枚举、注解@Target(ElementType.FIELD)——字段、枚举的常量@Target(ElementType.METHOD)——方法@Target(ElementType.PARAMETER)——方法参数@Target(ElementType.CONSTRUCTOR) ——构造函数@Target(ElementType.LOCAL_VARIABLE)——局部变量@Target(Elemen
2020-12-04 19:35:22
187
原创 分布式事务常见的四种解决方案
分布式事务的四种解决方案简述分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。解决方案在分布式系统中,要实现分布式事务,无外乎那几种解决方案。一、两阶段提交(2PC)两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。运行过程1.1 准备阶段协调者询问参与者事务是否执行成功,参与者发回事务执行结
2020-10-30 15:23:09
194
原创 一道关于字符串的面试题
package resume;public class Demo3 { public static void main(String[] args) { String s1 = "a"; String s2 = "b"; String s3 = "a" + "b"; //s3(ab)存于StringTable中 /** * new StringBuilder().append("a").append("b").to
2020-08-29 20:38:49
136
原创 int和Integer的区别与联系:包装类、自动拆箱装箱、享元模式
1、基本数据类型和引用数据类型1.1、 基本数据类型:java提供了8中基本数据类型:boolean、byte、int、char、long、short、double、float;java提供诸如:类、接口等引用数据类型,其中Integer就是一种引用数据类型,常被称为包装类。1.2、int和Integer的区别int是基本数据类型,Integer是int包装类。Integer变量必须实例化后才能使用,int可以直接使用Integer的默认值是null,int默认值是0Integer变量实际
2020-07-24 20:09:01
551
原创 Spring-7:Spring事务传播属性和隔离级别
一、Spring事务传播属性(Propagation):REQUIRED(默认属性)如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。...
2020-07-13 00:02:18
116
原创 类的初始化和类的实例化过程举例分析
类的初始化和类的实例化package resume;public class Father { private int i = test(); private static int j = method(); static { System.out.print("1\t"); } Father(){ System.out.print("2\t"); } { System.out.print("
2020-07-08 21:13:30
284
原创 Java面试题之变量自增:i++、++i 分析
代码:package resume;public class Demo1 { public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i+ ++i * i++; System.out.println("i = "+i); System.out.println("j = "+j);
2020-07-08 18:34:26
258
原创 Java并发编程之Semaphore
Semaphore是什么?Semaphore被称为信号量,Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个线程请求许可,如果没有就等待,而 release() 释放一个线程请求许可。Semaphore使用原理尝试获取一个许可,若获取成功,则立即返回true,若获取失败,则立即返回falsepublic boolean tryAcquire() { };尝试获取一个许可,若在指定的时间内获取成功,则立即返回true,否则则立即返回falsepublic boolea
2020-07-07 10:28:02
192
1
原创 Java并发编程之CyclicBarrier
CyclicBarrier概念CyclicBarrier(可循环利用的屏障)是一个同步工具,可以实现让一组线程等待至某个状态之后再全部执行相关操作。首先,便是可重复利用,说明该类创建的对象可以复用;其次,屏障则体现了该类的原理:每个线程执行时,都会碰到一个屏障,直到所有线程执行结束,然后屏障便会打开,使所有线程继续往下执行。另外,CyclicBarrier的两个构造函数:CyclicBarrier(int parties)和CyclicBarrier(int parties, Runnable ba
2020-07-07 01:00:56
98
原创 Java并发编程之CountDownLatch
什么是CountDownLatchCountDownLatch是java.util.concurrent包中一个类,其基于线程计数器来实现并发访问控制。CountDownLatch运行机制CountDownLatch只要提供的机制是多个(具体数量等于初始化CountDownLatch时count的值)线程都达到了预期状态或者完成了预期工作时触发事件,其他线程可以等待这个事件来触发自己后续的工作。等待的线程可以是多个,即CountDownLatch可以唤醒多个等待的线程。到达自己预期状态的线程会调用C
2020-07-06 23:18:05
179
原创 Java并发编程之CAS解析(一):什么是CAS、乐观锁和悲观锁、CAS机制的使用、CAS和volatile的关系、CAS的特点、ABA问题,ABA问题的解决方法
什么是CASCAS(Compare And Swap/Compare And Set)是用于多线程同步的原子性指令,CAS主要通过三个值来实现,原始内存的值,给定的预期值,给定更新值,只有当原始内存的值与给定的预期值相等的情况下,才将更新值返回。CAS的作用:CAS可以将比较和交换转换为原子操作,这个原子操作直接由CPU保证。CAS可以保证共享变量赋值时的原子操作。乐观锁和悲观锁悲观锁从悲观的角度出发:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人
2020-06-24 09:09:53
405
原创 Java反射机制-4:Spring IOC的基础Java反射机制
Java反射机制概述作为Java高级属性,Java反射机制将类中的各个组成部分封装为其他对象,这就是反射机制。好处:可以在程序运行过程中操作这些对象。可以解耦,提高程序的可扩展性。Spring IOC:...
2020-06-19 17:53:49
160
原创 线程状态和线程等待唤醒机制解析
1、线程状态1.1、线程状态划分当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,有几种状态呢?在API中 java.lang.Thread.State 这个枚举中给出了六种线程状态:这里先列出各个线程状态发生的条件,下面将会对每种状态进行详细解析。1、Timed Waiting(计时等待)Timed Waiting在API中的描述为:...
2020-05-01 01:36:28
902
原创 Java线程池的概念及使用
1、什么是线程池?线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅...
2020-04-29 00:19:02
403
原创 Lambda表达式解析
1.什么是Lamdba表达式Lambda 表达式是Java 8 发布的重要新特性。Lambda 表达式是一种匿名函数,简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 语言的表达能力得到了提升。2、Lambda表达式的语法基本语法: (parameters) -> expression3、...
2020-04-29 00:12:23
1249
原创 Mybatis中多表查询之多对多查询
该例有两个数据表:user和role以及一个用户角色中间表,用户与角色的多对多关系模型如下:其中:user表:role表:用户角色中间表user_role:分析:role表和user表构成了多对多的关系:即一个用户user可能有多个角色role,而同一个角色也可以从属于多个用户。其实多对多关系,我们可以看成是双向的一对多关系。需求:进行多对多查询:其实双向的一对多查询。步骤:...
2020-04-17 12:43:37
239
原创 Mybatis中多表查询之一对多查询
首先,查看两张数据表:user和account。user表:account表:并且,account的外键UID所对应的是user表的主键id。需求: 查询所有用户信息及用户关联的账户信息。分析: 用户信息和他的账户信息为一对多关系,并且查询过程中如果用户没有账户信息,此时也要将用户信息 查询出来,我们想到了左外连接查询比较合适。步骤:1.定义User实体信息类:package...
2020-04-16 17:03:38
237
原创 Mybatis中多表查询之一对一查询
首先,查看两张数据表:user和account。user表:account表:并且,account的外键UID所对应的是user表的主键id。需求:查询所有账户信息,关联查询下单用户信息。分析:因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询。方式一:1.定义账户Account实体信息类:package com.itheima.domain;...
2020-04-16 16:39:21
200
原创 HashMap自定义存储类型
自定义Person数据类型:package hashmap;import java.util.Objects;public class Person { private Integer age; private String name; public Integer getAge() { return age; } public...
2020-04-03 20:03:12
471
原创 1.操作系统概述
操作系统的概念:操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。操作系统的四大特征:1.并发首先,要搞清楚并发和并行的区别:并发是指多个事件在同一时间间隔内发生。并行是指多个事件在同一时间点发生。操作系统的并发性是指计算机系统中同时存在着多个运...
2020-03-31 21:24:36
112
原创 SpringMVC:拦截器
SpringMVC中的拦截器*1.首先,SpringMVC中的拦截器是用于对处理器进行预处理和后处理的技术。2.另外,Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter, 用户可以自己定义一些拦截器来实现特定的功能。谈到拦截器,就会出现另一个概念:拦截器链(Interceptor Chain)。拦截器链就是将拦截器按一定的顺 序联结成一条链。在访问被拦截的...
2020-03-26 12:25:33
82
原创 SpringMVC:异常处理
SpringMVC中的异常系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息, 后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。 系统的 dao、service、controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端 控制器交由异常处理器进行异常处理,如下图:异常处...
2020-03-25 10:38:37
101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人