自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 将博客搬至CSDN

本人将CSDN博客搬家其他平台用于导出xml文件,并保持一同更新。

2019-11-05 22:32:58 157

原创 分布式事务处理机制

为什么有分布式事务由于业务数据量非常巨大,如淘宝电商系统,后端肯定是分库分表的。因为单个数据库数据量压上来,系统就会产生性能瓶颈。库存和订单分别在不同数据库中。交易系统、库存系统、订单系统。【微服务架构中,像淘宝光一个下单链路可能会涉及10多个系统以上】如果下订单失败库存系统必须回滚数据,保证数据强一致性。 分布式事务种类 数据库的2PC(两阶段提交)又叫做 XA Transactions...

2019-09-20 21:31:31 406

原创 Java线程池深入学习

线程池的实现原理接口: Executor是一个顶层接口,在它里面只声明了一个方法execute(Runnable),返回值为void,参数为Runnable类型,从字面意思可以理解,就是用来执行传进去的任务的; 然后ExecutorService接口继承了Executor接口,并声明了一些方法:submit、invokeAll、invokeAny以及shutDown等; 抽象类Abs...

2019-09-20 21:27:27 200

原创 Java设计模式

工厂模式(Spring的BeanFactory,ApplicationContext) 工厂模式中的三种:简单工厂模式、工厂方法模式、抽象工厂模式;实现了创建者和调用者的分离,调用者不需要知道具体的创建者是什么类,只需要知道工厂的接口以及自己想要的产品名称,就可以进行调用得到想要的产品; 简单工厂模式:简单工厂模式也称为静态工厂模式,工厂类一般采用静态方法,根据接收的参数不同来确定返回对象实...

2019-09-20 21:23:06 267

原创 maven与git相关知识

maven和git的差别 git 和svn 之类的类似是个 版本管理工具,maven 是项目构建打包发布的工具。 maven快照版本和发布版本 https://www.cnblogs.com/wuchanming/p/5484091.html maven上传和合并分支 一般指令: git status,git add (添加到暂存区),git commit -m "提交说明"...

2019-09-20 21:11:23 648

原创 Redis相关学习

reids的底层实现: 基础的数据类型:(分别的底层结构实现和具体的应用场景) string 结构:字符串 如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 39 (44)字节, 那么字符串对象将使用一个简单动态字符串(SDS)来保存这个字符串值, 并将对象的编码设置为 raw 。 SDS 与C字符串的区别 常数复杂度获取字符串长度:当取字...

2019-09-20 21:09:53 189

原创 Dubbo框架学习

PRC:远程过程调用,是一个计算机的通信协议,需要运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外的为整个交互过程编程。面向对象就是远程方法调用;例如http,tcp、socket都是RPC协议; dubbo特性 面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。 服务自动注册与发现:支持多种注册中心...

2019-09-20 21:06:17 214

原创 Java基础面试总结(三)

JAVA Collections框架 包含大量集合接口、接口实现方法和操作(例如排序、查找、反转、替换、复制、最大元素、最小元素等),主要提供了 List、Queue(队列)、Set(集合)、Stack(栈)、Map(映射表存放键值对) Set(集合):存入Set的每个元素都必须重新定义equals()方法来确保对象的唯一性。该接口有两个实现类:HashSet和TreeSet(实现了Sort...

2019-07-18 19:23:27 186

原创 Java基础面试总结(二)

异常处理 try()中有return语句,finally的优先于return执行。若try和catch和finally中都有return,finally中的return会覆盖别处的return,最终返回调用者的都是finally中的return值。 try()catch()finally()异常时抛出的一般为Error(错误)或者Exception(异常),他们拥有相同的父类Throwabl...

2019-07-17 20:31:54 206

原创 Java基础面试总结(一)

JDK 8 新特性 lambda表达式 lambda表达式允许你通过表达式来代替函数式接口,lambda表达式就和方法一样,它提供了一个正常的参数列表和一个方法体(body,可以是一个表达式或一个代码块)。Lamda表达式是由函数式接口所支持的,函数式接口是只有一个抽象方法的接口,是Lamda表达式的类型。一个lambda包括三部分: 一个括号内用逗号分隔的形式参数,参数是函数式接口里...

2019-07-16 20:55:38 221

原创 SQL数据库面试总结

数据库范式:对数据库规范化设计,减少数据冗余,增加数据一致性 第一范式:列不可分、无重复列,eg:【联系人】(姓名,性别,电话),电话还可以细分,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF; 第二范式:有主键,保证完全依赖。eg:订单明细表【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,Prod...

2019-07-12 18:13:23 271

原创 reids数据库面试总结

基础类型 Redis是典型的Key-Value类型数据库,单线程内存型,用于做缓存(redis的计数器生成分布式唯一主键,实现分布式锁,队列和会话缓存) Key为字符类型,Value的类型常用的为五种类型:String、Hash 、List 、 Set 、 Ordered Set Redis的优点与缺点 优点: 1读写性能优异 2支持数据持久化,支持AOF和RDB两种持...

2019-07-12 18:12:50 171

原创 计算机网路面试汇总

OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及及各层协议? 七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 四层或者五层:物理层、网络层(IP,ARP:反向地址解析协议)、传输层(TCP/UDP)、应用层(Http,https,ssl:加密套接字协议、smtp:邮件传输协议) 给定一个网址,访问这个网址经过了那些过程?涉及哪些协议? (1). 浏...

2019-07-10 10:51:36 323

原创 OS面试总结

内核态和用户态: CPU指令级分为 分为 0-3 级,具体为 ring0、ring1、ring2、ring3,最高级为ring0,最低级为ring3像windows系统linux系统只用到ring0和ring3 用户态和内核态, 当一个任务执行系统调用而陷入内核代码中执行时,此时处理器处于特权级最高的(ring0级)内核中执行, 我们称进程处于内核态。当进程执行用户自己的代码时,此...

2019-07-10 10:50:28 343

转载 MQ实现分布式事务

什么是分布式事务传统的事务是基于单数据库的本地事务,简单的来说,分布式事务就是实现跨数据库的事务支持CAP理论CAP理论表面在分布式系统中,最多只能满足C,A,P中的两个C:一致性 A:可用性 P:分区容错性:一个服务失效,可以有其他服务来代替他的工作既然最多只能选择两个,那选择哪两个比较合适呢?对于一个分布式系统来说,可用性和分区容错性是必须要满足的。对于可用性,如果一个系...

2019-07-05 10:33:10 1546 2

原创 Spring整合redis

将redis整合到项目查询中:(在service中)1、缓存的简单设计: 连接缓存 查询缓存 缓存中没有,查询sql sql查询到的数据存入redis redis的整合步奏 设计数据存储策略 数据对象名key设计:数据对象id:对象属性(user(表):wz(主键id):password) 加入一个redis的工厂单例bean, 写一个r...

2019-07-05 10:30:08 182

原创 Spring通用manpper的整合(省去单表的增删改查操作)

1、增加依赖:tk,mybatis 2、配置通用mapper,修改mapperscan,调用tk.mapper; 3、让原来mapper接口继承tk.mapper 4、配置通用mapper主键和主键返回策略 ...

2019-07-05 10:27:57 275

原创 JVM虚拟字节码执行

栈帧:jvm为每个新创建的线程都分配一个堆栈(在虚拟机栈中)。堆栈以帧为单位保存线程的状态。jvm对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从...

2019-07-05 10:26:59 221

原创 类加载

虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终可以形成被虚拟机直接使用的Java类,这就是虚拟机的类加载机制。类型( class文件:类或者接口,一串二进制字符流)的加载、连接和初始化过程都是在程序运行期间完成的。 类加载的时机 类的整个生命周期:加载、检验、准备、解析、初始化、使用、卸载。验证、准备、解析统称为连接。加载、验证、准备、初始化和卸载这5...

2019-07-05 10:25:47 185

原创 org.apache.ibatis.binding.BindingException【原因汇总】(dao层方法XML)

报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 解释:就是说,你的Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql; 这里的Spring注入后的意思是,你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的...

2019-07-04 00:46:23 600

原创 @AutoWried依赖注入失败

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。 1、共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。 2、不同点 (1)@Autowired:@Autowire...

2019-07-04 00:46:10 1331

原创 SpringBoot.xml的问题

Springboot进行springweb开发-----springMVC零配置 没有xml:springMVC——web开发:tomcat启动---------调用ContexLoaderListener(会借助applicationContext.xml)去初始化spring IOC环境------注册了一个DispathcherServlet,让容器启动的时候调用Servlet的int...

2019-07-04 00:45:52 317

原创 @PathVariable 和 @RequestParam

一、代码实例 首先,上两个地址: 地址1:http://localhost:8989/SSSP/emps?pageNo=2 地址2:http://localhost:8989/SSSP/emp/7 如果想获取地址1中的 pageNo的值 ‘2’ ,则使用 @RequestParam , 如果想获取地址2中的 emp/7 中的 ‘7 ’ 则使用@PathVariable ...

2019-07-04 00:45:38 155

原创 Mybatis和Spring主流框架结合

Mybatis: 整合过程: 在application.properties中填写datasource: 在mybatis—config.xml中填写具体设置信息: dao层写接口和sql语句,加入@Mapper @Mapper只要是为mapper或者dao产生了一个代理对象,代理对象实现了dao,从而实现里代理接口方法,主要就是查询数...

2019-07-04 00:45:14 240

原创 Spring boot bean的生命周期和作用域

spring通过我们的配置,如@ComponentScan定义的扫描路径去找到带有@Component的类,这个过程就是一个资源定位的过程。 一旦找到资源,那么它就开始解析,并将定义的信息保存起来,注意,此时还没有初始化bean,也就没有bean的实例,它有的仅仅是bean的定义。 然后就会把bean定义发布到Spring IoC容器中。此时,IoC容器也只有bean的定义,还是没有bean的...

2019-07-04 00:45:01 674

原创 java基础——Map

HashMap 初始容量 和 负载因子,这两个参数是影响HashMap性能的重要参数。其中,容量表示哈希表中桶的数量 (table 数组的大小),初始容量是创建哈希表时桶的数量;负载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度,它衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。若负载因子越大,那么对空间的利用更充分,但查找效率的也就越低;若负载因子越...

2019-07-04 00:44:48 304

原创 java基础:基础类型和多态

java的8种基本数据类型:short char int double float long boolean byte byte boolean 1字节(b) short char 2字节 int double 4字节 long double 8字节 1b=8bit 自动拆箱和自动装箱:基本数据类型和包装类型之间的相互调用;基本数据类型不具备面向对象的特性 在装箱时 In...

2019-07-04 00:44:37 5388 1

原创 NIO与IO

IO: 同步阻塞 IO(BIO,1.4之前使用):在此种方式下,用户进程在发起一个 IO 操作以后,必须等待 IO 操作的完成,只有当真正完成了 IO 操作以后,用户进程才能运行。JAVA 传统的 IO 模型属于此种方式!进程运行到IO操作,需要等待IO完成,才能继续运行;一个连接一个线程 同步非阻塞 IO(NIO):在此种方式下,用户进程发起一个 IO 操作以后边可返回做其它事情,但是用户...

2019-07-04 00:44:17 236

原创 深克隆和浅克隆

浅克隆:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。(如果对克隆出来的对象进行属性修改,那么原对象的属性也会发生相应的改变) 深克隆:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换...

2019-07-04 00:43:56 163

原创 Java内存区域

1、运行时数据区:java虚拟机在执行JAVA程序过程中会将他管理的内存区域进行划分程不同的数据区域: 程序计数器:当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的命令。在多线程时,每个线程都有独立的程序计数器,各条线程的计数器互不影响,独立存储。 Java虚拟机栈:线程私有,生命周期和线程相同。是java方法执行的内存模型:...

2019-07-03 12:08:48 139

原创 垃圾收集器(GC)与内存分配策略

判定对象存活(可达性分析算法):这个算法的基本思路就是通过一系列名为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,下图对象object5, object6, object7虽然有互相判断,但它们到GC Roots是不可达的,所以它们将会判定为是可回收对...

2019-07-03 12:08:33 221

原创 JVM类加载器

类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器) 启动(Bootstrap)类加载器启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的...

2019-07-03 12:08:10 205

原创 对象的创建:类的初始化与实例化

一、Java对象创建时机:一个对象在可以被使用之前必须要被正确地实例化。 1). 使用new关键字创建对象 2). 使用Class类的newInstance方法(反射机制) 3). 使用Constructor类的newInstance方法(反射机制):使用newInstance方法的这两种方式创建对象使用的就是Java的反射机制,事实上Class的newInstance方法内部调用的也是...

2019-07-03 12:07:58 589

原创 Sql数据库原理(B+树)及相关问题

1、数据库范式:对数据库规范化设计,减少数据冗余,增加数据一致性 第一范式:列不可分、无重复列,eg:【联系人】(姓名,性别,电话),电话还可以细分,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF; 第二范式:有主键,保证完全依赖。eg:订单明细表【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,Pr...

2019-07-03 12:07:39 1780

原创 操作系统相关知识

1、进程和线程以及它们的区别 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发; 线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的 实时性,实现进程内部的并发; 一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在; 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存 2、进程间的通信的几种方式 管...

2019-07-03 12:07:18 207

原创 Redis-基本数据类型与内部存储结构(相关应用问题)

1-概览 Redis是典型的Key-Value类型数据库,单线程内存型,用于做缓存(redis的计数器生成分布式唯一主键,实现分布式锁,队列和会话缓存) Key为字符类型,Value的类型常用的为五种类型:String、Hash 、List 、 Set 、 Ordered Set 2-持久化 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是调用系统...

2019-07-03 12:07:04 263

原创 Java并发编程面试

synchronized(非公平锁)-重量级锁------偏向锁,轻量级锁、自旋锁 1) synchronized方法:在一个对象的方法前加synchronized,使其具有锁,一个线程对其进行调用,只有此线程完成调用后,其他线程才能进行操作。 1)当一个线程正在访问一个对象的 synchronized 方法,那么其他线程不能访问该对象的其他 synchronized 方法。这个原因很...

2019-07-03 12:06:45 101

原创 并发编程——线程池

并发:当有多个线程进行操作时,假设只有一个cpu,他不能运行同时运行多个线程,只能将cpu运行时间分成若干段,然后将每段时间分配给线程,当一个线程占用cpu时间的时候,其他线程处于挂机状态。 并行:在某一个时间点内,有多个进程同时进行 线程池: future接口: get获取计算结果 可取消任务(任务完成后无法取消) FutureTask实现类:适配器模式 Future...

2019-07-03 12:06:31 221

原创 Java 并发:线程间通信与协作

一. wait/notify (synchronized)机制:线程间通过共享数据来实现通信,即多个线程主动地读取一个共享数据,通过同步互斥访问机制保证线程的安全性。等待/通知机制主要由Object类中的以下三个方法保证,这三个方法必须在同步代码中执行, 并且使用同步锁对象来调用 1、wait()、notify() 和 notifyAll():上述三个方法均非Thread类中所声明的...

2019-07-03 12:06:13 119

原创 Java 并发:内置锁 Synchronized

一. 线程安全问题 在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个 共享、可变资源 的情况,这种资源可以是:一个变量、一个对象、一个文件等。特别注意以下两点,所以,当多个线程同时访问这种资源的时候,就会存在一个问题:由于每个线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问。 共享: 意味着该资源可以由多个线程同时访问; 可变: 意...

2019-07-02 12:46:25 113

空空如也

空空如也

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

TA关注的人

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