自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务

分布式事务分布式事务就是一个大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。CAP定理分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容忍性(P:Partition Tolerance),最...

2019-09-16 16:47:09 208

原创 小白快速学MySQL

/使用MySQL/SHOW DATABASES; /返回可用数据库的列表/USE sell;/使用sell这个数据库/SHOW TABLES; /返回当前数据库中可用的列表/SHOW COLUMNS FROM order_detail;/返回order_detail表中字段的信息/DESCRIBE order_detail;/作用同上//检索数据/SELECT detail_id F...

2019-08-25 08:37:34 212

原创 消息队列总览

1.为什么要用消息队列解耦、异步、削峰A系统调用B系统、C系统,传统的调用是直接调用,但是当B系统说我不需要你提供数据了,这时候A需要改代码,C系统说我不需要某个字段了,这时候A也要改代码,如果又多了一个D系统,A又要写代码。为了实现解耦,引入消息队列,A将产生的数据丢到消息队列中,哪个系统需要 哪个系统就去取;A系统调用B系统,B系统由于某个需要调用第三方接口超时,导致A系统响应速度慢,...

2019-08-13 14:30:04 214

原创 Spring IOC、AOP以及Spring-Bean循环依赖解决

文章目录Spring IOC原理IOC原理:依赖注入(DI)的三种方式Spring-Bean循环依赖以及解决方式什么是循环依赖Spring怎么解决循环依赖原理Spring单例对象初始化过程三级缓存Spring为什么不使用两级缓存AOP使用AOP的目的AOP使用场景AOP原理Spring AOP实现主要参考文章Spring IOC原理IOC原理:IOC,即控制反转(Inversion of C...

2019-08-08 17:33:51 1064

原创 进程与线程的区别及其通信方式

进程与线程的区别及其通信方式进程与线程的区别进程是资源分配的基本单位,是执行中程序的实例线程是操作系统调度的基本单位,一个进程可以有多个线程。线程基本不拥有系统资源,但可以访问隶属进程的资源。线程切换时只需保存和设置少量寄存器内容,开销很小。而进程切换时则开销很大,涉及到当前执行进程CPU环境的保存及新调度进程CPU环境的设置。一个程序至少有一个进程,而一个进程中至少有一...

2019-08-05 14:46:44 181

原创 Go语言基础

package mainimport ( "fmt")func main(){ /*变量申明赋值*/ //第一种赋值方式 var name string name="panda" //第二种赋值方式 var name2 = "mike" //第三种赋值方式 name3:="jack" fmt.Println("hello,world!"+name+name2+name3...

2019-07-30 17:46:54 131

转载 大数相乘

大数乘法[JAVA实现]-经典笔试题package com.company;import java.util.Scanner;/** * 大数相乘 * @author Ant * */public class BigNumMutil { /** * 大数相乘基本思想,输入字符串,转成char数组,转成int数组。采用分治思想,每一位的相乘;<br&gt...

2019-05-08 15:36:54 156

原创 使用rand6实现rand10

给定rand6()函数实现private static int rand6(){ return (int)(Math.random()*6)+1;}rand6()可以得到1,2,3,4,5,6rand6()-1可以得到0,1,2,3,4,5(rand6()-1)*6可以得到0,6,12,18,24,30result=(rand6()-1)*6+rand6()-1可以得...

2019-04-24 17:24:14 3345

原创 面试中如何回答JVM垃圾回收机制

JVM中的垃圾回收了解吗首先是如何标记存活对象,主要有两个算法,分别是引用计数法和可达性分析算法。引用计数法:给一个对象添加一个引用计数器,当一个地方引用它时,计算器+1,不引用的时候-1,当引用计数器为0时说明该对象可回收。但是一旦出现互相引用的情况,就会出现无法回收的现象。所以JVM采用的是可达性分析算法。可达性分析算法:首先会标记所有GC root能够直接关联的对象。GC ro...

2019-04-17 09:36:48 3060

原创 面试中如何回答Java中的锁机制

Java中锁机制Java中多线程加锁机制主要有两种,一种是JDK实现的lock,另外一种是JVM底层实现的Synchronized关键字。Synchronized是JVM底层实现的,JVM原生支持synchronized,而reentrantlock是JDK实现的,并不是所有jdk版本都支持reentrantlock,而且使用synchronized无需显式地释放锁,JVM自己会保证锁的释放。...

2019-04-12 17:08:36 689 1

原创 web项目面试问题

项目如何保证安全性1.弱口令漏洞解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或者多种加密方式叠加组合。2.未使用用户名及密码登录后台可直接输入后台URL登录系统。解决方案:spring aop实现登录权限拦截3.sql注入问题使用mybatis编写sql语...

2019-04-09 19:49:56 904

原创 Spring高频面试题

Spring Boot的优势和Spring的区别Spring Boot优势:快速开发,提高了生产力,适合构建微服务系统避免编写大量的样板代码、注释和xml配置springBoot集成了很多成熟的组件,如mybatis、redis和mongdb等Spring Boot劣势:集成度太高,使用过程不容易了解底层,一旦出现bug很难发现问题根源。已存在的spring项目难以转化为sp...

2019-04-09 14:33:02 289

原创 MySQL面试问题

索引是什么?有什么作用以及缺点定义:索引是存储引擎用于快速查找数据的一种数据结构。MySQL数据库基本的索引类型:普通索引、唯一索引、主键索引和全文索引。普通索引:允许被索引的数据列包含重复的列唯一索引:不允许被索引的数据包含重复的列主键索引:在一张表中只能定义一个主键索引,主键索引用于唯一标识一条记录(主键索引必然属于唯一索引),使用关键字PRIMARY KEY创建索引的目的是什么...

2019-03-25 16:04:58 12827 4

原创 HashMap相关面试问题

HashMap原理hashMap内部包含了一个Entry类型的数组tabletransient Entry[] table;table数组中每个索引位置(可以将每个索引位置看成是一个桶bucket)存储着一条链表或者一棵红黑树。hashMap通过哈希算法计算出key对应的索引位置,不同的key计算出来的索引位置有可能出现冲突,拉链法和线性探测法可以解决位置冲突问题,hashMap采用的是拉链...

2019-03-07 09:58:23 503

原创 SpringBoot+MyBatis项目架构

2019-03-04 12:19:44 2202

原创 Redis面试相关

缓存中间件-Memcache和Redis的区别Memcache:代码层次类似Hash支持简单数据类型不支持数据持久化存储不支持主从(主从服务器复制)不支持分片Redis:数据类型丰富支持数据磁盘持久化存储支持主从支持分片Redis数据类型string:最基本的数据类型,二进制安全hash:String元素组成的字典,适合用于存储对象list:列表,按照Stri...

2019-03-03 11:16:15 171

原创 面试中如何回答分布式锁的实现

实现分布式锁的方法主要有四种:数据库唯一索引Redis的SETNX指令Redis实现的RedLock算法ZooKeeper的临时有序节点第一种是通过数据库唯一索引,通过往数据库中插入唯一索引表示获取到锁,删除该唯一索引表示释放该锁。唯一索引可以保证当前数据库中该索引是唯一的。那么就可以使用这个唯一索引来判断数据是否处于锁定状态。但是数据库唯一索引没法设置过期时间,一旦解锁失败其它进程...

2019-03-03 10:06:59 660

原创 Java并发编程常见面试题夺命追问

1. 守护线程(Daemon)与用户线程(User)的区别守护线程时程序运行时在后台提供服务的线程,当所有非守护线程结束后,也即程序终止时,所有守护线程都将一起被杀死。main()是用户线程,JVM的垃圾回收线程就是一个守护线程通过Thread类中的setDaemon(boolean on)方法,true则把该线程设置为守护线程,反之为用户线程。Thread.setDaemon()必须在T...

2019-02-24 20:54:25 267

原创 Java 并发编程(四)JVM中锁的优化

偏向锁、轻量级锁、重量级锁三者各自的应用场景偏向锁:只有一个线程进入临界区轻量级锁:多个线程交替进入临界区重量级锁:多个线程同时进入临界区偏向锁、轻量级锁都是JVM引入的锁优化手段,目的是降低线程同步的开销。比如以下的同步代码块:synchronized (lockObject) { // do something}上述同步代码块中存在一个临界区,假设当前存在Thread#1...

2019-02-22 16:06:55 246 1

原创 图论算法(三)最短路径

最短路径

2019-02-18 11:06:32 1363

原创 图论算法(二)最小生成树

图论算法之最小生成树最小生成树定义原理Prim算法延时实现Prim算法jishi实现Kruskalsuanfa

2019-02-17 11:33:44 521

原创 图论算法(一)深度优先搜索与广度优先搜索

图论算法之深度优先搜索与广度优先搜索图论基础知识图是由一组顶点和一组能够将两个顶点相连的边组成的(可以无边,但是至少包含一个顶点):一组顶点: 通常用V(vertex)表示顶点集合一组边: 通常用E(edge)表示边集合图可以分为有向图和无向图:无向图: 在有向图中的边仅仅是两个顶点之间的连接有向图: 在无向图中的边是有方向的,指的是箭头尾端的顶点指向箭头顶端的顶点, 无...

2019-01-19 19:47:11 2804

原创 散列表原理及实现

散列表原理及实现散列表原理散列表:使用算术操作将键转化为数组的索引来访问数组中的键值对, 使用散列表,可以实现常数级别的查找和插入.使用散列的查找算法主要要解决的两个问题:散列函数的设计(即如何用散列函数将被查找的键转化为数组的一个索引).处理碰撞冲突的过程(即处理两个或多个键的散列值相同的情况).PS:处理碰撞冲突的方法主要有拉链法和线性探测法.散列函数的设计实现散...

2019-01-12 15:53:23 594

原创 浅析树结构(三)红黑树

浅析树结构之红黑树首先先来了解一下红黑树的五个性质每个结点非红即黑。根结点是黑的。每个叶结点(这里叶节点指的是NULL结点)都是黑的。如果一个结点是红的,那么它的两个儿子都是黑的。对于任意结点而言,其到树末端即NULL节点的每条路径都包含相同数目的黑结点。等等等,一脸懵逼吧?? 那还是先来了解一下2-3树吧2-3查找树2-3树是一种树型数据结构,内部节点(存在子节点的节点)...

2019-01-10 17:16:29 246

原创 浅析树结构(二)AVL平衡二叉树(AVL树原理及代码实现)

平衡二叉树平衡二叉树定义平衡二叉树有两种形式:是一棵空树是一个左右两个子树的高度差的绝对值不超过1,并且左右子树都是平衡二叉树的树平衡二叉树的常用实现方法有AVL树,红黑树,替罪羊树,Treap,伸展树等.在这里我们先谈AVL树,红黑树会在之后的文章再提出.AVL树AVL是最先发明的自平衡二叉查找树算法。在AVL中任何节点的两个儿子子树的高度最大差别为1,所以它也被称为...

2019-01-08 21:37:23 385

原创 浅析树结构(一)二叉查找树(BST树代码实现)

二叉查找树二叉查找树定义定义:一颗二叉查找树(BST)是一棵二叉树,其中每个结点都含有一个Comparable的键(以及相关联的值)且每个结点的键都大于其左子树中的任意结点的键而小于右子树的任意结点的键. 二叉查找树中搜索,插入,删除的复杂度等于树高,即O(log(n))二叉查找树代码实现基本方法实现import java.util.ArrayList;import java.u...

2019-01-08 15:46:06 220

原创 三张图详解从输入URL网址到网页呈现中间发生了什么

2018-12-24 16:38:31 526

原创 小白学TCP/IP(八)路由选择篇

路由选择路由器的结构路由器从功能上可以划分为:路由选择和分组转发。分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。路由器分组转发流程从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;若路由表中...

2018-12-24 14:08:05 713 1

原创 小白学TCP/IP(三)数据链路层篇

数据链路层数据链路层位于物理层与网络层之间,其设计的初衷就是顺利为网络层提供数据服务,不考虑可靠性,可靠性的部分由传输层的TCP协议实现.数据链路层在网络传递中的地位假设在通信的过程中需要通过路由器的话,那么数据的具体流动过程就像下面图中箭头的示意:其中路由器负责路由转发,需要知道目标主机IP地址,因此需要最高到网络层进行IP协议的分析;我们也可以在逻辑上将整个通信过程看成是两端...

2018-12-23 15:46:56 263

原创 小白学TCP/IP(六)TCP与UDP篇

TCP与UDP篇TCP提供可靠的通信传输,而UDP则常被用于广播和细节控制交给应用的通信传输传输层传输层的作用:网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。以快递包裹为例,运输包裹的快递单上写了发货的地址(源IP地...

2018-12-22 16:48:54 181

原创 小白学TCP/IP(五)IP协议相关技术

IP协议相关技术IP旨在让最终目标主机收到数据包,但是这一过程仅仅依靠IP是无法实现的,必须要有实现解析主机名称和MAC地址的功能,以及数据包在发送过程中异常情况处理的功能,此外还会涉及IP必不可少的其他功能.DNS(Domain Name System)DNS系统与IP协议的关系:DNS系统中维护一个用来表示组织内部主机名(域名)和IP地址之间对应关系的数据库.DNS工作原理:...

2018-12-20 15:43:38 179

原创 小白学TCP/IP(四)IP协议篇

TCP/IP知识点网络层与数据链路层之间的关系网络层负责端到端之间(消息发送端与消息接收段)的通信,但至于中间消息是怎样被转发的,得通过数据链路层实现,也就是说数据链路层负责每个数据链路从源MAC地址到目标MAC地址之间的数据传输,而网络层则是规定了数据最开始的发送端和最终的接收端.把这个过程比喻成快递运输,假如我在北京要发送一个快递到武汉市华中科技大学机械大楼,IP层完成的任务就是在快递单...

2018-12-19 14:23:47 476

原创 SprintBoot整合MyBatis简易教程

MyBatis简易教程MyBatis导入及配置使用Maven管理&amp;amp;amp;amp;lt;!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;dependency&amp;amp;amp;amp;gt; &am

2018-12-11 09:50:10 359

原创 日志框架使用

日志框架日志框架的能力定制输出目标(输出到哪里)定制输出格式(输出的信息的呈现格式)携带上下文信息(包括时间戳,类路径,线程等)运行时选择性输出灵活配置(不需要写代码实现)优异的性能常见的日志框架SpringBoot采用的是以下的日志框架结合日志门面日志实现SLF4jLogBack日志输出等级(以SLF4J为例)package org.slf4...

2018-11-29 20:58:21 112

原创 Java 并发编程(五)原子操作类

Java 并发编程之原子操作类Java从JDK1.5开始提供了Java.u体力.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全地更新一个变量的方式.接下来以AtomicInteger类为例进行分析.Atomic包中的类基本都是使用Unsafe类来实现的,所以我们首先先来了解一下Unsafe类.Unsafe部分源码分析public fina...

2018-11-28 15:19:05 145

原创 Java 并发编程(一)Volatile原理剖析及使用

Java 并发编程之Volatile原理剖析及使用在开始介绍Volatile之前,回顾一下在并发中极其重要的三个概念:原子性,可见行和有序性原子性: 是指一个操作不可以被中断.比如赋值操作a=1和返回操作return a,这样的操作在JVM中只需要一步就可以完成,因此具有原子性,而想自增操作a++这样的操作就不具备原子性,a++在JVM中要一般经历三个步骤:从内存中取出a.计算a+1....

2018-11-28 12:28:50 161

原创 Java 并发编程(三)Synchronized底层优化(偏向锁与轻量级锁)

Synchronized低效的原因在Java SE 1.6发布前,使用Synchronized关键字实现同步功能是比较低效的,很多人称其为重量级锁.究其原理,是因为Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的,而监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。操作系统实现线程之间的切换需要从用户态转换到核心态,这个成本非常高,状态之间的转...

2018-11-27 21:12:27 200

原创 Java 并发编程(二)Synchronized原理剖析及使用

Java 并发编程之Synchronized原理剖析及使用在开始介绍Synchronize之前,先了解一下在并发中极其重要的三个概念:原子性,可见行和有序性原子性: 是指一个操作不可以被中断.比如赋值操作a=1和返回操作return a,这样的操作在JVM中只需要一步就可以完成,因此具有原子性,而想自增操作a++这样的操作就不具备原子性,a++在JVM中要一般经历三个步骤:从内存中取出a...

2018-11-27 17:43:27 265

原创 LRU缓存(java实现)

import java.util.HashMap;import java.util.Iterator;public class LRU&lt;K,V&gt; implements Iterable { private Node head; private Node tail; private HashMap&lt;K,Node&gt; map; priva...

2018-10-23 09:54:21 482

原创 经典排序算法原理、代码实现和稳定性分析

选择排序:首先找到数组中最小的那个元素,将它与数组的第一个位置交换位置,然后找出剩下的元素中最小的元素,将它与数组中的第二个元素交换位置,如此往复,直到整个数组排序。...

2018-05-17 10:33:37 187

空空如也

空空如也

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

TA关注的人

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