常见面试问题
文章平均质量分 89
cangchen
这个作者很懒,什么都没留下…
展开
-
【MySQL之设计表(一)】**重要***MySQL数据库表设计中的注意事项
一、设计原则1.选择优化的数据类型MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要。不管选择何种类型,下面的简单原则都会有助于做出更好的选择:(1).更小通常更好一般来说,要试着使用正确地存储和表示数据的最小类型。更小的数据类型通常更快,因为它们使用了更少的磁盘空间、内存和CPU缓存,而且需要的CPU周期也更少。但是要确保不人转载 2015-05-12 17:45:11 · 11415 阅读 · 2 评论 -
【算法之高效求素数】浅析求素数算法
注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度1. 根据概念判断:如果一个正整数只有两个因子, 1和p,则称p为素数.代码:bool isPrime(int n){ if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0) return转载 2015-04-14 11:08:05 · 1063 阅读 · 0 评论 -
【算法之链表(三)】单链表中,在仅允许使用一个指针的情况下,在指定的节点前面插入以及删除一个节点
题目:在给定头结点的单链表中插入以及删除指定节点这个题目我们遇到这个问题的时候可能会想这个该怎么解,我们知道如果在一个已知的节点之后添加和删除一个节点的话很容易的,那么如何在给定的节点之前插入一个节点以及删除指定节点?因为如果想删除和插入一个节点的话,肯定是需要获取前面的一个节点的,但是根据题目所给的条件中,我们可以看到我们是不可能获取到前面的一个节点的,所以得另外去想转载 2015-04-14 12:10:03 · 1659 阅读 · 0 评论 -
【算法之动态规划(四)】动态规划笔试例题详解
转自:http://www.cnblogs.com/kkgreen/archive/2011/06/26/2090702.html终于来到了算法设计思想中最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续的篇幅来讨论一些转载 2015-04-14 17:32:54 · 8205 阅读 · 0 评论 -
【算法之动态规划(二)】动态规划:从新手到专家
前言_我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。这篇文章是基于实例展开来讲的,因为干巴巴的理论实在不好理解。注意:如果你对于其中某一节已经了解并且不想阅读它,没关系,直接跳过它即可。简介(入门)什么是动态规划,我们要如何描述它?动态规划算法通常基于一个递推公式及一个或多个初始状态转载 2015-04-14 17:31:17 · 2140 阅读 · 0 评论 -
【算法之链表(二)】判断两个链表是否相交并找出交点
题目:一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。首先来看一下如何判断两个链表是否存在相交的节点:思路:1、碰到这个问题,第一印象是采用hash来判断,将两个链表的节点进行hash,然后判断出节点,这种想法当然是可以的。2、当然采用暴力的方法也是可以的,遍历两个链表,在遍历的过程中进行比较,看节点是否相同。3转载 2015-04-14 12:04:50 · 3170 阅读 · 1 评论 -
【设计模式之五:观察者模式】观察者模式浅析
在阎宏博士的《JAVA与模式》一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这转载 2015-04-08 23:34:39 · 451 阅读 · 0 评论 -
【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(三):Spring启动加载配置文件源码分析
IOC的一点认识 对Spring IOC的理解离不开对依赖反转模式的理解,我们知道,关于如何反转对依赖的控制,把控制权从具体业务对象手中转交到平台或者框架中,是解决面向对象系统设计复杂性和提高面向对象系统可测试性的一个有效的解决方案。这个问题触发了IoC设计模式的发展,是IoC容器要解决的核心问题。同时,也是产品化的IoC容器出现的推动力。而我觉得Spring的IoC容器,就是一个开源的实现依转载 2015-04-08 22:59:52 · 845 阅读 · 0 评论 -
【Spring】JDK中动态代理实现原理详解
之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白。比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了。 废话不多说了,先来看一下JDK的动态是怎么用的。 Java代码 收藏代码package dynamic.proxy; import java.lang.r转载 2015-04-08 18:47:11 · 660 阅读 · 0 评论 -
【设计模式之四:工厂模式对比】简单工厂、工厂方法和抽象工厂的区别
在做.net机房收费系统画图阶段,重新认识了一下简单工厂与抽象工厂!从细节处看出它们的不同应用 下面写一下简单工厂的工厂类:[csharp] view plaincopyprint?class CashFactory { public static CashSuper createCas转载 2015-04-08 23:08:56 · 682 阅读 · 0 评论 -
【算法之动态规划(三)】动态规划算法之:最长公共子序列 & 最长公共子串(LCS),字符串相似度算法
1、先科普下最长公共子序列 & 最长公共子串的区别:找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。2、最长公共子串其实这是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:"bab"和"caba"(当然我们现在一眼就可以看出来最长公共子串是"b转载 2015-04-14 17:40:24 · 1767 阅读 · 0 评论 -
【算法之链表(四)】在不使用额外节点存储空间的情况下,实现单链表逆序
下面来看一下很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个问题,链表的初始状态如图(1)所示:图(1)初始状态 初始状态,prev是N转载 2015-04-14 12:24:49 · 4285 阅读 · 0 评论 -
【Spring】AOP的基本原理
Spring为Java大地带来了一阵春风,它作为一个优秀的轻量级企业应用开发框架,能够大大简化企业应用开发的复杂性。Spring以反向控制和AOP这两样先进的设计理念为基础,统一了应用对象的查找、配置和生命周期的管理,分离了业务与基础服务中的不同关注点,开发人员可以基于简单Java对象轻松的实现与EJB同样强大的功能。AOP经常被定义为一种编程技术,用来在系统中提升业务的分离,系统转载 2015-04-08 18:23:20 · 1106 阅读 · 0 评论 -
【设计模式之二:代理模式】代理模式(静态代理VS动态代理)
在阎宏博士的《JAVA与模式》一书中开头是这样描述代理(Proxy)模式的: 代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。代理模式的结构 所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代转载 2015-04-08 18:39:33 · 560 阅读 · 0 评论 -
【Java基础之内存管理】Java中栈内存与堆内存的区别
Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由new创建的对象和数组。在堆转载 2015-04-09 17:15:46 · 1036 阅读 · 0 评论 -
【Java基础之集合(三)】集合对象比较大小和比较重复的区别和不同实现
Comparable接口:针对排序list 问题:上面的算法根据什么确定容器中对象的“大小”顺序?所有可以“排序”的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法Publicint compareTo(Object obj)返回0:表示this==obj返回正数:表示this>obj返回负数:表转载 2015-04-09 16:47:02 · 4368 阅读 · 0 评论 -
【Java基础之集合(一)】各种常用集合(Array、ArrayList、HashSet、HashMap、TreeMap等)分析对比
Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。 实现类:8个实现类(实线表示),对接口的具体实现。 在很大程度上,一旦您理解了转载 2015-04-09 15:49:27 · 1515 阅读 · 0 评论 -
【Java基础之String、StringBuilder、StringBuffer】Java中的String、StringBuilder以及StringBuffer的区别
相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方。精炼总结:(1)String对象值是不可追加的,StringBuilder和StringBuffer对象值是可追加的。(2)StringBuffer是线程安全的,StringBuilder是不安全的。(3)String、StringBuilder、StringBuff转载 2015-04-09 16:59:44 · 552 阅读 · 0 评论 -
【Java基础之集合(二)】Java中HashMap详解
HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。 通过 HashMap、H转载 2015-04-09 16:37:39 · 346 阅读 · 0 评论 -
【算法之常用排序算法(二)】常用排序算法性能比较,及常见面试题
各种排序方法的性能比较:排序法平均时间最坏情况最好情况稳定度额外空间备注1.直接插入O(n2)O(n2)O(n)稳定O(1)大部分已排序时较好(简单)1.希尔O(nlogn)转载 2015-04-09 17:29:43 · 1321 阅读 · 0 评论 -
【Java基础之多态中静态方法重写问题】java中静态方法的重写问题详解
多态:通过父类变量可以引用其子类对象,从而调用子类中那些继承自自己并被重写(覆盖)的方法。首先来看看以下程序将会打印出什么:class Dog { public static void bark() { System.out.print("Woof "); }}class Basenji extends Dog { public static原创 2015-04-09 15:08:25 · 1716 阅读 · 0 评论 -
【Java基础之finally和return】有return的情况下try catch finally的执行顺序
结论:1、不管有没有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally转载 2015-04-09 14:20:10 · 506 阅读 · 1 评论 -
【Java基础之多维数组访问】访问多维数组时潜在的性能问题
[c-sharp] view plaincopyprint?boolean[][] b = new boolean[8000][1000]; long s = System.currentTimeMillis(); for ( int i = 0; i for ( int j = 0; j b[j][i]转载 2015-04-09 15:31:10 · 658 阅读 · 0 评论 -
【Java基础之数据类型转换】数据类型自动转换和强制转换、及相关常见面试题(如return (short)x / y* 2; 的返回类型)
类型转换Java 语言是一种强类型的语言。强类型的语言有以下几个要求:变量或常量必须有类型:要求声明变量或常量时必须声明类型,而且只能在声明以后才能使用。赋值时类型必须一致:值的类型必须和变量或常量的类型完全一致。运算时类型必须一致:参与运算的数据类型必须一致才能运算。但是在实际的使用中,经常需要在不同类型的值之间进行操作,这就需要一种新的语法来适应这种原创 2015-04-09 14:51:28 · 4309 阅读 · 0 评论 -
【算法之动态规划(一)】动态规划(DP)详解
一、基本概念动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程原创 2015-04-14 17:09:20 · 39138 阅读 · 2 评论 -
【算法之数组(一)】求子数组最大和的解决方法详解
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。第一种方法:很容易想到的,就是使用双重循环:转载 2015-04-14 17:48:01 · 2596 阅读 · 0 评论 -
【算法之字符串(一)】KMP算法详解之上:适合初学KMP算法的朋友
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。也可参考KMP讲解视频: 十分钟详解KMP转载 2015-04-14 15:53:44 · 639 阅读 · 0 评论 -
【海量数据+高并发】网络高并发量解决方案
从总体上来看1.首先需要解决网络带宽和Web请求的高并发,需要合理的加大服务器和带宽的投入,并且需要充分的利用系统中软件、硬件的缓存机制,将能缓存的内容都进行缓存存储,减少计算层和存储层的压力。2.其次需要对业务服务器和业务支撑服务器进行合理的分层,并且采用并行计算和分布式算法对大量计算进行处理,并且在开发的过程中需要采用Java SDK中并发包(Concurrency)进行编码实现。转载 2015-04-02 11:39:29 · 6092 阅读 · 0 评论 -
【Java之Servlet(二)】servlet是单例多线程,以及多线程下如何保证线程安全
Servlet 单例多线程1、Servlet如何处理多个请求访问?答:Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例); 2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始原创 2015-04-22 16:45:26 · 4573 阅读 · 2 评论 -
【Java之Servlet(一)】Servlet生命周期与工作原理
一、Servlet生命周期1、Servlet生命周期分为三个阶段: (1)初始化阶段 调用init()方法在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始转载 2015-04-22 16:22:52 · 2052 阅读 · 0 评论 -
【Java之多线程(二)】(***重要***)Java多线程中常见方法的区别,如object.wait()和Thread.sleep()的区别等
1、Java中Thread和Runnable的区别???区别:在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:避免点继承的局限,一个类可以继承多个接口。适合于资源的共享联系:public class Thread extends Object implements Ru原创 2015-04-22 17:34:43 · 1931 阅读 · 0 评论 -
【SQL之查询】MySQL查询今天、昨天、上周、近30天、去年等的数据的方法
一、MySQL查询今天、昨天、上周、近30天、去年等的数据的方法:今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) 7天 SELECT * FROM 表名 where DA原创 2015-04-10 13:46:45 · 61934 阅读 · 5 评论 -
【Java基础之线程同步(二)】java线程同步:synchronized关键字,Lock接口以及可重入锁ReentrantLock
多线程环境下,必须考虑线程同步的问题,这是因为多个线程同时访问变量或者资源时会有线程争用,比如A线程读取了一个变量,B线程也读取了这个变量,然后他们同时对这个变量做了修改,写回到内存中,由于是同时做修改,就会导致修改的状态不一致.用一个实际的例子来说明线程同步的必要性:package cn.outofmemory.locks;public class LockDemo implemen转载 2015-04-10 13:09:51 · 461 阅读 · 0 评论 -
【Java基础之Object类(二)、线程同步(一)】Java中使用Object类的wait,notify,notifyAll做线程调度
我们知道java中的所有类的祖先都是Object,Object类有四个个方法wait(),wait(long timeout),notify(),notifyAll(),这四个方法可以用来做线程的调度或者说是线程的同步控制。wait() 方法用来控制当前线程停止执行,等待其他线程对此Object实例调用notify或者notifyAll方法之后再继续执行wait(long timeout)转载 2015-04-10 13:06:57 · 1358 阅读 · 0 评论 -
【Java基础之内部类】Java内部类作用和详解
一、 定义放在一个类的内部的类我们就叫内部类。二、 作用1、内部类可以很好的实现隐藏,因为 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以。2、内部类拥有外围类的所有元素的访问权限3、可是实现多重继承4、可以避免修改接口而实现同一个类中两种同名方法的调用。三、实例1.实现隐藏原创 2015-04-10 11:49:40 · 596 阅读 · 0 评论 -
【数据库之事务(一)】事务是什么,以及事务四个特性,以及事务并发问题和隔离级别
一.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。 二.事务的 ACID 事务具有四个特征:原子性(转载 2015-04-10 13:29:19 · 4164 阅读 · 0 评论 -
【Java基础之线程同步(三)】使用ReentrantLock Condition实现线程同步
java的java.util.concurrent.locks包内有Condition接口,该接口的官方定义如下:Condition factors out the Object monitor methods (wait, notify and notifyAll) into distinct objects to give the effect of having multip转载 2015-04-10 13:12:48 · 408 阅读 · 0 评论 -
【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
一、Object中所有方法简介:在根类Object中包含一下方法: clone();equals();finalize();getClass();[align=left][/align]notify(),notifyAll();hashCode();toString();wait();我们知道所有的类都是继承于Object,所以我们编写的类默认都具有这些方法,究竟这些方法做什么用,原创 2015-04-10 12:33:32 · 4160 阅读 · 0 评论 -
【NoSQL】NoSQL简介及常用的NoSQL数据库对比(Redis、MongoDB、HBase等)
NoSQL(Not Only SQL),泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。虽转载 2015-04-02 11:44:52 · 5808 阅读 · 0 评论 -
【Java之并发】ReentrantLock和synchronized区别
1、ReentrantLock和synchronized区别:相同:ReentrantLock提供了synchronized类似的功能和内存语义。 不同:1.ReentrantLock功能性方面更全面,比如时间锁等候,可中断锁等候,锁投票等,因此更有扩展性。在多个条件变量和高度竞争锁的地方,用ReentrantLock更合适,ReentrantLock还提供了Conditi原创 2015-04-22 17:19:06 · 1208 阅读 · 0 评论