错误的地方:
一、4和5行,超出了byte类型的范围(-128~127);
二、全局整型变量x,y在声明时没有声明为static导致18,20,22行中用到变量x和y的地方都错了。不能在static块中引用非static成员。
三、check方法上可能看得出是返回一个boolean类型的变量,但是在程序中返回操作都放在了if语句块中,那么如果没有一个if语执行的话,就没有返回值了,所以应该加上一个默认的返回值。。。
四、28,29行错误,那两个变量都是final的,当然不能再改变其值了。。。。。。
五、32,35行的case处,用case时,必须返回一个常量,整型,或是枚举类型,修改方法有两个,(1)上面不是定义了这两个整型的值吗,直接case 0,case 1,(2)在上面的定义处,加上final.
不妥的地方:
一、定义角色横坐标,角色纵坐标变量时,最好放到方法里面,因为你的角色可能有多个实例,每个实例会有自己的坐标,而static不是属于某个实例的,而是属于整个整的。所有的角色只能共用一对坐标,感觉不妥啊。。。其他全局变量也一样,可以再细考虑一下。。
二、多加点注释,,别人可能不会看check方法里几个if是干什么的,费时间(各人观点)。
⑵ java程序员面试笔试宝典 怎么样
可以,里面内容齐全,基本上笔试面试遇得到的问题,上面都有,就好比是一个题库,你要把里面所有的题做一遍,这样笔试面试时就更有把握
⑶ 请问一下,有没有针对有经验的JAVA程序员面试的书籍呢,推荐一本吧,有电子书最好,万分感谢
JAVA程序员面试宝典,很实用,很多面试题在上面都能直接找到,有基础的话挑选一些自己不太清楚的看下,个人感觉很不错
⑷ 面试JAVA程序员最基本的面试题有哪些
java异常机制的原理与应用
答:每当程序出现异常之后,如果程序没有进行相应的处理,则程序会出现中断现象。
实际上,产生了异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句捕获的话,则可以进行异常的处理,否则,交给JVM进行处理。当try语句捕获异常之后,将与catch语句的异常类型进行匹配,如果匹配成功则执行catch内的语句。简单的应用:在所以throws语句的地方加入try-catch。标准应用:try-catch-finally-throw-throws一起使用。
2. 垃圾回收机制的优点
答:释放无用的对象所占用的空间。方式:自动回收,手动回收。使用System.gc(),实际上调用Runtime.getRuntime().gc()
3. Error与Exception区别
答:Error是jvm进行处理,是jvm出错
exception是可以由程序处理的,可以用try-catch捕获的
4. final,finally,finallize
答:final定义的变量的值不能改变,定义的方法不能被覆盖,定义的类不能被继承
finally是异常的统一出口,finallize是垃圾回收前的收尾工作,是Object类定义的
5. Anonymous Inner Class是否可以extends,是否可以implements Interface
答:允许继承和实现,因为匿名内部类就是在抽象类和接口的基础上发展起来的
6. Static Nested Class 与Inner Class的区别
答:使用Static定义的Class就是外部类,可以通过外部类. 内部类直接访问
而Inner Class是不能被外部访问的,只能通过外部类的实例再找到内部类实例。
7. HashMap and HashTable?
答:HashMap:1) released in jdk 1.2,new Class 2)采用异步处理方式,性能较高,是非线程安全的 3)允许null
HashTable:1)released in jdk 1.0 ,old Class 2)采用同步处理方式,性能低,是线程安全的3)不允许null
8. assert代表什么?
答:asserts是jdk 1.4之后发布的新关键字,表示断言,即程序执行到某个地方肯定是预计的值,一般开发很少使用。要使用assert,必须加上 -ea参数
9. gc是什么?
答:gc是garbage collection,垃圾回收,使用gc可以进行垃圾空间的释放
10. String s = new String("xyz")产生了几个对象?
答:一个匿名对象xyz,在栈空间内。一个new实例化的对象,在堆空间内。
11. sleep() and wait()?
答:sleep()是Thread类定义方法,表示线程的休眠,可以自动唤醒
wait()方法是Object类定义的方法,需要手动notify()和notifyAll()//sleep()不释放资源,wait()释放资源
12. java中存在goto,但不能使用
13.数组有没有length(),String有没有length()?
答:数组有length属性,String有length()
14. Overload与Override的区别
答:Overload:重载
|- 在一个类中定义的若干方法
|- 所有的方法名相同,但参数类型或个数不同
|- 只有参数有关,与返回类型无关
Override:覆写
|- 在继承的关系中
|- 子类定义了父类同名的方法,参数类型或个数最好完全一样。
|- 访问权限不能更严格
15. Set里的元素不能重复,用什么方法区分?==与equals()方法的区别
答:set里的元素是不能重复的,用iterator()方法来区分重复与否,==属于地址比较,
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true
16. 列出常见的 runtime exception
答:NumberFormatException/ArrayOutIndexofBoundException/NullPointerException/ClassCastException
17. abstract class 和 interface有什么区别?
答:抽象类:
|-由抽象方法和常量、变量、全局常量、构造方法、普通方法组成
|-使用abstract声明
|-子类要通过extends继承抽象类,子类如果不是抽象类,则必须覆写抽象类的全部抽象方法
|-存在单继承的局限
|-抽象类可以实现若干个接口
接口:
|-由抽象方法和全局常量组成
|-使用interface关键字
|-子类要通过implements实现接口,子类如果不是抽象类,则必须覆写抽象类的全部抽象方法
|-一个子类可以实现多个接口
|-接口不能继承一个抽象类,但允许继承多个接口
18. 启动一个线程要用start(),因为要通知jvm进行cpu资源的分配
19. try{}里面有一个return,问finally{}里面的代码是否执行,在什么时机执行?
答:finally{}里面的代码执行,在return之前。
20. 写一个singleton
答:singleton的核心就是构造方法私有化,Class,Runtime都采用单例
package com.leongod.demo;
public class Singleton(){
private static final sin = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return sin;
}
}
21. 程序设计:输入一组数字,然后排序输出
答:package com.leongod.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class IO {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一组数字,中间用空格分割:");
String str = buf.readLine();
Set<Integer> set = new TreeSet<Integer>();
String[] arr = str.split(" ");
for(String s : arr) {
if (s.matches("\\d+")) {
set.add(Integer.parseInt(s));
}
}
Iterator<Integer> it = set.iterator();
System.out.println("排序后的结果:");
while (it.hasNext()) {
System.out.print(it.next() + ",");
}
}
}
22.列出目录内的文件
package com.leongod.demo;
import java.io.File;
import com.sun.org.apache.xpath.internal.functions.FuncBoolean;
public class FileDemo {
public static void main(String[] args) {
?? File file = new File("D:" + File.separator + "kongkong");
?? fun(file);
}
public static void fun(File file) {
if (file.isDirectory()) {
File[] lf = file.listFiles();
if (lf != null) {
for(File f : lf) {
fun(f);
}
}
}else {
System.out.println(file.toString());
}
}
}
23. char可以存一个中文汉字吗?
答:可以,使用了unicode编码
24.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:两种多线程方法,继承Thread类,实现Runnable接口
|-Thread类是Runnable接口的子类
|-使用Runnable接口可以实现资源共享的目的
|-所有线程操作都必须通过Thread类的start()方法启动
两种实现同步的方法:
|-同步代码块:Synchronized(this)
|-同步方法
25.f=3.4是不对的,3.4默认是double类型的
26.String and StringBuffer?
答:String 不可以修改,StringBuffer可以修改
27.Class.forname向容器中加载驱动程序
28.int与Integer有什么区别?
答:int是基本数据类型,Integer是包装类
在jdk1.5以后,可以实现自动装箱和拆箱
29.2*8有效的方法是移位操作:2<<3
30.请说出类集框架的完整结构
答:类级框架的最大接口:Collection、Map、Iterator、Enumeration
Collection:存放单值
|-List:允许有重复内容
|-ArrayList:异步处理,新的操作类,非线程安全
|-Vector:同步处理,旧的操作类,线程安全,支持Enumeration
|-Set:不允许有重复的内容,依靠hashCode()和equals()进行重复的验证
|-HashSet:无序存放
|-TreeSet:有序存放,按Comparable排序
|-Map:存放一对值
|-HashMap:新的类,异步处理,非线程安全,允许有null
|-HashTable:旧的类,同步处理,线程安全,不允许有null
|-TreeMap:有序排列,按key配需
|-Iterator:迭代输出,依靠collection接口中的iterator方法输出,是新的输出标准
31.是否可以继承String类?答:不可以,因为使用了final关键字
⑸ 《程序员面试金典中文第6版》pdf下载在线阅读全文,求百度网盘云资源
《程序员面试金典中文第6版》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1dSQs_6cUiYZ1qE69hYHe1A
⑹ java程序员面试的问题
java面试题大全-基础方面Java基础方面:
1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现
3、Static Nested Class 和 Inner Class的不同
答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
4、&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
5、Collection 和 Collections的区别
答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
6、什么时候用assert
答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的
7、String s = new String("xyz");创建了几个String Object
答:两个,一个字符对象,一个字符对象引用对象
8、Math.round(11.5)等于多少? Math.round(-11.5)等于多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor
9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错
答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译)
10、Java有没有goto
答:java中的保留字,现在没有在java中使用
11、数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有length的属性。String有有length()这个方法
12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型
13、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
14、给我一个你最常见到的runtime exception
答:常见的运行时异常有如下这些ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
15、error和exception有什么区别
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况
16、List, Set, Map是否继承自Collection接口
答: List,Set是,Map不是
17、abstract class和interface有什么区别
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
18、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized
答:都不能
19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
20、构造器Constructor是否可被override
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
21、是否可以继承String类
答:String类是final类故不可以继承
22、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
答:会执行,在return前执行
23、用最有效率的方法算出2乘以8等于几
答:2 << 3
24、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
答:不对,有相同的hash code
25、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
26、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich
27、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
就HashMap与HashTable主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
28、char型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
29、GC是什么? 为什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
30、float型float f=3.4是否正确?
答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4
31、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│└Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射
32、抽象类与接口?
答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable 接口和 Comparator 接口
33、STRING与STRINGBUFFER的区别。
答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
34、谈谈final, finally, finalize的区别
答:final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)
finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
35、面向对象的特征有哪些方面
答:主要有以下四方面:
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
36、String是最基本的数据类型吗
答:基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
37、int 和 Integer 有什么区别
答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关
38、运行时异常与一般异常有何异同
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
39、说出ArrayList,Vector, LinkedList的存储性能和特性
答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
40、HashMap和Hashtable的区别
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
⑺ 求《给想当程序员的你:程序员面试宝典与进阶秘笈》全文免费下载百度网盘资源,谢谢~
《给想当程序员的你:程序员面试宝典与进阶秘笈》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1Gcf4hShyxSTgZu7ApSNqPA
⑻ 《Java程序员面试笔试宝典》之 什么是AOP
Aspect-Oriented Programming 面向切面编程。
笼统的理解可以认为是 在程序的某一个点上做一个切面,凡是经过该切面的逻辑都要遵守此切面定义的一些行为。
比方说, 一个楼上家家户户都有水管,但是这些水管必定是从一个总的管道接入的。这个时候我们对这个总管道进行了处理,例如在入水总管道上加一个过滤网,这样每家每户的水都是被这个过滤网过滤的,而不用为每家每户去假装一个过滤网。
⑼ 程序员面试笔试宝典的目录
前言
上篇 面试笔试经验技巧篇
第1章 面试官箴言 2
1.1 有道无术,术可求;有术无道,止于术 2
1.2 求精不求全 3
1.3 脚踏实地,培养多种技能 4
1.4 保持空杯心态 6
1.5 职场是能者的舞台 7
1.6 学会“纸上谈兵” 8
1.7 小结 8
第2章 面试心得交流 9
2.1 心态决定一切 9
2.2 假话全不说,真话不全说 10
2.3 走自己的路,让别人去说吧 12
2.4 夯实基础谋出路 14
2.5 书中自有编程法 15
2.6 笔试成绩好,不会被鄙视 17
2.7 不要一厢情愿做公司的备胎 18
2.8 小结 19
第3章 企业面试笔试攻略 20
3.1 互联网企业 20
3.2 网络设备提供商 25
3.3 外企 29
3.4 国企 32
3.5 研究所 35
3.6 创业型企业 37
3.7 如何抉择 41
第4章 面试笔试技巧 42
4.1 不打无准备之仗 42
4.1.1 如何获取求职信息 42
4.1.2 如何制作一份受用人单位青睐的简历 43
4.1.3 如何高效地网申简历 47
4.1.4 面试考查什么内容 48
4.1.5 霸王面合适吗 50
4.1.6 非技术类笔试如何应答 50
4.1.7 什么是职场暗语 51
4.1.8 如何克服面试中的紧张情绪 54
4.1.9 面试礼仪有哪些 55
4.1.10 面试需要准备什么内容 56
4.1.11 女生适合做程序员吗 57
4.1.12 程序员是吃青春饭的吗 58
4.1.13 为什么会被企业拒绝 58
4.1.14 如何准备集体面试 59
4.1.15 如何准备电话面试 61
4.2 从容应对 62
4.2.1 如何进行自我介绍 63
4.2.2 你对我们公司有什么了解 64
4.2.3 如何应对自己不会回答的问题 65
4.2.4 如何应对面试官的“激将法”语言 65
4.2.5 如何处理与面试官持不同观点的问题 66
4.2.6 如果你在这次面试中没有被录用,你会怎么办 66
4.2.7 如果你被我们录取了,接下来你将如何开展工作 66
4.2.8 你怎么理解你应聘的职位 67
4.2.9 你有哪些缺点 67
4.2.10 你有哪些优点 68
4.2.11 你没有工作经验,如何能够胜任这个岗位 69
4.2.12 你的好朋友是如何评价你的 69
4.2.13 你与上司意见不一致时,该怎么办 70
4.2.14 你能说说你的家庭吗 71
4.2.15 你认为自己最适合做什么 72
4.2.16 你如何看待公司的加班现象 72
4.2.17 你的业余爱好是什么 73
4.2.18 你和别人发生过争执吗?你怎样解决 74
4.2.19 你如何面对压力 74
4.2.20 你为什么离开了原来的单位 75
4.2.21 你为什么更倾向于我们公司 75
4.2.22 你觉得我们为什么要录用你 76
4.2.23 你的职业规划是什么 76
4.2.24 你对薪资有什么要求 77
4.2.25 你有什么需要问我的问题吗 77
4.3 签约这点事 78
4.3.1 风萧萧兮易水寒,offer多了怎么办 78
4.3.2 签约、违约需要注意哪些事项 78
4.4 小结 81
第5章 英文面试攻略 82
5.1 注意事项 82
5.2 英文自我介绍 83
5.3 常见的英文面试问题 85
5.4 常见计算机专业词汇 94
5.4.1 计算机专业相关课程 94
5.4.2 操作系统相关术语 95
5.4.3 算法相关术语 96
5.4.4 数据结构相关术语 97
5.4.5 计算机网络相关术语 100
第6章 智力题攻略 102
6.1 推理类 102
6.2 博弈类 107
6.3 计算类 109
6.4 作图类 111
6.5 倒水类 112
6.6 称重类 113
6.7 最优化类 114
6.8 IT思想类 115
6.9 过桥类 118
6.10 概率类 119
下篇 面试笔试技术攻克篇
第7章 程序设计基础 122
7.1 C/C++关键字 122
7.1.1 static(静态)变量有什么作用 122
7.1.2 const有哪些作用 124
7.1.3 switch语句中的case结尾是否必须添加break语句?为什么 127
7.1.4 volatile在程序设计中有什么作用 128
7.1.5 断言ASSERT( )是什么 129
7.1.6 枚举变量的值如何计算 130
7.1.7 char str1[] = abc; char str2[] = abc; str1与str2不相等,为什么 130
7.1.8 为什么有时候main( )函数会带参数?参数argc与argv的含义是什么 131
7.1.9 C++里面是不是所有的动作都是main( )函数引起的 132
7.1.10 *p++与(*p)++等价吗?为什么 132
7.1.11 前置运算与后置运算有什么区别 132
7.1.12 a是变量,执行(a++) += a语句是否合法 133
7.1.13 如何进行float、bool、int、指针变量与“零值”的比较 134
7.1.14 new/delete与malloc/free的区别是什么 135
7.1.15 什么时候需要将引用作为返回值 137
7.1.16 变量名为618Software是否合法 137
7.1.17 C语言中,整型变量x小于0,是否可知x×2也小于0 138
7.1.18 exit(status)是否跟从main( )函数返回的status等价 138
7.1.19 已知String类定义,如何实现其函数体 138
7.1.20 在C++中如何实现模板函数的外部调用 140
7.1.21 在C++中,关键字explicit有什么作用 140
7.1.22 C++中异常的处理方法以及使用了哪些关键字 141
7.1.23 如何定义和实现一个类的成员函数为回调函数 141
7.2 内存分配 142
7.2.1 内存分配的形式有哪些 142
7.2.2 什么是内存泄露 143
7.2.3 栈空间的最大值是多少 144
7.2.4 什么是缓冲区溢出 144
7.3 sizeof 146
7.3.1 sizeof是关键字吗 146
7.3.2 strlen( )=?sizeof( )=? 146
7.3.3 对于结构体而言,为什么sizeof返回的值一般大于期望值 148
7.3.4 指针进行强制类型转换后与地址进行加法运算,结果是什么 149
7.4 指针 150
7.4.1 使用指针有哪些好处 150
7.4.2 引用还是指针 150
7.4.3 指针和数组是否表示同一概念 152
7.4.4 指针是否可进行>、<、>=、<=、==运算 152
7.4.5 指针与数字相加的结果是什么 152
7.4.6 野指针?空指针 153
7.5 预处理 154
7.5.1 C/C++头文件中的ifndef/define/endif的作用有哪些 154
7.5.2 #include <filename.h>和#include “filename.h” 有什么区别 155
7.5.3 #define有哪些缺陷 155
7.5.4 如何使用define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 155
7.5.5 含参数的宏与函数有什么区别 156
7.5.6 宏定义平方运算#define SQR(X) X*X是否正确 156
7.5.7 不能使用大于、小于、if语句,如何定义一个宏来比较两个数a、b的大小 157
7.5.8 如何判断一个变量是有符号数还是无符号数 158
7.5.9 #define TRACE(S) (printf(%s
, #S), S)是什么意思 159
7.5.10 不使用sizeof,如何求int占用的字节数 160
7.5.11 如何使用宏求结构体的内存偏移地址 161
7.5.12 如何用sizeof判断数组中有多少个元素 162
7.5.13 枚举和define有什么不同 162
7.5.14 typdef和define有什么区别 162
7.5.15 C++中宏定义与内联函数有什么区别 164
7.5.16 定义常量谁更好?#define还是const 164
7.6 结构体与类 165
7.6.1 C语言中struct与union的区别是什么 165
7.6.2 C和C++中struct的区别是什么 165
7.6.3 C++中struct与class的区别是什么 166
7.7 位操作 166
7.7.1 一些结构声明中的冒号和数字是什么意思 166
7.7.2 最有效的计算2乘以8的方法是什么 167
7.7.3 如何实现位操作求两个数的平均值 167
7.7.4 unsigned int i=3;printf(%u
,i*-1)输出为多少 168
7.7.5 如何求解整型数的二进制表示中1的个数 169
7.7.6 不能用sizeof( )函数,如何判断操作系统是16位还是32位的 170
7.7.7 嵌入式编程中,什么是大端?什么是小端 171
7.7.8 考虑n位二进制数,有多少个数中不存在两个相邻的1 174
7.7.9 不用除法操作符如何实现两个正整数的除法 175
7.8 函数 179
7.8.1 怎么样写一个接受可变参数的函数 179
7.8.2 函数指针与指针函数有什么区别 179
7.8.3 C++函数传递参数的方式有哪些 183
7.8.4 重载与覆盖有什么区别 185
7.8.5 是否可以通过绝对内存地址进行参数赋值与函数调用 188
7.8.6 默认构造函数是否可以调用单参数构造函数 190
7.8.7 C++中函数调用有哪几种方式 191
7.8.8 什么是可重入函数?C语言中如何写可重入函数 192
7.9 数组 192
7.9.1 int a[2][2]={{1},{2,3}},则a[0][1]的值是多少 192
7.9.2 如何合法表示二维数组 193
7.9.3 a是数组,(int*)(&a+1)表示什么意思 193
7.9.4 不使用流程控制语句,如何打印出1~1000的整数 194
7.9.5 char str[1024]; scanf(%s,str)是否安全 197
7.9.6 行存储与列存储中哪种存储效率高 197
7.10 变量 197
7.10.1 全局变量和静态变量有什么异同 197
7.10.2 局部变量需要“避讳”全局变量吗 199
7.10.3 如何建立和理解非常复杂的声明 199
7.10.4 变量定义与变量声明有什么区别 200
7.10.5 不使用第三方变量,如何交换两个变量的值 201
7.10.6 C与C++变量初始化有什么不同 202
7.11 字符串 202
7.11.1 不使用C/C++字符串库函数,如何自行编写strcpy( )函数 203
7.11.2 如何把数字转换成字符串 205
7.11.3 如何自定义内存复制函数memcpy( ) 206
7.12 编译 207
7.12.1 编译和链接的区别是什么 207
7.12.2 编译型语言与解释型语言的区别是什么 208
7.12.3 如何判断一段程序是由C编译程序还是由C++编译程序编译的 208
7.12.4 在C++程序中调用被C编译器编译后的函数,为什么要加extern “C” 209
7.12.5 两段代码共存于一个文件,编译时有选择地编译其中的一部分,如何实现 210
7.13 面向对象相关 210
7.13.1 面向对象与面向过程有什么区别 210
7.13.2 面向对象的基本特征有哪些 211
7.13.3 什么是深复制?什么是浅复制 212
7.13.4 什么是友元 213
7.13.5 复制构造函数与赋值运算符的区别是什么 214
7.13.6 基类的构造函数/析构函数是否能被派生类继承 216
7.13.7 初始化列表和构造函数初始化的区别是什么 216
7.13.8 类的成员变量的初始化顺序是按照声明顺序吗 217
7.13.9 当一个类为另一个类的成员变量时,如何对其进行初始化 217
7.13.10 C++能设计实现一个不能被继承的类吗 218
7.13.11 构造函数没有返回值,那么如何得知对象是否构造成功 219
7.13.12 C++中的空类默认产生哪些成员函数 219
7.13.13 如何设置类的构造函数的可见性 219
7.13.14 public继承、protected继承、private继承的区别是什么 220
7.13.15 C++提供默认参数的函数吗 221
7.13.16 C++中有哪些情况只能用初始化列表而不能用赋值 222
7.14 虚函数 223
7.14.1 什么是虚函数 223
7.14.2 C++如何实现多态 225
7.14.3 C++中继承、虚函数、纯虚函数分别指的是什么 226
7.14.4 C++中的多态种类有哪几种 226
7.14.5 什么函数不能声明为虚函数 227
7.14.6 是否可以把每个函数都声明为虚函数 229
7.14.7 C++中如何阻止一个类被实例化 229
7.15 编程技巧 229
7.15.1 当while( )的循环条件是赋值语句时会出现什么情况 229
7.15.2 不使用if/:?/switch及其他判断语句如何找出两个int型变量中的最大值和最小值 230
7.15.3 C语言获取文件大小的函数是什么 231
7.15.4 表达式a>b>c是什么意思 231
7.15.5 如何打印自身代码 232
7.15.6 如何实现一个最简单病毒 232
7.15.7 如何只使用一条语句实现x是否为2的若干次幂的判断 233
7.15.8 如何定义一对相互引用的结构 233
7.15.9 什么是逗号表达式 234
7.15.10
是否与
等价 235
7.15.11 什么是短路求值 235
7.15.12 已知随机数函数rand7( ),如何构造rand10( )函数 236
7.15.13 printf(%p
,(void *)x)与printf (%p
,&x)有何区别 237
7.15.14 printf( )函数是否有返回值 237
7.15.15 不能使用任何变量,如何实现计算字符串长度函数Strlen( ) 237
7.15.16 负数除法与正数除法的运算原理是否一样 238
7.15.17 main( )主函数执行完毕后,是否可能会再执行一段代码 238
第8章 数据库 240
8.1 数据库概念 240
8.1.1 关系数据库系统与文件数据库系统有什么区别 240
8.1.2 SQL语言的功能有哪些 240
8.1.3 内连接与外连接有什么区别 242
8.1.4 什么是事务 243
8.1.5 什么是存储过程?它与函数有什么区别与联系 244
8.1.6 什么是主键?什么是外键 244
8.1.7 什么是死锁 245
8.1.8 什么是共享锁?什么是互斥锁 245
8.1.9 一二三四范式有何区别 246
8.1.10 如何取出表中指定区间的记录 247
8.1.11 什么是CHECK约束 247
8.1.12 什么是视图 247
8.2 SQL高级应用 248
8.2.1 什么是触发器 248
8.2.2 什么是索引 249
8.2.3 什么是回滚 250
8.2.4 数据备份有哪些种类 251
8.2.5 什么是游标 251
8.2.6 并发环境下如何保证数据的一致性 252
8.2.7 如果数据库日志满了,会出现什么情况 252
8.2.8 如何判断谁往数据库中插入了一行数据 252
第9章 网络与通信 254
9.1 网络模型 254
9.1.1 OSI七层模型是什么 254
9.1.2 TCP/IP模型是什么 255
9.1.3 B/S与C/S有什么区别 255
9.1.4 MVC模型结构是什么 256
9.2 网络设备 258
9.2.1 交换机与路由器有什么区别 258
9.2.2 路由表的功能有哪些 259
9.3 网络协议 260
9.3.1 TCP和UDP的区别有哪些 260
9.3.2 什么叫三次握手?什么叫四次断开 260
9.3.3 什么是ARP/RARP 262
9.3.4 IP Phone的原理是什么?都用了哪些协议 263
9.3.5 Ping命令是什么 263
9.3.6 基本的HTTP流程有哪些 264
9.4 网络编程 264
9.4.1 如何使用Socket编程 264
9.4.2 阻塞模式和非阻塞模式有什么区别 265
9.5 网络其他问题 266
9.5.1 常用的网络安全防护措施有哪些 266
9.5.2 什么是SQL注入式攻击 267
9.5.3 电路交换技术、报文交换技术和分组交换技术有什么区别 268
9.5.4 相比IPv4,IPv6有什么优点 269
第10章 操作系统 270
10.1 进程管理 270
10.1.1 进程与线程有什么区别 270
10.1.2 线程同步有哪些机制 271
10.1.3 内核线程和用户线程的区别 271
10.2 内存管理 272
10.2.1 内存管理有哪几种方式 272
10.2.2 分段和分页的区别是什么 272
10.2.3 什么是虚拟内存 272
10.2.4 什么是内存碎片?什么是内碎片?什么是外碎片 273
10.2.5 虚拟地址、逻辑地址、线性地址、物理地址有什么区别 273
10.2.6 Cache替换算法有哪些 274
10.3 用户编程接口 275
10.3.1 库函数与系统调用有什么不同 275
10.3.2 静态链接与动态链接有什么区别 276
10.3.3 静态链接库与动态链接库有什么区别 276
10.3.4 用户态和核心态有什么区别 276
10.3.5 用户栈与内核栈有什么区别 277
第11章 软件工程 278
11.1 软件工程过程与方法 278
11.1.1 软件工程过程有哪些 278
11.1.2 常见的软件开发过程模型有哪些 279
11.1.3 什么是敏捷开发 283
11.1.4 UML中一般有哪些图 285
11.2 软件工程思想 285
11.2.1 什么是软件配置管理 285
11.2.2 什么是CMMI 286
11.2.3 如何提高软件质量 287
第12章 发散思维 289
12.1 设计模式 289
12.1.1 什么是单例模式 289
12.1.2 什么是工厂模式 290
12.1.3 什么是适配器模式 290
12.1.4 什么是享元模式 291
12.1.5 什么是观察者模式 291
12.2 新技术 291
12.2.1 什么是云计算 291
12.2.2 什么是物联网 292
12.2.3 你平时读的专业书籍有哪些 293
第13章 数据结构与算法 295
13.1 数组 295
13.1.1 如何用递归实现数组求和 295
13.1.2 如何用一个for循环打印出一个二维数组 296
13.1.3 在顺序表中插入和删除一个结点平均移动多少个结点 297
13.1.4 如何用递归算法判断一个数组是否是递增 297
13.1.5 如何分别使用递归与非递归实现二分查找算法 298
13.1.6 如何在排序数组中,找出给定数字出现的次数 299
13.1.7 如何计算两个有序整型数组的交集 300
13.1.8 如何找出数组中重复次数最多的数 301
13.1.9 如何在O(n)的时间复杂度内找出数组中出现次数超过了一半的数 303
13.1.10 如何找出数组中唯一的重复元素 305
13.1.11 如何判断一个数组中的数值是否连续相邻 308
13.1.12 如何找出数组中出现奇数次的元素 309
13.1.13 如何找出数列中符合条件的数对的个数 311
13.1.14 如何寻找出数列中缺失的数 313
13.1.15 如何判定数组是否存在重复元素 314
13.1.16 如何重新排列数组使得数组左边为奇数,右边为偶数 315
13.1.17 如何把一个整型数组中重复的数字去掉 316
13.1.18 如何找出一个数组中第二大的数 318
13.1.19 如何寻找数组中的最小值和最大值 319
13.1.20 如何将数组的后面m个数移动为前面m个数 320
13.1.21 如何计算出序列的前n项数据 321
13.1.22 如何找出数组中只出现一次的数字 322
13.1.23 如何判断一个整数x是否可以表示成n(n≥2)个连续正整数的和 324
13.2 链表 325
13.2.1 数组和链表的区别是什么 325
13.2.2 何时选择顺序表、何时选择链表作为线性表的存储结构为宜 325
13.2.3 如何使用链表头 326
13.2.4 如何实现单链表的插入、删除操作 327
13.2.5 如何找出单链表中的倒数第k个元素 328
13.2.6 如何实现单链表反转 329
13.2.7 如何从尾到头输出单链表 331
13.2.8 如何寻找单链表的中间结点 331
13.2.9 如何进行单链表排序 332
13.2.10 如何实现单链表交换任意两个元素(不包括表头) 334
13.2.11 如何检测一个较大的单链表是否有环 335
13.2.12 如何判断两个单链表(无环)是否交叉 337
13.2.13 如何删除单链表中的重复结点 338
13.2.14 如何合并两个有序链表(非交叉) 339
13.2.15 什么是循环链表 340
13.2.16 如何实现双向链表的插入、删除操作 342
13.2.17 为什么在单循环链表中设置尾指针比设置头指针更好 343
13.2.18 如何删除结点的前驱结点 343
13.2.19 如何实现双向循环链表的删除与插入操作 343
13.2.20 如何在不知道头指针的情况下将结点删除 344
13.3 字符串 345
13.3.1 如何统计一行字符中有多少个单词 345
13.3.2 如何将字符串逆序 346
13.3.3 如何找出一个字符串中第一个只出现一次的字符 350
13.3.4 如何输出字符串的所有组合 351
13.3.5 如何检查字符是否是整数?如果是,返回其整数值 353
13.3.6 如何查找字符串中每个字符出现的个数 353
13.4 STL容器 354
13.4.1 什么是泛型编程 354
13.4.2 栈与队列的区别有哪些 354
13.4.3 vector与list的区别有哪些 355
13.4.4 如何实现循环队列 355
13.4.5 如何使用两个栈模拟队列操作 357
13.5 排序 359
13.5.1 如何进行选择排序 359
13.5.2 如何进行插入排序 360
13.5.3 如何进行冒泡排序 361
13.5.4 如何进行归并排序 364
13.5.5 如何进行快速排序 366
13.5.6 如何进行希尔排序 368
13.5.7 如何进行堆排序 369
13.5.8 各种排序算法有什么优劣 371
13.6 二叉树 372
13.6.1 基础知识 372
13.6.2 如何递归实现二叉树的遍历 373
13.6.3 已知先序遍历和中序遍历,如何求后序遍历 374
13.6.4 如何非递归实现二叉树的后序遍历 376
13.6.5 如何使用非递归算法求二叉树的深度 378
13.6.6 如何判断两棵二叉树是否相等 381
13.6.7 如何判断二叉树是否是平衡二叉树 381
13.6.8 什么是霍夫曼编解码 382
13.7 图 383
13.7.1 什么是拓扑排序 384
13.7.2 什么是DFS?什么是BFS 385
13.7.3 如何求关键路径 386
13.7.4 如何求最短路径 388
第14章 海量数据处理 390
14.1 问题分析 390
14.2 基本方法 390
14.3 经典实例分析 403
14.3.1 top K问题 403
14.3.2 重复问题 405
14.3.3 排序问题 407
致谢 409