自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白夜行

冗长的黑暗中,你是我唯一的光。

原创 【剑指offer】Java版代码(完整版)

一、引言《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。二、目录赋值运算函数单例设计模式二维数组中查找目标值替换字符串中的空格从尾到头打印链表由前序和中序遍历重建二叉树用两个

2017-11-02 19:44:44 48538 57

原创 【面试题】消息队列相关

1. 为什么使用消息队列?消息队列的使用场景:解耦:例如A系统需要发送数据到BCD等多个系统异步:例如A系统接收请求后不仅需要本地写库,还需要在BCD等多个系统中写库,然后才能返回结果。削峰:例如A系统在某个时间段内接收的请求多于平时好几倍(秒杀)2. 使用消息队列会带来什么问题?可用性降低:需要考虑MQ服务器挂掉的情况。解决方法:MQ集群确保高可用复杂性提高:需要考虑...

2019-06-09 11:32:00 280

转载 【面试题】Spring相关

1. 什么是 Spring 框架?Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护。Spring包含很多模块,分别是:核心容器、数据访问/集成,、Web、AOP、工具、消息和测试模块。例如:Core Container 中的 Core 组件是Spring 所有组件的核心,Beans 组件和 Context 组件是实现IOC和依赖注入的基础,AOP组件用来实现面向...

2019-06-02 15:57:46 195

转载 Spring Bean的生命周期

一、Bean 的完整生命周期1.1 Bean的核心构造过程在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了。一旦bean不再被使用,则由Java自动进行垃圾回收。相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了...

2019-05-27 17:16:16 97

原创 【设计模式】Spring 中用到的设计模式

一、引入Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。Spring框架中使用到了大量的设计模式,下面介绍比较有代表性的几种。二、Spring常用的八种设计模式2.1 工厂模式工厂模式通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。Spring使用工厂模...

2019-05-27 16:20:17 357

转载 线上Java 高CPU占用、高内存占用排查思路

一、前言处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。二、分析原因对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出j...

2019-05-23 16:34:40 1926

原创 Spring概述

1.Spring定义1.1 Spring官网介绍Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache License 2.0开源许可协议的形式发布,也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-43...

2019-05-14 15:49:30 250

原创 【设计模式】组合模式

1.定义组合模式(Composite)组合多个对象形成树形结构以表示“整体-部分”的结构层次。2.结构2.1 UML类图2.2 角色Component(树形结构的节点抽象)为所有对象定义统一的接口(公共属性、行为等的定义);提供管理子节点对象的接口方法;提供管理节点对象的接口方法。Leaf (树形结构的叶节点):Component的实现子类,叶子结点没有子结点。Composite...

2019-05-09 19:01:13 99

原创 【设计模式】状态模式

1.定义状态模式(State)允许通过改变对象的内部状态而改变对象的行为,这个对象就如同修改了它的类2.结构2.1 UML类图2.2 角色Context:用户对象,拥有一个State类型的成员,以标识对象的当前状态。State:接口或抽象类,封装与Context的特定状态相关的行为。ConcreteState:接口实现类或子类,实现了一个与Context某个状态相关的行为。3...

2019-05-09 17:32:02 62

原创 【设计模式】装饰模式

1.定义装饰模式(Decorator)向一个现有的对象添加新的功能,同时又不改变其结构。就增加功能来说,装饰器模式相比生成子类更为灵活。2.结构2.1 UML类图2.2 角色Component 抽象组件角色:一个抽象接口,是被装饰类和装饰类的父接口Concrete Component 具体组件角色:是抽象组件的实现类Decorator 抽象装饰角色:包含一个组件的引用,并定义了与...

2019-05-09 16:14:27 59

原创 【设计模式】中介者模式

1.定义中介者模式(Mediator)用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。2.结构2.1 UML类图2.2 角色Mediator:抽象中介者,定义了同事对象到中介者对象之间的接口。ConcreteMediator: 具体中介者。实现抽象中介者的方法,它需要知道所有的具体同事类,同时需要从具体的...

2019-05-09 15:37:43 68

原创 【设计模式】责任链模式

1.定义责任链模式(Chain of Responsibility)也称为职责链模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。即构造一系列分别担当不同的职责的类的对象来共同完成一个任务。2.结构2.1 UML类图2.2 角色Handler 处理类的抽象父类,定义了一个处理请求的方...

2019-05-07 18:15:54 107

原创 【设计模式】原型模式

1.定义原型模式(Prototype)采用复制原型对象的方法来创建对象的实例,使得复制后的对象与原型有一样的数据。浅拷贝与深拷贝的定义浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值。深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。若想要深入理解深拷贝和浅拷贝可参考:深拷贝与浅拷贝详解2....

2019-05-07 17:19:04 81

原创 【设计模式】享元模式

1.定义享元模式(Flyweight)通过与其他类似对象共享数据来减小内存占用。享元模式的两种状态:内部状态:不会随着环境的改变而改变的可共享部分;外部状态:会随环境改变而改变的不可共享的部分。2.结构2.1 UML类图2.2 角色Flyweight 抽象享元角色:所有具体享元类的父类,规定一些需要实现的公共接口ConcreteFlyweight 具体享元角色...

2019-04-26 16:20:35 71

原创 【设计模式】外观模式

1.定义外观模式(Facade)为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统或类库方便使用。2.结构2.1 UML类图2.2 角色Facade :调用方法定义简单的调用接口,它被客户角色调用,熟悉子系统的功能。SubSystem 功能提供者:提供功能的类群(模块或子系统)Clients 调用者:通过Facade接口调用提供某功能的内部类群...

2019-04-25 20:51:10 67

原创 【设计模式】桥接模式

1.定义桥接模式(Bridge)将抽象部分与它的实现部分分离,从而保持各部分的独立性以及应对它们的功能扩展。2.结构2.1 UML类图2.2 角色Abstraction 抽象类或接口维护对行为实现的引用Refined Abstraction:抽象化角色的子类,实现父类中的业务方法,并通过组合/聚合关系调用实现角色中的业务方法。Implementor:定义实现化角色的接口,定义实现...

2019-04-25 19:51:28 80

原创 【设计模式】模板方法模式

1.定义模板方法模式(Template Method)把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。2.结构2.1 UML类图2.2 角色Abstract Class 抽象类的父类:由子类实现的方法,并且在模版方法被调用Concrete Class 具体的实现子类:实现父类所定义的一个或多个抽象方法Template Met...

2019-04-25 17:19:27 222

原创 【设计模式】命令模式

1.定义命令模式(Command)将一个请求封装为一个对象,从而使可用不同的请求对客户进行参数化,对请求排队或请求记录日志,以及支持可撤销的操作。2.结构2.1 UML类图2.2 角色Command :声明执行命令的接口,拥有执行命令的抽象方法 execute()。Concrete Command 具体实现类:它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。Rec...

2019-04-24 15:32:48 73

原创 【设计模式】解释器模式

1.定义解释器模式(Interpreter)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。2.结构2.1 UML类图2.2 角色Context(解释器上下文环境类):用来存储解释器的上下文环境,例如:需要解释的文法等。AbstractExpression(抽象表达式):声明一个抽象的解释操作弗雷,并定义一个抽象的解释方案,其具体的实...

2019-04-23 20:34:10 72

原创 【设计模式】建造者模式

1.定义建造者模式(Builder)用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。2.结构2.1 UML类图2.2 角色产品(Product)角色:包含多个组成部件的复杂对象,由具体建造者来创建其各个部件。建造者(Builder)角色:定义生成实例所需要的所有方法;具体的建造者(ConcreteBuilder)...

2019-04-23 19:14:59 76

原创 【设计模式】简单工厂模式

1.定义简单工厂模式又称静态工厂方法模式(Static FactoryMethod)提供了一种创建对象的最佳方式,通过创建一个工厂类来创建其它类的实例。2.结构2.1 UML类图2.2 角色工厂(Creator)角色:实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。抽象(Product)角色:所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品(...

2019-04-23 16:57:11 57

原创 【设计模式】观察者模式

1.定义观察者模式(Observer)定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。2.结构2.1 UML类图2.2 角色Subject(被观察者):被观察的对象,当需要被观察的状态发生变化时,需要通知队列中所有的观察者对象,Subject需要维持(添加。删除、通知)一个观察者对象的队列列表。Concrete Subjec...

2019-04-23 15:50:13 74

原创 【设计模式】工厂方法模式

1.定义工厂方法模式(Factory)定义一个创建产品对象的工厂接口,让子类决定实例化哪一个类,使得一个类的实例化延迟到其子类。核心工厂类不再负责产品的创建,它成为了一个抽象工厂角色,仅负责具体工厂子类实现的接口。2.结构2.1 UML类图2.2 角色抽象工厂(Creator)角色:工厂方法模式的核心,任何工厂类都必须实现这个接口。具体工厂(Concrete Creator)角色:...

2019-04-23 11:45:28 84

原创 【设计模式】访问者模式

1.定义访问者模式(Visitor)表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。将数据结构与数据操作分离。2.结构2.1 UML类图2.2 角色访问者角色(Visitor):为该对象结构中具体元素角色声明了一个访问操作接口,该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的...

2019-04-22 21:19:58 68

原创 【设计模式】迭代器模式

1.定义迭代器模式(Iterator)将容器中包含的内部对象的访问委让给外部类,按顺序进行遍历访问,即可顺序访问集合对象元素,而不暴露该对象的底层细节。2.结构2.1 UML类图2.2 角色Iterator(迭代器接口):该接口必须定义实现迭代功能的最小定义方法集,例如提供hasNext()和next()方法Concrete Iterator (迭代器实现类):迭代器接口的实现类,...

2019-04-22 20:04:57 60

原创 【设计模式】代理模式

1.定义代理模式(Proxy)为其他对象提供一种代理,从而控制对这个对象的访问。代理:指具体与代理元(被代理对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特殊的处理。2.结构2.1 UML类图2.2 角色Subject(抽象角色):真实主题与代理主题的共同接口Realsubject(真实角色):定义了代理角色所代表的...

2019-04-22 19:04:39 80

原创 【设计模式】抽象工厂模式

1.定义抽象工厂模式(Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。即向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象2.结构2.1 UML类图抽象工厂模式2.2 角色抽象工厂(Creator)角色:抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。抽象(...

2019-03-05 11:41:36 117 1

原创 【设计模式】策略模式

1.定义策略模式(Strategy)对一系列的算法加以封装,为所有的算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交给客户端决定,从而达到平滑的处理算法间切换的目的。2.结构2.1 UML类图2.2 角色Strategy:策略(算法)抽象ConcreteStrategy:各种策略(算法)的具体实现Context:策略的外部封装类(容...

2019-02-21 17:40:17 100

原创 【设计模式】备忘录模式

1.定义备忘录模式(Memento)保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。2.结构2.1 UML类图2.2 角色Originator(原生者):需要被保存状态以便恢复的对象Memento(备忘录):该对象由Originator创建,用来保存Originator的内部状态Caretaker(管理者):负责在适当的时间保存或恢复Origi...

2019-02-19 15:49:54 135

原创 【剑指offer】51-67题

51.在一个长度为n的数组里的所有数字都在0到n-1的范围内,找出数组中任意一个重复的数字思路:若下标大于length,则减去length,最后再加上length,若下标的数组值大于length,则返回true。或使用辅助空间(HashSet)代码实现:public boolean duplicate(int numbers[],int length,int [] duplication) {

2017-11-02 19:26:50 5262 2

原创 【剑指offer】41-50题

41.输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序思路:定义两个指针,分别递增,寻找和为s的序列。代码实现: public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer>> arrayList = n

2017-11-02 19:25:28 3324

原创 【剑指offer】31-40题

31.求连续子数组(包含负数)的最大和思路:若和小于0,则将最大和置为当前值,否则计算最大和。代码实现:public int FindGreatestSumOfSubArray(int[] array) { if (array == null || array.length == 0) return 0; int cur = array[0]; int gre

2017-11-02 19:23:47 3891 6

原创 【剑指offer】21-30题

21.定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路:定义两个栈,一个存放入的值。另一个存最小值。代码实现:public void push(int node) { stack1.push(node); if (stack2.isEmpty()) { stack2.push(node); }else { if (st

2017-11-02 19:22:34 5505 3

原创 【剑指offer】11-20题

11.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不得使用库函数,不需要考虑大数问题思路:不能用==比较两个浮点数是否相等,因为有误差。考虑输入值的多种情况。代码实现:public double Power(double base, int exponent) { double res = 0; if (equal(b

2017-11-02 19:21:10 7205 6

原创 【剑指offer】1-10题

1.赋值运算函数思路:将返回值类型声明为该类型的引用把传入的参数类型声明为常量引用释放实例自身已有的内存判断传入的参数和当前的实例是不是同一个实例2.单例设计模式思路及代码实现请参考:单例设计模式代码实现3.在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从右上角或左

2017-11-02 19:18:54 26184 10

原创 【面经】非科班渣本的秋招经历

一、前言本人之前的专业是电子信息工程(偏硬件),大三刚开学时听大四的学长说硬件的工作不好找,但相反软件的工作好找,而且招聘的公司多,市场需求大,最重要的是工资高,所以说软件的就业形势要好于硬件。我经过一番了解,就毫不犹豫的入了程序猿的大军。确定了学Java后,我就在选择报培训班还是自学,应该说各有利弊吧,报班有老师带你,给你指引了学习的方向,这样学起来就省事多了,不用纠结该学什么,但就是要...

2017-11-02 18:04:36 3610 5

原创 【面试题】海量数据处理相关

海量数据处理思路针对时间,可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie/,针对空间,无非就一个办法:大而化小:分而治之/hash映射,处理海量数据的几种方法分而治之/hash映射 + hash统计 + 堆/快速/归并排序;双层桶划分;Bloom filter/Bitmap;Trie树/数据库/倒排索引;外排序

2017-08-07 19:15:16 530

原创 【面试题】设计模式相关

1.单例设计模式使用设计模式为了代码复用,增加可维护性。设计模式的六大原则:开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则(最少知道原则)、合成/聚合复用原则Singleton(创建):保证一个类仅有一个实例,并提供一个访问它的全局访问点。如打印机饿汉式单例模式//饿汉模式:线程安全,耗费资源。public class HugerSingletonTest { /

2017-08-07 15:26:51 654

原创 【面试题】二叉树相关

1.二叉树二叉树是每个节点最多有两个子树的树结构满二叉树:除叶子节点外,所有节点的度都为2完全二叉树:叶子结点只能出现在最下两层;最下层的叶子一定集中在左部连续位置;倒数二层,若有叶子结点,一定都在右部连续位置;如果结点度为1 ,则该结点只有左孩子,即不存在只有右子树的情况;同样结点数的二叉树,完全二叉树的深度最小。哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树2.前中序遍历的代

2017-08-07 14:32:09 427

原创 【面试题】链表、栈和队列

1.顺序存储结构顺序存储结构,即数组。优点:节省存储空间,随机存取表中元素;缺点 :插入和删除操作需要移动元素顺序存储结构的插入与删除操作代码实现 public void insert(int data){ if (length >= size){ System.out.println("已存满"); return;

2017-08-07 13:35:00 634

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