自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最右后台开发

手写算法先把九个人叫到一块,出了一道题:求二叉树一个节点中序遍历的下一个结点(剑指原题),房间里太吵了,没写出来。一面(一面挂)你为什么没写出来,思路是什么再写一个求二叉树最大和最小深度问你操作系统(一脸懵逼)说一下进程内存分布什么在堆里,什么在栈里问linux命令(一脸懵逼)写过脚本吗(没有)结束...

2018-10-12 12:05:41 932

原创 美团后台开发

一面(一面挂)求根号x写算法(用了个二分查找)求二叉树最大子树和(没写出来)http和https的区别三次握手和四次挥手画一下数据库不同引擎的索引区别进程间通信方式(还有些记不住了)...

2018-10-12 12:05:02 609

原创 顺丰后台开发

一面(一面挂)写个递归,1加到n按行打印文件(有什么问题,忘了捕获异常和close了)数据库查询题(mysql有having吗? 当然有!)SpringBean的生命周期(记不住)创建Bean的方式IOC和AOP(还有些记不住了)...

2018-10-12 12:04:41 544

原创 陌陌后台开发

一面挂讲一下项目(web电商)java基础hashmap和concurrenthashmap有序的maphashmap排序ArrayList和linkedlist的区别1.8新特性项目相关controller是单例的吗spring单例如何实现日志缓存(有哪几种)网络https和http的区别https加密原理tcp怎样实现可靠连接(剩下的忘却了)...

2018-10-12 12:04:15 1624

原创 oppo后台开发

一面挂虚拟机内存分布虚拟机内存模型数据库(好像问了)linux命令场景题:内存两g,四核的cpu读取一个8g的文件,文件里按行存放数字,有很多是重复的,怎样找到前一百大的数字(没答好,挂了)...

2018-10-12 12:03:45 540

原创 华为通软软件开发

一面虚拟机设计模式java基础知道什么容器什么什么语言用过吗(有啥用?)重做测评(挂了)诀窍是不要前后不一致综面说项目有什么自豪的事(黑人问号)一些偏hr的问题...

2018-10-12 12:03:23 595

原创 MySQL优化特定类型查询

优化COUNT()查询COUNT()的作用COUNT()是一个特殊的函数,有两种非常不同的作用:他可以统计某个列值的数量,也可以统计行数。在统计列值时要求列值是非空的(不统计NULL)。如果在COUNT()的括号中指定了列或者列的表达式,则统计的就是这个表达式有值的结果数。COUNT()的另一个作用是统计结果记得行数。当MySQL确认括号内的表达式值不可能为空时,实际上就是在统计行...

2018-09-05 14:11:48 280

原创 Mysql Schema优化

范式和反范式范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次...

2018-09-03 18:16:34 728

原创 在MySQL内部存储代码

概述MySQL允许通过触发器、存储过程、函数的形式来存储代码。从5.1开始,还可以在定时任务中存放代码,这个定时任务也称为事件。存储过程和存储函数都被统称为存储程序。这四种存储代码都使用特殊的SQL语句扩展,它包含了很多过程处理语法,例如循环和条件分支等。不同类型的存储代码的主要区别在于其执行的上下文——也就是其输入和输出。存储过程和存储函数都可以接收参数然后返回值,但是触发器和事件却不行。...

2018-09-02 23:41:36 1074

原创 视图

视图MySQL5.0版本之后开始引入视图,视图本身是一个虚拟表,不存放任何数据,在使用SQL语句访问视图的时候,它返回的数据是MySQL从其他表中生成的。视图和表是在同一个命名空间,MySQL在很多地方对于视图和表是同样对待的。不过视图和表也有不同,如不能对视图创建触发器,也不能使用DROP TABLE命令删除视图。视图的创建:/** *REPLACE:替换已有视图 *AL...

2018-09-02 21:35:32 180

原创 索引

概述索引(键)是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其当表中的数据量越来越大时,索引对性能的影响愈发重要。索引优化是对查询性能优化最有效的手段,索引能够轻易地将查询性能提高几个数量级,创建最优的索引经常需要重写查询。在MySQL中,根据索引查询时,存储引擎首先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。索引可以包含一个或多个列的值,如果索引...

2018-09-02 17:06:25 168

原创 事务

概述事务是一组原子性的SQL查询,或者说一个独立的工作单元,如果数据库引擎能够成功执行改组查询的全部语句,就执行该组查询,否则,只要有一条语句崩溃或因其他原因无法执行,那么所有语句都不执行。可以用START TRANSACTION开始一个事务,然后用COMMIT提交事务将修改的数据持久保留,或者用ROLLBACK撤销所有的修改。事务的ACID特性原子性(atomicity)...

2018-08-31 18:20:18 147

原创 Java异常

处理错误假设Java程序在运行期间出现了一个错误,该错误可能是文件包含了错误信息、网络连接出现问题、使用无效的数组下标、使用一个没有被赋值的对象造成的,在出现这些错误时,程序应该做到其中一点:返回到一种安全状态,并能够让用户执行一些其他的命令;允许用户保存所有操作的结果,并以妥善的方式终止程序。 异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器。...

2018-08-31 18:19:38 122

原创 部署Java应用程序

JAR文件Java归档(JAR)文件用于将应用程序打包成一个单独的文件,一个JAR文件既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件。JAR文件是压缩的,使用了ZIP压缩格式。创建JAR文件在jdk/bin目录下的jar工具可制作JAR文件,创建JAR文件常见命令格式为:jar cvf JARFileName File1 File2 … 。此外,还有一些其他命令,...

2018-08-29 15:31:08 3468

原创 回溯法(Back-Tracking Algorithms)

回溯法回溯法是一种类似于分治的设计技术,用来求解最优化问题并寻求可行方案。 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。在回溯法中,可以把所有的路径看作一棵树,在这棵树中,结点有三种:...

2018-08-28 18:21:36 633

原创 动态规划(dynamic programming)

一、相关定义最优化问题(optimization problem)这类问题可以有很多可行解,每一个解都有一个值,我们希望寻找具有最优值的解,我们称这样的解为问题的一个最优解(an optimal solution)。动态规划动态规划与分治法类似,都是通过组合子问题的解来求解原问题。分治法将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。与...

2018-08-27 05:15:01 221

原创 多路查找树(B树)

多路查找树(muitl-way search tree)多路查找树每一个结点的孩子数可以多于两个,且每一个节点处可以存储多个元素。2-3树2-3树的每一个结点都具有两个孩子(2结点)或三个孩子(3结点)。一个2结点包含一个元素和两个孩子(或没有孩子),且与二叉排序树类似,左子树包含的元素小于该元素,右子树包含的元素大于该元素与二叉排序树不同的是,这个2结点要么没有孩子,要么就有...

2018-08-25 20:10:36 399

原创 线程安全与锁优化

线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。Java语言中的线程安全按线程的安全程度由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。...

2018-08-25 01:55:58 110

原创 Java内存模型与线程

Java内存模型Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model, JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在JDK1.5以后,Java内存模型就已经成熟和完善起来了。主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存...

2018-08-24 16:54:48 107

原创 Java虚拟机晚期(运行期)优化

概述Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个代码或代码块的运行特别频繁时,就会把这些代码认定为热点代码(Hot Spot Code),在运行时,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT)。HotSpot虚拟机内的即时编译器解释器与编译器解释器与编译器两者各有优势:当程序需要迅速启动和...

2018-08-23 23:07:47 288

原创 Java虚拟机早期(编译期)优化

概述Java的编译期可能是一个前端编译器把.java变成.class的过程,也可能是虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转换成机器码的过程。还可能是使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把.java文件编译成本地机器代码的过程。本文的编译期和编译期都指第一类编译期。Javac这类编译器对代...

2018-08-23 03:04:59 131

原创 类加载及执行子系统的案例分析

概述在Class文件格式与执行引擎这部分中,用户的程序能影响的内容并不太多,能通过程序进行操作的,主要是字节码生成与类加载器这两部分的功能。案例分析Tomcat:正统的类加载架构主流的Java Web服务器如Tomcat、Jetty、WebLogic、WebSphere都实现了自己的类加载器。一个功能健全的服务器,要解决如下几个问题:部署在同一个服务器上的两个Web应...

2018-08-22 03:36:45 158

原创 虚拟机字节码执行引擎

概述执行引擎是Java虚拟机最核心的组成部分之一,虚拟机可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。执行引擎在执行代码时,可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,甚至包含几个不同级别的编译器执行引擎。但从外观来看,所有Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字...

2018-08-21 21:28:25 154

原创 虚拟机类加载机制

概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类型的加载、连接和初始化过程都是在程序运行期间完成的,基于这个特点,Java可以扩展动态语言,如Applet、JSP和OSGi等。类加载的时机类的生命周期如下图所示: 其中,加载、验证、准备、初始化、卸载的顺序是确定...

2018-08-20 21:53:55 105

原创 Class文件

无关性不同平台的Java虚拟机与所有平台都使用统一的程序存储格式字节码(ByteCode)来实现Java的平台无关性。此外,在Java虚拟机上也开发出了许多语言,包括Clojure、Groovy、JRuby、Jython、Scala等。Java虚拟机不和包括Java在内的任何语言绑定,它只与Class文件关联,Class文件中包含了Java虚拟机指令集和符号表以及其他辅助信息,虚拟机并不关心C...

2018-08-19 19:21:10 4550

原创 虚拟机性能监控与故障处理工具

JDK监控和故障处理工具JDK的bin目录下有许多命令行工具,他们大多数是在tools类库实现的,借助这些工具,我们可以直接在应用程序中实现功能强大的监控分析功能。监控和故障处理工具如下表所示: 名称 主要作用 jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。 jsat JVM Statisti...

2018-08-18 02:24:08 174

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

程序计数器和栈区域随线程而生,随线程而灭,栈中的栈帧随方法的进入退出执行出栈和入栈操作,每一个栈帧分配的内存是在编译期可知的,在线程结束时,内存随之回收。堆和方法区的内存只有在运行期才能确定,这部分内存分配和回收是动态的,所以只讨论这部分内存。判断对象是否已死可达性分析算法(Reachability Analysis)可达性分析的基本思路是通过一系列的称为“GC Roots”的...

2018-08-17 22:20:39 1780

原创 OutOfMemoryError异常

在虚拟机规范中,除了程序计数器,其他区域都有OutOfMemoryError异常的能,下面就实践一下这些异常。Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除对象,那么在对象数量达到最大堆的容量限制后就会产生内存溢出异常。这是一个堆内存溢出的例子:package outofmemoryerror;...

2018-08-17 01:50:06 131

原创 JAVA内存区域

运行时数据区域运行时数据区如图所示: 程序计数器(Program Counter Register)程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。为了线程切换后能恢复到正确的执行位置,每条线程都需要有...

2018-08-16 03:50:05 110

原创 设计模式总结

设计模式的定义模式是在某情境下,针对某问题的某种解决方案。设计模式分类分类图如下: 设计原则找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。针对接口(超类型,可以是抽象类也可以是接口)编程,而不是针对实现编程。 多用组合,少用继承。(多用has-a,少用is-a)为了交互对象之间的松耦合而努力。类应该对扩展开放,对修改关闭。要依...

2018-08-15 23:17:44 136

原创 复合模式(Compound Pattern)

什么是复合模式模式通常被一起使用,并被组合在同一个设计解决方案中。复合模式在一个解决方案中结合两个或多个模式,已解决一般或重复发生的问题。模式合作在实际工作中,可以采用不同的设计模式解决各种问题,下面是一个例子:首先要创建一群呱呱叫的鸭子类,让他们实现接口Quackable:public interface Quackable { public void qua...

2018-08-15 21:56:16 2321

原创 代理模式(Proxy Pattern)

远程代理远程代理好比”远程对象的本地代表”。远程对象是一种对象,活在JVM堆中,本地代表是一种可以由本地方法调用的对象,其行为会转发到远程对象中。客户对象调用本地堆中的代理对象上的方法,再由代理处理所有网络通信的低层细节。当调用完毕,结果值也通过网络从远程送回我们的客户。可以利用RMI实现远程调用。远程方法远程方法包括四个对象:客户对象、客户辅助对象(代理)、服务辅助对象、服务...

2018-08-14 23:03:31 190

原创 反射(Reflection)

JavaBean什么是JavaBeanBean是一个类,它的作用是:通过方法名称表示这是一个属性、一个事件还是一个普通的方法,它有自己的方法命名规则:对于一个名称为xxx属性,通常要写两个方法getXxx和setXxx,任何浏览这些方法的工具,都会把get或者set后的第一个字母转成小写,以产生属性名。get方法返回类型与set方法参数类型相同;对于布尔型属性,可以使用get和...

2018-08-14 20:46:41 145

原创 状态模式(State Pattern)

什么是状态模式一个糖果机的状态转换图如下所示: 如图,糖果机共有四种状态:有硬币、没硬币、售出糖果、糖果售罄,可以用四个常亮来表示四种状态,在糖果机类里定义投硬币、退硬币、转动曲柄、发糖果这四个动作的方法,这样,每个方法都要写与状态有关的if语句,确定在某个状态下某个动作的结果,但是这样的话,扩展起来很不方便,代码可维护性也低。可以定义一个状态接口,用四种状态类实现它,每个类实现需要的方...

2018-08-13 23:06:49 495

原创 迭代器模式(Iterator Pattern)与组合模式(Composite Pattern)

什么是迭代器模式正式定义迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。 把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。一个迭代器模式的结构一个聚合对象的接口,该接口中包含创建迭代器的方法,具体的聚合类实现该接口的创建迭代器方法,并返回一个迭代器对象;一个迭代器接口,包含next、hasNe...

2018-08-13 18:36:06 223

原创 模板方法模式(Template Method Pattern)

什么是模板方法模式正式定义模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。一个模板方法的实现:一个咖啡因饮料的准备方法: final void prepareRecipe(){ ...

2018-08-13 00:02:18 89

原创 适配器模式(Adapter Pattern)和外观模式(Facade Pattern)

什么是适配器现实中的适配器是把作为两个无法适配的设备之前的桥梁,把一个设备转化成另一个设备可以使用的设备,类似的,假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商所设计出来的接口,不同于旧厂商的接口,如果不希望改变代码,就可以写一个适配器类,将新厂商接口转接成你所希望的接口。适配器的正式定义 适配器模式是将一个类的接口,转换成客户期望的另一个接口,适配器让...

2018-08-12 21:15:31 258

原创 命令模式(Command Pattern)

命令模式概念命令模式图解说明类似于在餐馆点餐的过程,顾客类似于客户,他首先将菜单写好,发出命令对象(菜单),服务员(调用者)拿到菜单后将订单交给厨师(执行者),厨师执行的是订单中的内容,而与服务员是无关的。正式定义命令模式将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象,命令模式也支持可撤销的操作。一个简单命令模式的实现(遥控器控制点灯开关)...

2018-08-12 17:00:09 146

原创 单件模式(Singleton Pattern)

为什么引入单件模式有些对象只需要一个,例如线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象、打印机和显卡等设备的驱动对象,这些对象只能有一个实例,如果有多个就会出现问题。如果用全局变量,那么必须在程序一开始就创建好对象,非常耗费资源,可以用单件模式,在需要时创建对象。单价模式的关键是保证一个对象只被实例化一次。单件模式分析下面是一个经典的单件模式类的实现:publ...

2018-08-12 02:25:12 96

原创 工厂(Factory)模式

为什么引入工厂模式按照面向对象的思想,利用接口(或抽象类)实例化一群具体的相关类时,要调用new方法,在运行时根据条件决定实例化的是哪一个类,这样的话,一旦有变化或扩展,就必须重新打开这段代码进行修改(例如有新的类型要实例化),相当于将很多鸡蛋放在一个篮子里,造成维护的困难。 这是一个相似的例子(假设这些类都实现了接口Book):Book book;if(comic) bo...

2018-08-12 01:36:24 234

空空如也

空空如也

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

TA关注的人

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