![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Interviews
iteye_16074
这个作者很懒,什么都没留下…
展开
-
Java面试问题之三十八
请写出以下代码块的等价形式:[code="java"]public synchronized String pop(){ //some codes}[/code]答:上述代码是一个同步代码块,它等价的写法如下:[code="java"]public String pop() { synchronized(this){ ...原创 2011-09-25 21:39:13 · 51 阅读 · 0 评论 -
Algorithm 03 : 合并两个有序数组
[b][color=red]Question : Merge a sorted array of size n into another sorted array of size m+n.[/color][/b]问题:合并两个有序的数组,将一个长度为n的数组插入到指定的长度为m的数组中。[code="java"]/** * @author YuHuang * @...原创 2011-10-04 13:32:33 · 73 阅读 · 0 评论 -
Algorithm 04 : 寻找两个有序数组中的第N个数,要求时间复杂度为O(logm+logn)
Question : Give a divide and conquer algorithm for the following problem : you are given two sorted lists of size m and n, and are allowed unit time access to the...原创 2011-10-04 21:32:42 · 965 阅读 · 0 评论 -
判断一个数是否是2的幂的快速方法
使用Java语言编写程序来判断一个整数是不是2的阶次方数,要求使用尽量快速简便的方法。答:如果一个数是2的阶次方数,那么它的二进制数的首位一般是1,后面接若干位0。比如8就是1000,64是1000000。如果将这个数减1再与该数做&运算,则应该全部位都是0。所以如果一个数d,满足d&(d-1)==0,则这个数必定是可以被2的幂整除的数。[code="java"]import ...原创 2011-10-08 11:35:13 · 208 阅读 · 0 评论 -
C++面试问题之一
请定义一个宏,比较两个数a、b的大小,不能使用大于、小于和if语句。答:使用两个数的差值和与运算来判断这两个数的大小。[code="C++"]#include #include using namespace std;#define MAX(a,b) (((long)(a-b))&0x80000000)?b:a;int main(in...原创 2011-10-10 19:25:10 · 72 阅读 · 0 评论 -
Algorithm 05 : 给定一个数组,寻找第K大的数
给定一个无序数组,求数组中第K大的数。答:求一个数组中第K大数可以借用快速排序算法的思想,主要思路如下: (1)在数组中随机选择一个数作为支点。 (2)将比作为支点数大的所有数放在这个支点的左边,支点放在数组中间的位置。 (3)设支点左边元素的个数为L,那么可以分以下三种情况: (a)当K=L的时候,直接返回支点即是所...原创 2011-10-11 13:44:20 · 171 阅读 · 0 评论 -
Java实现一个简单的BitArray
在处理大数据的排序的时候,位图是经常使用的一种数据结构,在JDK中已经提供了现成的BitSet类,但是如果需要做一些比较简单的应用且能够有效控制程序的效率,还是使用数组实现一个简单的BitArray吧。以下是一个简单BitArray的实现,没有考虑线程安全的问题,适合在不需要多线程并发的情况下使用。[code="java"]import java.lang.IllegalArgumen...原创 2011-10-12 12:59:27 · 876 阅读 · 0 评论 -
互联网公司面试题之十二
问题:五连击数组[BAIDU]:在任意一个数组当中,若你能找出有五个以及五个以上的连续元素时,我们就称它为五连击数组。但是这种数组并不是视场会有,你的任务就是通过增加最少的元素,使一个数组成为一个五连击数组。输入要求:每个测试文件包括多个测试案例,每个测试案例包括两行。第一行代表输入的元素个数N,其中0a[i]; sort(a,a+n,compare); for(m=5,i=0...原创 2012-01-24 13:33:23 · 104 阅读 · 0 评论 -
年龄最小的3个职工
问题:职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。输入:----------------------------------------------------------------输入第一行包括1个整数N,1...原创 2012-02-13 16:09:07 · 152 阅读 · 0 评论 -
最大子序列和
[color=green]问题:[/color]给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。对于S的所有非空连续子序列T,求最大的序列和。变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。输入:第一行为一个正整数N,第二行为N个整数,表示序列中的数。输出:输入可能包括多...原创 2012-02-15 14:06:49 · 158 阅读 · 0 评论 -
Output the k-th Prime Number
问题:输出第k个素数(1原创 2012-02-17 18:23:41 · 466 阅读 · 0 评论 -
Algorithm 02 : 以K个元素为一组逆转链表
[b][color=red]Question : Reverse a Linked List in groups of given size K.[/color][/b]问题:以K个元素为一组逆转链表。[code="java"]/** * @author YuHuang * @vision 2011-10-03 * This program is only f...原创 2011-10-03 22:29:29 · 70 阅读 · 0 评论 -
Algorithm 01 : 寻找最长有序子序列
[b][color=red]Question : To find max sorted contiguous subsequence of an Array.[/color][/b]问题:查找数组中的最长有序子序列。[code="java"]/** * @author YuHuang * @vision 2011-10-03 * This program ...原创 2011-10-03 15:55:27 · 112 阅读 · 0 评论 -
Java面试问题之三十九
请说说你对Java线程同步机制的理解,Java线程同步都哪些特征。答:Java线程同步机制能够确保线程之间能够保持同步,所谓线程之间的同步,是指不同线程在执行同一个对象的同步代码块时,因为要获得这个对象的锁而相互牵制。Java线程同步的主要特征有:(1)如果一个同步代码块和非同步代码块同时操作共享资源时,仍然会造成对共享资源的竞争。因为当一个线程执行一个对象的同步代码块时,其他线程...原创 2011-09-25 22:09:09 · 82 阅读 · 0 评论 -
Java面试问题之四十
请问一个线程安全的类必须满足几个条件,这些条件分别是什么?答:要设计一个满足线程安全的类一般需要满足以下三个条件: (1)这个类的对象可以同时被多个线程安全地访问。 (2)每个线程都能正常执行原子操作,等到正确的结果。 (3)在每个线程的原子操作都完成之后,对象处于逻辑上合理的状态。 另外,不可变类总是线程安全,不需要对这样的类进行特别的限...原创 2011-09-25 22:55:16 · 71 阅读 · 0 评论 -
Java面试问题之四十一
请问Java提供了哪些常用的线程安全的类,在一个可变类中采用什么措施可以降低因保证线程安全而损失的并发性能。答:所谓的线程安全就是不需要手动添加同步方法或者同步块来保证线程的同步,一般线程安全类都包含了同步的方法或者同步代码块,所以耗费了很多的系统性能。在非必要的情况下,一般尽量避免使用线程安全类,以提高系统的性能。Java中提供常用的线程安全类有:(1)Vector(向量类)...原创 2011-09-26 11:02:13 · 66 阅读 · 0 评论 -
Java面试问题之四十二
请问在Java多线程运行环境中,在哪些情况下会使对象锁释放?答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:(1)执行完同步代码块,就会释放锁。(2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(3)在执行同步代码块的过程中,执行了锁所属对象的wai...原创 2011-09-26 11:18:56 · 92 阅读 · 0 评论 -
Java面试问题之四十三
请问Java有哪些方法用于线程的通信?答:java.lang.Object类中提供了两个用于线程通信的方法: (1)wait()方法,执行该方法的线程释放对象的锁,Java虚拟机把该线程放到该对象的等待 池中。该线程等待其他线程将它唤醒。 (2)notify()方法,执行该方法的线程唤醒在对象的等待池中等待的一个线程。Java虚拟机 ...原创 2011-09-26 22:59:42 · 76 阅读 · 0 评论 -
Java面试问题之四十四
请写出下面程序的运行结果,并分析运行的过程。[code="java"]import java.util.*;public class MachineInterruptedException extends Thread { private int a = 0; private Timer timer = new Timer(true);...原创 2011-09-27 17:48:28 · 71 阅读 · 0 评论 -
Java面试问题之四十五
请问Java中都提供了哪些控制线程的方法?答:Thread类中提供了以下几个控制线程的方法: (1)start()方法,这个方法用于启动线程。 (2)suspend()方法,使线程暂停方法。 (3)resume()方法,使暂停的线程恢复运行的方法。 (4)stop()方法,终止线程的方法。 但是,从JDK 1.2开始,除了st...原创 2011-09-27 21:06:29 · 65 阅读 · 0 评论 -
Java面试问题之四十六
请问在Java中notify()和notifyAll方法有什么区别?答:Java中notify()和notifyAll()方法的主要区别在于:notifyAll()方法会使原来在某个对象等待池中的线程全部退出wait状态,进入该对象的锁池中,一旦该对象的锁被释放,它们会竞争获取对象的锁。相比之下,notify()方法只会随机选择一个处于wait状态的线程进行唤醒,使这个线程进入该对象的锁池...原创 2011-10-01 12:43:10 · 62 阅读 · 0 评论 -
Java面试问题之四十七
请问如何才能安全地使线程暂停、恢复运行和停止,谈谈你的想法并举例说明。答:虽然在Java中的Thread类中分别提供了使线程暂停(suspend()方法)、恢复运行(resume()方法)以及停止(stop()方法)的方法,但是使用这些方法会产生如下两点风险:(1)容易造成死锁。(2)一个线程强制中断另一个线程的运行,会造成另一个线程操作的数据停留在逻辑上不合理 的...原创 2011-10-02 14:35:50 · 79 阅读 · 0 评论 -
Java面试问题之四十八
请简述一下Java中线程组的特性。答:Java中的ThreadGroup类表示线程组,它能够对一组线程进行几种管理。用户创建的每个线程均属于某个线程组。线程组具有以下几点特性:(1)一旦线程加入某线程组,该线程就一直存在与该线程组直至线程死亡,不能在中途改变线程所属的线程组。假定线程A创建了线程B,如果创建线程B时没有在构造方法中执行线程组,那么线程B会加入到线程A所属的线程中。...原创 2011-10-02 15:46:10 · 61 阅读 · 0 评论 -
寻找最长的合法括号序列
问题:假如给你一个由’(‘和’)’组成的一个随机的括号序列,当然,这个括号序列肯定不能保证是左右括号匹配的,所以给你的任务便是去掉其中的一些括号,使得剩下的括号序列能够左右括号匹配且长度最长,即最长的合法括号序列。输入:测试数据包括多个,每个测试数据只有一行,即一个随机的括号序列,该括号序列的长度保证不超过10的6次方。输出:对于每个测试案例,输出一个整数,表示最后剩下的最长合...原创 2012-02-27 11:50:00 · 411 阅读 · 0 评论 -
如何实现数组的高效移位算法
问题:编写一个能够支持数组快速移位的算法,时间复杂度在O(N)以内。答:要实现在线性的时间内实现数组的快速移动,就要考虑如何使用逆序算法来达到移动的目的。例如,我要移动的数组元素称为A,剩余的部分称为B,那么原来次序为AB,如何变成BA呢?其实根据倒置的算法是可以实现移位操作的,我们先取A'为A的逆序序列,B'为B的逆序序列,进行(A'B')'操作即可得到BA序列。实现算法如下:[...原创 2011-11-03 13:00:14 · 593 阅读 · 0 评论 -
将一个整数拆分成两个整数的平方和算法
问题:请使用C/C++写一个程序实现将一个整数拆分成两个整数的平方和,把所有的可能的组合都要计算出来。答:假定输入的整数为n,则扫描1-(n的平方根)之间的整数,令row=1,column=(int)(sqrt((double)given)+0.5),使得row*row+column*column=n的数输出即可。代码如下所示:[code="C++"]//// ...原创 2011-11-03 15:26:42 · 4075 阅读 · 0 评论 -
Java面试问题之五十七
问题:在Java垃圾收集机制中的Minor GC和Full GC分别指什么,有和不同?答:Minor GC是指新生代GC,是发生在新生代的垃圾收集动作,因为Java对象大多都具有“朝生夕灭”的特性,所以Minor GC非常频繁,一般回收速度也比较快;Full GC(也称为Major GC)是指老年代的GC,Full GC的速度一般会比Minor GC慢10倍以上。相关知识扩展:...原创 2011-11-17 20:11:15 · 95 阅读 · 0 评论 -
Java面试问题之五十八
问题:Java虚拟机是如何判断哪些对象应该放在新生代,哪些对象应该放在老年代中,提供何种机制来实现?答:Java虚拟机一般采用分代的思想来内存的,为了确定一个对象年龄(Age),虚拟机给每个对象都引进了一个对象年龄计数器。如果对象在Eden出生并经过第一次Minor GC后仍然存活,并且能够被Survivor容纳的话,将被移动到Survivor空间中,并将对象的年龄设定为1。对象在Su...原创 2011-11-18 14:29:11 · 95 阅读 · 0 评论 -
Java面试问题之五十九
问题:Java虚拟机中采用了哪些垃圾回收的算法?请简要说明。答:JVM中垃圾回收算法主要分为四种: (1)标记-清除算法(Mark-Sweep Algorithm):算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后同一回收掉所有被标记的对象。这个算法主要有两个缺点:第一个是效率问题,标记和清除过程的效率都不高;另外一个是空间问题,标记清除之后产生大...原创 2011-11-22 10:52:53 · 72 阅读 · 0 评论 -
Java面试问题之六十
问题:请列举一些常用的JDK监控和故障处理的工具,并说明这些工具的作用。答:在日常监控和故障排除工作中,我们常常使用以下几个小工具: (1)jps:即JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。 (2)jstat:即JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行...原创 2011-11-22 14:52:16 · 99 阅读 · 0 评论 -
疯狂的JobDu序列
[b][color=red]问题[/color]:[/b]阳仔作为OJ的数据管理员,每一周的题目录入都让其很抓狂,因为题目不是他出的,他控制不了出题的速度……在等题目的时候,阳仔又不敢出去打篮球,所以只能在纸上乱涂乱写,这天,阳仔在纸上写下了这样的序列:1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 ……即大小为k的数字,正好会在序列中连续重复k...原创 2012-03-07 15:10:46 · 177 阅读 · 0 评论 -
陈博的完美主义
[b][color=red]问题:[/color][/b]在JOBDU团队里,陈博是最讲平均主义的人,对数字十分敏感。事实上,他还是个数字完美主义者。例如看到N个数字的时候,从1到N的每个数都需要在其中出现且仅出现一次,否则他就觉得这个数字序列不完美。后来,我明白了:这是排列!对于一个整数序列d1, d2, d3 ... dn,你是否能够算出至少改变其中的几个数,才能把他们变成从1到N的一个排...原创 2012-03-08 10:31:43 · 132 阅读 · 0 评论 -
百度面试题——简单运算
问题:要求不使用+ - * / < >运算符号判定给定两个非零数的大小。输入:多组输入两个数a和b。输出:输出min=较小的数字,max=较大的数字实现代码:[code="C"]#include int main(int argc,char* argv[]){ int a,b; for(;~scanf("%d%d",&a,&b);){ ...原创 2012-03-17 15:52:56 · 147 阅读 · 0 评论 -
Algorithm 06:删数问题
问题:键盘输入一个高精度的正整数N(N原创 2011-11-30 12:16:26 · 113 阅读 · 0 评论 -
Java面试问题之六十一
问题:请你编写一个方法来判断一个整数是否是一个守形数,如果是输出"YES",否则输出"NO"。要求尽可能地简单和快速。答:代码如下:[code="java"]import java.lang.Math;public class KeepFormatNumber { public static String doJudge(int n) { ...原创 2011-11-30 16:04:03 · 68 阅读 · 0 评论 -
互联网公司面试题之一
问题:对给定的字符串(只包含'z','o','j'三种字符),判断它是否能AC。判断是否能够AC的规则如下:(1)zoj能AC;(2)若字符串形式为xzojx,则也能AC,其中x可以是N个'o'或者为空;(3)若azbjc能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空。答:实现代码如下:[code="C++"]#include #i...原创 2011-12-04 23:26:39 · 82 阅读 · 0 评论 -
Java面试问题之五十六
[百度面试问题之三]:请谈谈你对Java垃圾收集器中并行和并发概念的理解。答:并行和并发这两个概念都是编程中的概念,在垃圾收集器的上下文语境中,我们应该这样理 解: (1)并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 (2)并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能...原创 2011-11-17 12:11:01 · 90 阅读 · 0 评论 -
Java面试问题之五十五
[百度面试题问题之一]:请分析一下Java的垃圾回收机制中对方法区的回收过程,在何种条件下才会触发GC对方法区进行回收工作。答:所谓的方法区也就是HotSpot虚拟机中的永久代,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集机制,而且在方法区回收的“性价比”一般比较低;在堆中,尤其是在新生代中,常规应用进行一次垃圾收集可以回收70%~95%的空间,而永久代的垃圾收集效率远...原创 2011-11-16 15:30:40 · 91 阅读 · 0 评论 -
给定一个整数数组,检测是否存在一个和为零的子数组
问题:给定一个整数数组,写一个算法实现判断是否存在一个和为零的子数组。答:算法思路:计算数组的前缀和,然后将前缀和进行排序,如果存在连续两个元素相同的情况即存在一个和为零的子数组,否则不存在。算法的代码实现:[code="C++"]//// main.cpp// MyProjectForCPP//// Created by labuser on...原创 2011-11-03 16:22:31 · 304 阅读 · 0 评论 -
筛除数组中重复的元素
问题:编写一个程序实现筛除数组中重复元素功能。算法思路:基于简单的想法,先把数组排序,然后扫描整个数组跳过重复的元素。算法的效率取决于排序算法的效率。算法实现:[code="java"]//// main.cpp// MyProjectForCPP//// Created by labuser on 11/2/11.// Copyrigh...原创 2011-11-03 21:12:15 · 144 阅读 · 0 评论