自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我的代码路程

一路向北

  • 博客(61)
  • 资源 (6)
  • 收藏
  • 关注

原创 SpringMvc架构流程

最近学完了mybtis,然后开始学习springMvc和mybatis的整合,所以先熟悉一下SpringMvc架构流程。这是SpringMvc架构的流程图 (图片来自于网络,DispatcherServlet那里翻译成中央处理器和前端处理器都可以,我们这里使用的前端处理器) 可以总结说有一个中心和三个大件: 前端控制器是流程控制的中心;三个大组件分别是处理器映射器、处理器适配器和视图...

2018-06-24 18:26:04 10115

原创 mybatis

mybatis总的来说,mybatis是一个持久层框架, 作用是跟数据库交互完成增删改查。 如果以前学过Hibernate,其实它跟hibernate很相似,作用和类型都是一样的,只是实现的方法有所不同。这是mybatis的工作流程图 1. mybatis配置 mybatis有一个全局配置文件,叫SqlMapConfig.xml,它配置了mybatis的运行环境等信息。 map...

2018-06-24 17:17:30 15691 5

原创 前缀树结构和Java代码实现

以前在项目中使用过前缀对敏感词进行过滤,现在就详细说一下他的结构和如何实现吧。结构的3个基本性质:1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符。2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3. 每个节点的所有子节点包含的字符都不相同。前缀的好处:前缀树可以最大限度地减少无谓的字符串比较,查询效率非常高。前缀树的核心思想是利用空间换时间,利...

2019-03-30 17:00:42 634

原创 快速排序的核心思想和Java实现

算法步骤1、从数列中挑出一个元素,称为 “基准”(pivot);2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;在每次的迭代(iteration)中,它...

2019-03-30 16:54:08 808

原创 什么是缓存穿透,如何解决

场景:对于系统A,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。黑客发出的那 4000 个攻击,缓存中查不到,每次你去数据库里查,也查不到。举个例子数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都会直接越过缓存,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。大概就是这个样子:...

2019-03-30 16:30:01 3859 1

原创 红黑树的结构和优势

首先看一下红黑树的结构:红黑树的结构特点:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。为什么要要用红黑树?1、首先红黑树是不符合AVL树的平衡条...

2019-03-30 16:24:49 4198

原创 "==",equals 和 hashCode有什么区别?

"=="用来比较两个变量是否相等。如果比较的是两个基础类型变量,则比较的是两个变量的值是否相等;如果比较的是两个是两个对象,则比较的是两个对象的地址是否相同;equals是Object类的方法。在没有重写equals方法的情况下,equals与"=="的效果一样可以重写equals方法,使得比较的是两个对象的内容是否相同。比如典型的String类就重写了equals方法,如果使用equa...

2019-03-27 19:15:06 346

原创 大根堆和小根堆

大根堆和小根堆在排序和选择第K大的数中经常有用到。在Java中是可以直接实现这两个中结构的,使用的优先队列public class TIMU1 { //小根堆 public PriorityQueue<Integer> minHead = new PriorityQueue<>(new Comparator<Integer>() { ...

2019-03-27 19:13:17 2077

原创 IO的模型

1、阻塞IO模型最基础的IO模型,在读写数据过程中会发生阻塞现象。在等待IO完成的过程中,用户线程会处于阻塞状态,让出CPU使用权。IO完成以后,用户线程解除阻塞。2、非阻塞IO模型用户线程发起一个read操作,不需要等待,而是马上得到了一个结果,如果结果是error时,它就知道数据还没准备好,于是再次发送read操作。在读写数据过程中不会发生阻塞现象。在等待IO完成的过程中,用户线...

2019-03-27 19:10:12 207

原创 如何使用UDP建立可靠连接

1、将数据包进行编号,按包的顺序接收并存储2、接收端收到数据包后,发送确认信息给发送端,发送端接收确认数据以后,再继续发送下一个包,如果接收到的数据编号不是期望的编号,则要求发送端重新发送...

2019-03-06 17:06:33 2364 1

原创 TCP是如何确保可靠传输的

2019-03-06 17:05:56 294

原创 Cookie和Session有什么区别?(重要)

cookie是由Web服务器保存在用户浏览器上的小文件,包含有关用户的信息。session是用来在客户端与服务器端之间保持状态的解决方案和存储结构1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当...

2019-03-06 17:05:19 2823

原创 HTTP中的get和post的区别

(1)&nbsp;&nbsp;&nbsp; get重点是从服务器上获取资源,post重点是向服务器发送数据(2)&nbsp;&nbsp;&nbsp; get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用“?”连接,多少请求数据间用“&amp;”连接,这个过程用户是可见的。Post传输数据通过HTTP的post机制,将字段与对应值封存在请求实体中发送给服务器...

2019-03-06 17:04:23 207

原创 Spring中bean的设计模式和线程安全

Bean的模式(设计模式)Spring中Bean的模式有两种,默认的是单例模式,另一种是原型模式。单例模式的Bean,如何解决线程安全问题?出现线程安全问题的情况: 当Bean对象对应的类存在可变的成员变量并且其中存在改变这个变量的线程时,多线程操作该Bean对象时会出现线程安全。解决方案: Spring使用ThreadLocal解决单例模式Bean的线程安全问题。ThreadLocal采...

2019-01-30 10:59:22 462

原创 Spring中bean的作用域

Bean的作用域singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。prototype:原型模式,每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态。request:在一次Http请求中,容器会返回该Bean的同一实例。而对不...

2019-01-30 10:57:33 211

原创 Spring中bean的生命周期

Bean的生命周期Spring对Bean进行实例化Spring设置Bean相关的属性中,即依赖注入容器通过Aware接口把容器信息注入BeanBeanPostProcessor(前置和后置处理)。进行进一步的构造,会在InitialzationBean前后执行对应方法,当前正在初始化的bean对象会被传递进来,我们就可以对这个bean作任何处理InitializingBean (初始化...

2019-01-30 10:55:42 267

原创 消息队列中推和拉模式

消息队列比较核心的应用场合有三个:解耦、异步和削峰在消息队列中一种常用的消息推送类型是推拉模式下面是推拉模式的对比:具体的比较1.Push模式推模式是服务器端根据用户需要,由目的、按时将用户感兴趣的信息主动发送到用户的客户端Push模式的主要优点是(1)对用户要求低,方便用户获取需要的信息(2)及时性好,服务器端即使地向客户端推送更行的动态信息Push模式的缺点不能...

2019-01-04 15:16:20 7167

原创 排序算法的比较

这里是我在网上找到两个截图(侵删)

2018-12-29 15:07:00 175

原创 字节跳动2018年校招后端方向

第四题这是我认为比较满意的修改了 private static int BinarySearchMax(int[] arr, int target){ int left = 0; int right = arr.length - 1; //第一处修改 int index = -1; while(right &gt;= l...

2018-12-28 10:57:19 1345

原创 MySQL的内连接、左连接与右连接

MySQL经常需要分解数据,存储在多个表中,这样可以更加方便的管理和获得更大的可伸缩性。所以在查询数据的时候,可能需要在多个表中进行查询,俗称连接查询。常用的连接查询有内连接,左连接和右连接1.内连接语句类似于:select * from a_table a inner join b_table b on a.a_id = b.b_id;解释:返回两个表的交集部分。2.左连...

2018-12-07 10:13:53 251

原创 数字在排序数组中出现的次数

剑指offer中的题目题目描述统计一个数字在排序数组中出现的次数。看到有序数组,可能很多人都直接想到了要使用二分查找的方法,实际上确实是使用二分查找,但是需要稍微的修改一下,中间索引对应的元素等于目标元素的情况。(这里将二分数组中间索引对应的元素值,简称为中间值)一般二分法,如果中间值大于目标值,则目标值在数组的右半部分;如果中间值小于目标值,则目标值在数组的左半部分;如果中间值等于目...

2018-12-06 16:41:30 649

原创 排序算法在数组题目中的应用

在做题目中可能会发现一些类型的题目具有一定的解题倾向性。在数组题目中,跟数组中大小顺序有关,往往可以使用排序算法,并在排序的过程中,做相应的处理。这种思路在二叉树题目尤其突出,二叉树的题目很多情况下都是需要遍历二叉树。根据题目还需要选择相应的排序算法或者二叉树遍历类型。在剑指offer中有一道关于数组中逆序对的题目,这道题就很好的体现了排序算法在数组中的应用。题目描述在数组中的两个数字,如...

2018-12-06 16:31:04 253

原创 阿里云服务器搭建java环境详细步骤5

前面的文章已经分析如何将项目部署到自己的服务器上,这里我们对服务器上的项目可能遇到的问题进行解决.1.图片资源访问不到的问题图片资源不同于css, js等静态资源,可以直接放置在项目中,图片资源需要独立于项目以外,这就导致了在储存图片资源的时候,只是存储图片的相对路径,而不是绝对路径.因为如果储存的是绝对路径,一旦项目要从本地上传到服务器上,那么就需要重新修改数据库中的图片地址信息或者...

2018-12-06 16:17:15 440

原创 如何比较两个数组是否相等(Java)

在代码过程中, 可能有coder跟我一样遇到,需要比较两个数组是否相等?下面展示常用的两种方法:1.遍历数组一般可能大家会使用for循环对两个数组进行遍历, 在遍历过程中, 比较两个两个数组的每一位是否相等, 如果出现不相等, 则返回false. 类似于以下代码:public boolean isEqual(int[] array1, int [] array2){ for...

2018-11-27 17:17:05 25079 2

原创 二叉树的遍历(递归与非递归版本)

最近在写关于二叉树方面的题目的时候,总是会用到二叉树的各种遍历,所以在这里将自己写的各种遍历,都记录下来.递归部分:首先二叉树的递归代码是比较简单的,而且前序,中序和后序遍历代码几乎一样, 只是打印节点值的输出语句的位置不一样.可以递归部分,对于二叉树中节点的遍历顺序是一样的, 都是先遍历当前节点,然后遍历当前节点的左子树,然后是右子树, 然后在遍历节点的过程, 选择输出的节点值的时机.非...

2018-11-24 15:39:04 186

原创 github上传代码失败的两个常见异常

马克一下,等下提醒自己回来写.

2018-11-08 17:03:06 597 1

原创 阿里云服务器搭建java环境详细步骤4

前面其实已经完成了服务器java环境方面的搭建,这里算是附送的步骤吧如何将工程打包,并部署到服务器上1.将工程打包成war包本人这里使用的idea,所以参考idea的方式来打包.首先来到idea的程序结构部分,可以点击File,然后点击Project Structure然后点击Artifacts,看看是否类似于这样的需要的是左上角的两个红色的小包包如果Mainfest File最下...

2018-11-05 20:13:03 912

原创 阿里云服务器搭建java环境详细步骤3

上面两步主要是准备工作,现在开始进行在服务器上的软件安装1.安装JDK在自己放置的软件的位置执行以下命令//添加所执行的操作的权限chmod +x jdk-8u191-linux-x64.rpm//安装软件包rpm -ivh jdk-8u191-linux-x64.rpm//等待安装完成,查看java版本,看看是否安装成功,java-version出现这个界面就表示安装JDK成...

2018-11-05 19:49:55 344

原创 阿里云服务器搭建java环境详细步骤2

上一个文章已经写了购买方面的准备的工作,下面开始说准备的软件部分.二.准备需要的软件1.SecureCRT来连接阿里云服务器使用阿里云服务器的时候,发现它的网页管理终端,经常很快进入息屏状态,恢复又输入远程连接密码,感觉十分麻烦,于是到 网上搜索远程连接的软件,主要有两个,一个是Xshell,一个就是SecureCRT.我参考了很多博客,使用SecureCRT的比较多,于是我就想选择了Xs...

2018-11-05 17:13:08 450

原创 阿里云服务器搭建java环境详细步骤1

在做项目的时候,可能会经常遇到需要使用云服务器的时候,这里介绍的阿里云的服务器的java环境搭建,主要的搭建的软件有jdk,mysql和tomcat,这些都是web项目必须的软件吧.一.购买服务器相关的东西1.购买阿里云服务器阿里云服务器有个羊毛,就是学生9.9一个月优惠活动,因为本人也是学生,完成学生认证即可享受这个活动,(即使不是学生,也可以找是学生的亲朋好友的学生证暂用也行).进去注...

2018-11-05 16:37:26 943 2

原创 什么是CAS

CAS,全称为Compare and Set,即比较-设置。假设有三个操作数: 内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不做并返回false 。当然CAS一定要volatile变量配合,这样才能保证每次拿到的变量是主内存中最新的那个值,否则旧的预期值A对某条线程来说,永远是一个不会变的值A,只要某次CAS操作失败,永远都...

2018-10-01 17:12:49 316

原创 多线程中总内存和线程的工作内存

Java内存模型将内存分为了 主内存和工作内存 。类的状态,也就是类之间共享的变量,是存储在主内存中的,每个线程都有一个自己的工作内存(相当于CPU高级缓冲区,这么做的目的还是在于进一步缩小存储系统与CPU之间速度的差异,提高性能),每次Java线程用到这些主内存中的变量的时候,会读一次主内存中的变量,并让这些内存在自己的工作内存中有一份拷贝,运行自己线程代码的时候,用到这些变量,操作的都是自己...

2018-10-01 17:11:42 4451 1

原创 什么是乐观锁和悲观锁

1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将 比较-设置 这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。​ 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别...

2018-10-01 17:07:07 8903

原创 Java并发编程实战

最近在看java并发编程实战,打算记录一些自己认为经常面试用的知识点。1.Volatile变量 1.1 作用:它用来确保将变量的更新操作通知到其他线程。 在读取volatile类型的变量的时候,总是返回最新写入的值。这是因为当把变量声明为volatile类型以后,编译器与运行时都会注意到这个变量是共享的,因此不会将变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄...

2018-09-08 17:25:03 3433

原创 JVM:对象是否存活的算法

一般判断对象是否存活有两种方法,一种是引用计数法,另一种是可达性分析法1.引用计数法 核心思想:给对象添加一个引用计数器,每当有一个地方引用它的时候,计数器值就加1;当引用失效时候,计数器值就减1。任何计数器为0的对象就是不可能在被使用的。 优势:引用计数法的实现简单,判定效率高。 缺点:很难解决对象之间相互循环引用的问题。2.可达性分析法 核心思想:通过一系列的称为 GC Roo...

2018-09-05 17:30:08 241

原创 JVM:对象的创建

在使用java编程的过程中,肯定会经常性的创建对象,在语言层面上,一般只需要直接new出对象即可。但是在java虚拟机中是由一套完整的流程的。1.当虚拟机遇到一个new指令的时候,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有必须先执行相应的类加载过程; (类加载过程分为五步:加载、验证、准备,解析和初始化)...

2018-09-05 16:19:19 199

原创 一句话解释设计模式

设计模式一共由6大原则和23种设计模式,一下子很难将它们全部说出来,但是可以用一句话,将它们的特点的概括出来,然后在这个特点上进行展开,这样就容易多了。六大原则1.单一职责原则 无论是变量、方法还是类、接口等等,它们的职责或代表的含义负责的功能都应该是单一独立的,一个模块不能负责超过两种事情,一种事情也尽量不要在多个地方进行实现。2.里氏替换原则 凡是父类、接口可以使用的地...

2018-09-05 11:30:44 449

原创 接口与抽象类的区别

接口与抽象,在各个方面都有一定的区别,却有时候有可以实现相同的功能,下面让我们看瞎,这两者的区别吧。

2018-09-02 20:36:47 189

原创 ArrayList的扩容方式和扩容时机

ArrayList的底层是一个动态数组,ArrayList首先会对传进来的初始化参数initalCapacity进行判断,如果参数等于0,则将数组初始化为一个空数组,如果不等于0,将数组初始化为一个容量为10的数组。初始容量也可以自定义指定。随着不断添加元素,数组大小增加,当数组的大小大于初始容量的时候(比如初始为10,当添加第11个元素的时候),就会进行扩容,新的容量为旧的容量的1.5倍。 ...

2018-08-09 16:41:07 3849

原创 ArrayList和LinkedList的区别

ArrayList和LinkedList都实现了List接口 (1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (2)ArrayList适合查询,时间复杂度为O(1);不适合删除数据多的情况,因为需要移动数组中的数据。 (3)LinkedList适合增删,时间复杂度为O(1);不适合查询多的情况,最坏的时间复杂度会O(n)。 (4)L...

2018-08-09 16:39:30 177

数据结构与算法分析 java语言描述(原书第3版)

数据结构与算法分析 java语言描述(原书第3版),高清pdf,java的版本,如果积分不够,可以到我的博客下留言,我看到会直接发给你。

2018-08-15

精通Spring 4.x 企业应用开发实战高清pdf

精通Spring 4.x 企业应用开发实战高清pdf,特别适合想快点上手Spring的to同学,这是最新版Spring4.x的版本。

2018-08-15

空空如也

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

TA关注的人

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