面试
文章平均质量分 66
钟渊
持续学习
展开
-
Mysql为什么用B+树做索引而不用B-树或红黑树?
一、概述B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。所以从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。那么Mysql如何衡量查询效率呢?– 磁盘IO次数。B-树/B+树 的特点就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘IO次数.原创 2021-08-02 22:53:44 · 441 阅读 · 0 评论 -
为什么要分为新生代和老年代?为什么要有Survivor区?
一、为什么要分为新生代和老年代?二、为什么要有Survivor区?三、JVM 各区的结构图。原创 2021-04-11 10:57:59 · 3601 阅读 · 1 评论 -
面向对象的几大原则
1. 单一职责原则(Single Responsibility Principle)每一个类应该专注于做一件事情。2. 里氏替换原则(Liskov Substitution Principle)超类存在的地方,子类是可以替换的。3. 依赖倒置原则(Dependence Inversion Principle)实现尽量依赖抽象,不依赖具体实现。转载 2017-08-23 19:02:14 · 362 阅读 · 0 评论 -
java对象序列化的问题
Java对象序列化:1、 对象序列化:将一个对象转换成二级制数据流,如果一个类的对象要想实现对象序列化,则对象必须实现Serializable接口,该Serializable接口没有任何方法,此接口只是作为一个标识,表示本类的对象具备了序列化的能力而已。对象序列化是java的一个特征,通过该特征可以将对象写作一组字节码,当在其他位置读到这些字节码时,可以依此创建一个新的原创 2016-08-04 16:43:40 · 607 阅读 · 0 评论 -
Mysql的索引以及使用索引可能失效的场景
我们先来回顾下mysql的索引:普通索引:最基本的索引,没有任何限制唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。主键索引:它 是一种特殊的唯一索引,不允许有空值。 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。创建复合索引时应该将最常用(频率)作原创 2017-08-23 22:50:41 · 630 阅读 · 0 评论 -
JVM的类加载机制和运行过程
一、加载机制加载:指的就是将class文件加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个java.lang.Class对象。验证:要确保加载的信息符合jvm的规范,没有安全问题。准备:指给类变量分配内存,并设置初始值得阶段,这些内存都将在方法区中分配。解析:虚拟机常量池的符号引用替换为字节应用的过程。初始化:初始化是执行clinit方法的过程。...原创 2019-03-09 23:42:45 · 428 阅读 · 0 评论 -
jvm的垃圾收集器整理
首先我们先根据下面这个图来具体说下每个收集器的特点:serial收集器:Serial(串行)收集器收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程( “Stop The World” ),直到它收集结束...原创 2019-03-21 11:25:57 · 171 阅读 · 0 评论 -
java实现单向链表的删除
题目如下:给定单向链表的头指针和一个节点指针,定义在一个函数在O(1)时间内删除该节点。public class ListNode { ListNode next; int value; public ListNode(int value){ this.value = value; }}测试类如下:public class ...原创 2019-03-25 21:10:59 · 2419 阅读 · 3 评论 -
二维数组问题
问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解答:/** *思路:从右上角或者左下角开始找 */ public static void main(String[] args) { int arr [] [] = {{...原创 2019-04-28 20:04:00 · 386 阅读 · 0 评论 -
java面试:奇数偶数问题
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解答: public static void main(String[] args) { int [] arr = {2,3,22,6,7,9,17,8}; reOrderAr...原创 2019-05-19 21:37:06 · 581 阅读 · 0 评论 -
Java面试:java栈和队列相关
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解答: public static void main(String[] args) { Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = new Sta...原创 2019-05-16 19:30:14 · 149 阅读 · 0 评论 -
Java面试:打印链表
题目:输入一个链表,从尾到头打印链表每个节点的值。解答: public static void main(String[] args) { ListNode node1 = new ListNode(5); ListNode node2 = new ListNode(6); ListNode node3 = new ListNode(...原创 2019-05-12 19:49:06 · 216 阅读 · 0 评论 -
Java面试:重建二叉树题目
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。解答: public static void main(String[] args) { //前序遍历数 int [] preNode ={1,2,4,7,3,5,6,8}; //中序遍历数 int [...原创 2019-05-12 20:02:18 · 151 阅读 · 0 评论 -
数据结构-栈
问题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 【该题摘自《剑指offer》】解答:public static void main(String[] args) { Stack<Integer> stack1 = new Stack(); Stack<Integer> stack2 = new Sta...原创 2019-06-13 20:07:33 · 172 阅读 · 0 评论 -
使用快排法,查找最小的n个数.
学习交流关注微信公众号:钟渊博客代码实现如下:public static void main(String[] args) { int [] arr = {2, 6, 3, 8, 9, 1, 16, 18, 0, 4}; int N = 3; getTopNMinBySort(arr, 0, arr.length - 1, N); ...原创 2019-07-29 13:19:52 · 343 阅读 · 0 评论 -
java面试:在一个长度为n的数组里的所有数字都在0到n-1的范围内,找出数组中任意一个重复的数字。
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内,找出数组中任意一个重复的数字。解答:public static void main(String[] args) { int [] numbers ={0,1,2,2,3,4,5}; int [] duplication = new int[10]; int duplicate...原创 2019-07-23 09:45:34 · 2636 阅读 · 0 评论 -
mybatis中#和$的区别
mybatis中#和$的区别:1)#相当于给数据加上双引号,$相当于直接显示数据2)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".3)$将传入的数据直接显示生成在sql中。如:orde原创 2017-08-23 18:36:42 · 371 阅读 · 0 评论 -
Servlet中forward和redirect的区别
Servlet中forward和redirect的区别:1)从地址栏显示看forward是服务器请求资源,服务器直接访问目标地址的URl,把那个URl的响应内容读取过来,然后把这些信息发送给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以forward(转发)发送数据地址栏不变。redirect是服务器端根据业务逻辑发送状态码,重新告诉浏览器去请求哪一个地址,所以地址栏原创 2017-02-09 13:48:18 · 942 阅读 · 0 评论 -
java的类加载机制以及加载模型
1、概述我们先来看下下面的java代码:(大家感觉会输出什么结果呢?)public class TestClass { static { System.out.println("TestClass"); } public static void main(String[] args) { System.out.print原创 2017-08-22 20:13:12 · 1026 阅读 · 0 评论 -
memcached学习总结
一、Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。 memcached是高性能原创 2016-06-24 17:07:03 · 369 阅读 · 0 评论 -
Spring技术中AOP总结
spring的三种织入方式: 编译期织入、类加载期织入和运行期织入。编译期织入是指在Java编译期,采用特殊的编译器,将切面织入到Java类中;而类加载期织入则指通过特殊的类加载器,在类字节码加载到JVM时,织入切面;运行期织入则是采用CGLib工具或JDK动态代理进行切面的织入。 AspectJ采用编译期织入和类加载期织入的方式织入切面,是语言原创 2016-07-07 16:01:19 · 749 阅读 · 0 评论 -
spring的工作原理总结
1、spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。 Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监转载 2016-07-08 10:07:05 · 1676 阅读 · 0 评论 -
抽象类和接口的区别
抽象类:1.抽象类用abstract关键字来修饰.2.有抽象方法的类必须申明为抽象类.3.抽象类中的方法可以有不是抽象的.4.抽象类不能实例化对象.5.抽象类中的方法必须在子类中实现,因此不能抽象构造方法或者是抽象静态方法.6.如果子类没有实现抽象类的抽象方法,则该子类也必须申明为抽象类.接口: 可以看成是抽象类的特例1.所有的方法原创 2016-07-15 14:36:57 · 379 阅读 · 0 评论 -
Spring的两种代理JDK和CGLIB的区别浅谈
我的店铺一、原理区别:java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP...原创 2016-08-04 17:39:49 · 57593 阅读 · 12 评论 -
Java垃圾回收机制
1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放转载 2016-08-26 21:39:05 · 482 阅读 · 0 评论 -
数据库优化总结
1对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.备注、描述、评论之类的可以设置为原创 2016-08-24 22:59:10 · 404 阅读 · 0 评论 -
WEB服务器与应用服务器的区别
一.简述WEB服务器与应用服务器的区别:1.WEB服务器:理解WEB服务器,首先你要理解什么是WEB?WEB你可以简单理解为你所看到的HTML页面就是WEB的数据元素,处理这些数据元素的应用软件就叫WEB服务器,如IIS、apache。 WEB服务器与客户端打交道,它要处理的主要信息有:session、request、response、HTML、JS、CS等。2.应用服转载 2016-08-23 22:48:27 · 386 阅读 · 0 评论 -
过滤器、拦截器、监听器的区别
一、过滤器Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面转载 2016-08-23 22:17:21 · 605 阅读 · 0 评论 -
List、Set、Map的比较
一、继承关系list和set继承Collection.接口。Map没有继承Collection接口。体系图: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashM原创 2016-08-22 18:27:57 · 468 阅读 · 0 评论 -
hibernate和mybatis比较
一、Hibernate的原理原理图(网络图):图解分析:(1)SessionFactory:这是Hibernate的关键对象,它是单个数据库映射关系经过编译后的内存镜像,它也是线程安全的。它是生成Session的工厂,本身要应用到ConnectionProvider,该对象可以在进程和集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。(2)Session:它是应原创 2016-08-21 20:44:10 · 593 阅读 · 0 评论 -
struts2和Springmvc原理及比较
一、strtuts2的原理一个请求在Struts2框架中的处理大概分为以下几个步骤: 客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。请求被提交到一系列(主要是三层)的过滤器(Filter),如(Actio原创 2016-08-20 23:45:23 · 4459 阅读 · 4 评论 -
作用域public,private,protected,以及不写时的区别
C++中和JAVA中,public、private、 protected 的用法不完全一样。C++中:public修饰的成员变量或方法可以被任意其他的类访问。private修饰的成员变量和方法,只能有类本身以及友元函数和友元类来访问。 protected 修饰的成员变量和方法,能被类本身、继承本身的子类、友元函数以及友元类来访问。默认情况下,在class关键字定义的类中,第一个作用转载 2016-08-29 23:16:09 · 20661 阅读 · 0 评论 -
java内存管理
1. java是如何管理内存的 Java的内存管理就是对象的分配和释放问题。(两部分) 分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。释放 :对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作。但同时,它也加重了JVM的工作。因为,GC为了能够正确释放对象,GC必须监控原创 2016-08-29 23:08:30 · 539 阅读 · 0 评论 -
递归算法
学习交流关注微信公众号:钟渊博客一、递归实现N!.代码实现:package cn.test;/** * @author 徐庶 * @date 2016年9月6日 */public class Recursive { //递归 private static long factorial(int n) { if(n == 1){ return 1; } ret...原创 2016-09-06 21:27:37 · 824 阅读 · 0 评论 -
java多线程
多线程问题一直困扰着自己,今天抽时间学习下。。。。。。。。。。。。。。。。。。一 线程和进程 1. 进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。 2. 线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、原创 2016-05-10 17:48:02 · 372 阅读 · 0 评论