笔试面试
文章平均质量分 50
imzoer
Tencent mason
展开
-
第一个只出现一次的字符
google笔试题。一开始没有理解清楚题意。奇怪。多看算法题目会好一点吧。题目要求:只出现一次的字符,而且是第一个。那么第一次遍历所有字符,放入hashmap,第二次遍历的时候,第一个次数为1的就是所求。代码:package static_;import java.util.HashMap;public class CopyOfTest { public原创 2012-10-08 16:58:48 · 1284 阅读 · 0 评论 -
数据挖掘相关
文本聚类(Text clustering)文档聚类主要是依据著名的聚类假设:同类的文档相似度较大,而不同类的文档相似度较小。作为一种无监督的机器学习方法,聚类由于不需要训练过程,以及不需要预先对文档手工标注类别,因此具有一定的灵活性和较高的自动化处理能力,已经成为对文本信息进行有效地组织、摘要和导航的重要手段,为越来越多的研究人员所关注。 聚类是对数据对象进行划分的一种过程,与分类不原创 2012-10-07 21:47:45 · 2328 阅读 · 0 评论 -
一致性哈希机器在分布式中的作用
哈希算法是根据hash值将不同的value映射到相应的位置的过程。那么在分布式中,【比如memcached】,需要将不同的缓存对象按照相应的hash算法映射到相应的机器上去,那么当添加一台机器或者是其中某一台机器宕机之后,如果按照最原始的key%n的形式来做hash的话,需要将缓存清空,然后重新将内容映射到所有的机器上,这样的代价是巨大的。于是粗线了一致性哈希。简单来说,一致性哈希将整个哈原创 2012-10-09 19:43:29 · 6772 阅读 · 0 评论 -
yy一面
最难的问题:你项目中遇到什么难题没?怎么克服的?刚刚想了下,还是有难点的。四航院的填充算法就算是难点。一开始是用三叉树来实现的,发现效率很低,然后用人脑思考的方式来计算,效率提升了百倍以上。原创 2012-10-10 22:47:56 · 897 阅读 · 0 评论 -
带Max函数的队列
编程之美上的一个题目。感觉上面用数组的方法不是很好理解。于是自己写了一下。也是用了两个栈来维护一个队列。同时又多出两个栈,分别维护之前两个栈里面的最大值。然后求Max函数的时候,值需要返回后两个栈的的最大值即可。看代码:package a;import java.util.Stack;public class Test1 { public static void原创 2012-10-15 09:45:38 · 1063 阅读 · 0 评论 -
两段有序数组原地归并
假设数组是1,3,5,14,15,20,21,22,6,8,10,11,12,16,18,19请用O(1)的时间将数组归并成有序数组。这个题目最基础的想法就是把后面的数据每次一个的插入到前面已经有序的数组中。优化点在于在前面查找插入位置的时候可以用二分查找。那么这个方法最快也是O(nlogn)的。有没有更快的算法呢?看下面的思路:既然从后半数组中找一个数插入到前面去,这种方法比原创 2012-10-15 20:56:26 · 1441 阅读 · 0 评论 -
计算字符串的相似度
编程之美223页的题目。如果他们的第一个字符相同,那么计算接下来的字符串的距离。如果他们的第一个字符不同,那么1、删除a的第一个字符,计算a接下来的字符串和b的距离2、删除b的第一个字符,计算b接下来的字符串和a的距离3、修改a的第一个字符为b的第一个字符,计算a接下来的字符串和b接下来的字符串距离4、修改b的第一个字符为a的第一个字符,计算a接下来的字符串和b接下来的字符原创 2012-10-16 15:12:24 · 822 阅读 · 0 评论 -
不用随机数的洗牌算法
假设数组长度是54【54张牌】那么,如如果是用随机数的算法,就取两个随机数a和b,然后交换ab的位置,如此反复n次。这个思路的坏处是,随着n的增大,洗牌效果会变好。但是n的次数不好确定到底是多少。如果不用随机数,那么可以这样来考虑:伪随机数。关于伪随机数,我们可以用时间来生成。比如在java中,有一个System.currentMil...的一个函数,我们可以用它来生成一个随机数【原创 2012-10-16 13:10:04 · 2277 阅读 · 0 评论 -
扑克牌的“顺子”
连续的五张被称为顺子。两个鬼可以当做任意的牌来用。其他牌记做1,2,3,,,13。给定任意的五张牌,判断周五张牌是不是顺子。我的思路:申请一个长度为14的数组,分别代表1,2,3,,,13,和鬼。数组初始化为0。那么,每次给定五张牌的时候将这五张牌“散列”到数组中,数组的值置为1。从前到后遍历数组,找到第一个1,从后到前遍历数组,找到除了鬼之前的第一个1,然后这两个位置相减原创 2012-10-16 21:20:39 · 1431 阅读 · 1 评论 -
求数组中两个元素差的最大值
找到最大值找到最小值,然后相减即可。1、如果是说,前面的减去后面的,差的最大值?2、如果是说,后面的减去前面的,差的最大值?这两个问题就不一样了。基础的想法可以用暴力。但是有更好的方法。针对1,从后往前遍历数组,记录遍历过的数组元素的最小值,用当前元素相减。针对2,从前往后遍历数组,记录遍历过的数组元素的最小值,用当前元素相减。原创 2012-10-16 11:20:38 · 5604 阅读 · 0 评论 -
网络地址
1. A类IP地址 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。2. B类IP地址 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的原创 2012-10-18 00:21:21 · 872 阅读 · 0 评论 -
一个数组中除了三个数字,其余数字都出现两次,求出这三个数字
比如,1,2,3,1,2,3,4,5,6。在这个数组中,456出现了一次,123出现了两次。那么我们的目的就是求出456。首先我们可以想到的是,这个数组绝对是有奇数个元素的。那么我们可以根据不同的bit的值【不是1就是0】,将数组分成两个数组。第一个数组该bit为1,记该数组的元素个数为count1,第二个该bit为0,记该数组的元素个数为count0。那么,先判断count1和cou原创 2012-10-17 21:43:30 · 3290 阅读 · 1 评论 -
Java序列化
http://www.java3z.com/cwbwebhome/article/article8/862.html讲的很好。序列化算法一般会按步骤做如下事情:◆将对象实例相关的类元数据输出。◆递归地输出类的超类描述直到不再有超类。◆类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值。◆从上至下递归输出实例的数据。这里需要对上面四点好好理解一下。“类描原创 2012-10-19 16:54:51 · 1611 阅读 · 0 评论 -
Memcached深入2
准备面新浪。好好看下memcached。memcached的特点?如下:memcached的协议是基于文本的,而不是基于复杂的xml的。基于libevent的事件处理,即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个库,因此在linux、BSD、solaris的操作系统上能发挥其高性能。在将不同的 key分散到不同的服务器上的时候,可以根据key原创 2012-10-23 20:06:58 · 836 阅读 · 0 评论 -
apache+tomcat集群
apache+tomcat集群。有时间的时候搭建一下。原创 2012-10-24 00:14:19 · 725 阅读 · 0 评论 -
百度面试回忆
1、Java中hashmap的实现。参考这里2、tb_report(id,reportname,status,cust_id),在这个表中,统计出每个customerstatus为0,1,2的report的个数。要求的显示结果:cust_id,0,1,2的个数这个题目是一个翻转列的sql。这个题目之前没写过。现在总结下:selectcust_id,sum(case wh原创 2012-10-24 21:07:20 · 1279 阅读 · 0 评论 -
JVM虚拟机--点点滴滴
1、class文件中,字段表集合中,不会出现父类或者接口中继承而来的字段,但是有可能会列出原来代码中不存在的字段,比如在内部类中,为了保持对外部类的访问性,会自动添加指向外部类实例的字段。2、java语言中,不允许存在两个同名的字段。但是在class文件中,只要两个字段的描述符不一样,那么重名就是合法的。原创 2012-10-02 22:41:16 · 561 阅读 · 0 评论 -
Java类加载的时机
类是什么时候初始化的?类初始化的时候会执行static块,这个是我们知道的。那么我们可以用static块来做个实验。上面代码输出是:hello worldinitthis is a test这说明了什么?在调用TR.hello_world的时候,类并没有初始化!而是在调用其方法test的时候才初始化的。这是因为在编译的时候,常量(static final 修饰的)会原创 2012-10-03 17:05:16 · 8785 阅读 · 6 评论 -
JAVA匿名类
外部不能调用匿名类内部的方法。匿名类用的最多的地方就是在javaFrame中,给某一个窗体控件,比如说是一个按钮,添加一个Listener了。添加Listener的代码如下:匿名类和普通类的区别在于,匿名类在声明之处通过new来创建一个对象,然后该类就不能再被使用了。普通类可以在想要使用的地方再次使用。原创 2012-09-24 09:48:52 · 811 阅读 · 0 评论 -
计数排序的思想
计数排序是非比较的排序算法,能达到o(n)的排序时间复杂度。但是计数排序,有一个前提:必须知道待排序序列中所有元素的范围,min~max,这样才能构造一个数组【用于存放每一个元素出现了多少次】。前段时间雅虎的笔试题中,就有一个题目用到了计数排序的思想。题目是:给定一个字符串src,给定一个字符串s,给字符串src排序,要求其中的字母在s中的,要排在整体拍过序的字符串的前面【还是按照原创 2012-10-07 14:08:48 · 1158 阅读 · 0 评论 -
Java中finally的执行时机
finally是在catch执行之后return之前执行的。那么,如果在finally中改变了catch中要返回的对象,那么,返回值改变了吗?看代码:上面代码输出是3,说明finally中的改变对catch中的返回值产生了影响。再看下面代码:奇怪的是,上面的代码输出的竟然是2。原因还是稍微深奥的。解释下:这里面,涉及到一个栈帧的问题。在catch中执行的原创 2012-10-03 13:50:25 · 11165 阅读 · 0 评论 -
Java接口
1、接口中,属性必须明确赋初值。2、接口中的属性比如说int a;,默认的修饰符是public static final。3、接口里方法只有public和abstract两个修饰符。默认就是public abstract,不接受诸如private等的修饰符。4、接口里面的方法不能有static修饰符。原创 2012-10-03 21:09:35 · 712 阅读 · 0 评论 -
java单例模式的7种写法
http://www.cppblog.com/biao/archive/2010/12/17/136695.html很不错。懒汉(2种,线程安全和线程不安全),饿汉(classloader,和static块变种),双重校验锁,枚举和静态内部类。几种之间的区别就是为了避免不同环境下的缺陷。下面就枚举类型的单例模式说明:package com.zoer.src;public e原创 2012-04-23 23:43:33 · 2218 阅读 · 0 评论 -
阿里巴巴-心里的一座山
从找工到现在,一共面了三次阿里巴巴。无一中的。------------------------------------------------------三次机会都把握不住,也没什么怨言了。这次问到的问题:1、如果让你改进mysql,有什么想法?2、dba和开发dba的区别?3、自己的特别的地方。4、自己提到的多级索引的概念。5、对事务的理解,到什么程度?6、对原创 2013-01-28 19:38:47 · 3522 阅读 · 4 评论 -
数据库死锁的预防与解除
数据库死锁!!今天面的工行,传说中的只问项目不问技术,但是被问了这么深入的问题。是RP不行啊。死锁发生的条件:1、资源不能共享,需要只能由一个进程或者线程使用2、请求且保持,已经锁定的资源自给保持着不释放3、不剥夺,自给申请到的资源不能被别人剥夺4、循环等待---------------------------------------------------------原创 2012-10-11 14:30:26 · 18962 阅读 · 0 评论 -
Python如何创建一个模块?以及模块导入
昨天面试空管局的时候遇到了这个问题。当时回答的不是很理想。现在整理一下。python学习手册中写道:定义模块,只要使用文本编辑器,把一些python代码输入到文本中,然后以.py为后缀名进行保存,任何此类文件都会被认为是python模块。比如说,下面的代码输入到一个文件中,就可以看作是一个模块:def printme(var): print varif __name__ =原创 2013-03-05 10:41:38 · 49867 阅读 · 1 评论 -
中缀表达式转后缀表达式
中缀表达式和后缀表达式中缀表达式是我们人能够正常阅读的表达式。比如说a+(b*c-d)/e。后缀表达式中没有括号,比如上面式子的后缀表达式就是abc*d-e/+。看两个式子可以知道,表达式中,变量的出现次序是相同的。但是操作符的次序是不同的。在后缀表达式中,操作符的次序是真正进行操作的次序。将中缀表达式转换为后缀表达式的过程如下:要使用一个栈存放操作符,具体可以按照下面的方式进原创 2013-02-25 13:55:28 · 875 阅读 · 0 评论 -
高效斐波那契数列解法
教科书上写递归算法的时候,没有考虑效率。这里的代码考虑了将已经计算过的数据记忆下来,使用的时候直接查表。速度就快很多。这样的时间复杂度是O(n),空间复杂度也是O(n)。看代码:#include #include using namespace std;const int MAX = 100;__int64 fac[MAX] = {0};__int64原创 2013-02-25 14:22:48 · 1135 阅读 · 0 评论 -
java移位运算符
移位运算符的优先级是低于+和-的。所以,byte a = 5;int b = 10;int c = a>>2+b>>2;System.out.println(c);上面的这个操作的结果是0而不是3。-----------------------------------------------------------------看下图:图中,b--------原创 2013-02-25 15:15:10 · 1034 阅读 · 0 评论 -
红黑树
红黑树是满足一定条件的二叉树。其实并不是多么高深的数据结构。只要记得,红黑树和平衡二叉树,都是具有特殊性质的二叉树就可以了。在平衡二叉树中,插入了新节点,需要调整树以保证满足平衡条件【左右子树高度差不超过1】,那么红黑树在插入新节点之后,也需要调整以满足红黑树的一下条件:1、每个节点不是红色就是黑色。2、根节点为黑色。3、红节点的子节点必须是黑色。4、任一节点至NULL(树原创 2013-02-25 16:30:44 · 1370 阅读 · 1 评论 -
拓扑排序
拓扑排序是一个找入度为0的点的过程。凡是入度为0的点都可以加入已经排好序的列表中。看下图:首先找到入度为0的有0、1、3,然后每个点加入已排序列表之后,该点连接到的点的入度减一,如果减一之后入度变为0,那么加入已经排序的列表。以此类推。在这个flash中,有几种数据结构,可以很好的演示。其中一种就是这里的拓扑排序。【地址:http://www.cs.usfca.edu/~galle原创 2013-02-25 20:09:51 · 801 阅读 · 0 评论 -
Dijkstra算法
维基百科上写的还比较清楚。dj算法是求单源最短路径的算法。 function Dijkstra(G, w, s) for each vertex v in V[G] // 初始化 d[v] := infinity // 将各点的已知最短距离先设置成无穷大原创 2013-02-26 13:23:03 · 1135 阅读 · 0 评论 -
从Trie树说到后缀树
参考了july的文章。什么是Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3原创 2013-02-26 17:12:08 · 2880 阅读 · 0 评论 -
Java中ConcurrentHashMap学习
ConcurrentHashMap融合了hashtable和hashmap二者的优势。hashtable是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况下效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的正确性。但是hashtable每次同步执行的时候都要锁住整个结构。看下图:图左侧清晰的标注出来,lock每次都要锁住整个结构。Conc原创 2013-02-28 11:19:49 · 22323 阅读 · 0 评论 -
Java中实现Serializable接口为什么要声明serialVersionUID?
实现序列化接口Serialize的时候,如果不指定serialVersionUID 的值,编译时就会出现警告,为什么?什么情况下需要修改serialVersionUID 的值? 序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该原创 2013-02-27 20:28:20 · 6019 阅读 · 1 评论 -
Java中volatile的作用以及用法
找了很多资料,包括《java并发编程实战》,综合一下各家的说法就是:volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。也就是说,volatile变量对于每次使用,线程都能得到当前volatile变量的原创 2013-02-28 10:27:06 · 37492 阅读 · 11 评论 -
java实现生产者消费者模型
主要看一下这个链接。生产者消费者模型,主要的就是线程之间的同步。二者共享一个空间,在示例中就是那个pool。当生产者收到pool空的消息之后,就锁住pool,并且不断将生产的产品添加到pool。直到pool为满的时候,调用notifyAll通知消费者,并且生产者本身调用pool.wait()方法进行等待。当消费者收到pool满可以消费的实惠,也锁住pool,并且不断消费其中的产品。原创 2012-04-06 19:55:46 · 1004 阅读 · 0 评论 -
java序列化对象
TX的笔试,java的附加题是一道线程之间通信的问题。要求是:1线程之间不可相互访问对方的变量。2、可以访问公有的byte[]数组3 设计一个程序 使得两个线程A和B,A把一个对象告诉B,然后B把对象的值打印出来。咋一看貌似挺简单,但是涉及了对象的序列化与反序列化,线程之间的通信与同步。当时我的做法是,写了两个线程类A和B,一个ThreadPool类,A和B的实例创建都要放进ThreadP原创 2012-04-06 21:26:05 · 856 阅读 · 0 评论 -
一个数据库连接池的实现
大概能对连接池是怎么实现的有一个了解。import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.Driver;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;原创 2012-09-19 00:08:10 · 730 阅读 · 0 评论 -
Oracle面试
在深圳面了三面。第一面是一半中文一半英文。二三面都是英文。看起来应该是印度人。讲的英语不是很能听懂。听不懂的就让他写下来。面试官还是比较和蔼的。遇到了一个比较困难的问题。就是最大不连续子段和。在一个数组中,找到一组数,让这组数之和最大,前提条件是,找到的数不能有任何两个在原来的数组中是相邻的。这个题目如果以前没有接触过,还是比较难一时想出来的。如果是暴力的算法,那么时间复杂度是非常原创 2012-10-30 14:22:49 · 1095 阅读 · 0 评论