华为java面试题总结

更新时间:2023-03-08 09:26:27 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 面向对象的特征有哪些方面 抽象,封装,继承,多态 2 String是最基本的数据类型吗?不是 3 int 和 Integer 有什么区别

Int是基本数据类型,Interger是int的封装类

4 String 和StringBuffer的区别

String数值不变,StringBuffer数值可以改变

5运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6 说出一些常用的类,包,接口,请各举5个

类:ArrayList PreparedStatement Connection String HttpServlet………

包:java,sql java.util, java.lang, java.io, javax.httpServlet,java.math,java.text,java.awt 接口:HttpSessionAttributeListener, ActionListener InputStream Collection 7 说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j;

public static void main(String args[]){ ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc(); Dec dec=tt.new Dec(); for(int i=0;i<2;i++){

Thread t=new Thread(inc); t.start();

t=new Thread(dec); t.start(); } }

private synchronized void inc(){ j++;

System.out.println(Thread.currentThread().getName()+\ }

private synchronized void dec(){ j--;

System.out.println(Thread.currentThread().getName()+\ }

class Inc implements Runnable{ public void run(){

for(int i=0;i<100;i++){ inc(); } } }

class Dec implements Runnable{ public void run(){

for(int i=0;i<100;i++){ dec(); } } } }

9.JSP的内置对象及方法。

request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

response response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) out out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息

config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page page表示从该页面产生的一个servlet实例

10.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。

参见课程中socket通讯例子。

11说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 12.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

13.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

14.说出数据连接池的工作机制是什么?

15同步和异步有和异同,在什么情况下分别使用他们?举例说明。 16应用服务器有那些?

17你所知道的集合类都有哪些?主要方法? ArrayList HashMap LinkedList HashTable

18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据。 19.说出在JSP页面里是怎么分页的? 页面需要保存以下参数:

总行数:根据sql语句得到总行数 每页显示行数:设定值 当前页数:请求参数

页面根据当前页数和每页行数计算出当前页第一行行数,定位结果集到此行,对结果集取出每页显示行数的行即可。

华为公司招聘 java 面试题——不多说了,测试一下你自己的水平吧 第一部分:选择题 QUESTION NO: 1

1、public class Test {

public static void changeStr(String str){ str=\ }

public static void main(String[] args) { String str=\ changeStr(str);

System.out.println(str); } }

Please write the output result : QUESTION NO:2

JAVA面试题集

基础知识:

1.C++或Java中的异常处理机制的简单原理和应用。

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。 2. Java的接口和C++的虚类的相同和不同处。

由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高

的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。 3. 垃圾回收的优点和原理。并考虑2种回收机制。 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有\作用域\的概念,只有对象的引用才有\作用域\。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 4. 请说出你所知道的线程同步的方法。

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。 sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

5. 请讲一讲析构函数和虚函数的用法和作用。 6. Error与Exception有什么区别?

Error表示系统级的错误和程序不必处理的异常,

Exception表示需要捕捉或者需要程序进行处理的异常。

7. 在java中一个类被声明为final类型,表示了什么意思? 表示该类不能被继承,是顶级类。 8. 描述一下你最常用的编程风格。 9. heap和stack有什么区别。 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素

10. 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。 public class BigInt() {

int[] ArrOne = new ArrOne[1000]; String intString=\

public int[] Arr(String s) {

intString = s;

for(int i=0;i

11. 如果要设计一个图形系统,请你设计基本的图形元件

(Point,Line,Rectangle,Triangle)的简单实现 12,谈谈final, finally, finalize的区别。

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。 finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 13,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

14,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

第四,&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。 15,HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

16,Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。 17,什么时候用assert。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用

于调试目的:

assert(a > 0); // throws an Assertionerror if a <= 0 断言可以有两种形式: assert Expression1 ;

assert Expression1 : Expression2 ;

Expression1 应该总是产生一个布尔值。

Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:

javac -source 1.4 Test.java

要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。

要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。 要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

18,GC是什么? 为什么要有GC? (基础)。

GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc()

Runtime.getRuntime().gc()

19,String s = new String(\创建了几个String Object? 两个对象,一个是\一个是指向\的引用对象s。 20,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; 21,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

22,sleep() 和 wait() 有什么区别? 搞线程的最爱

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)\醒来\的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。 23,Java有没有goto?

Goto—java中的保留字,现在没有在java中使用。

24,数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。 String有有length()这个方法。 25,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被\屏蔽\了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

26,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。 27,给我一个你最常见到的runtime exception。

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,

ImagingOpException, IndexOutOfBoundsException,

MissingResourceException, NegativeArraySizeException,

NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException,

UnmodifiableSetException, UnsupportedOperationException 28,error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

29,List, Set, Map是否继承自Collection接口? List,Set是 Map不是

30,abstract class和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也

是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

31,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不能 32,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。 33,启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 34,构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

35,是否可以继承String类?

String类是final类故不可以继承。

36,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。 37,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 会执行,在return前执行。

38,编程题: 用最有效率的方法算出2乘以8等於几? 有C背景的程序员特别喜欢问这种问题。 2 << 3

39,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

40,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的

方法中改变,但对象的引用是永远不会改变的。 41,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

42,编程题: 写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 public class Singleton { private Singleton(){}

//在自己内部定义自己一个实例,是不是很奇怪? //注意这是private 只供内部调用

private static Singleton instance = new Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance() { return instance; } }

第二种形式:

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance() {

//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提高了效率! if (instance==null)

instance=new Singleton(); return instance; } }

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。 一般认为第一种形式要更加安全些 Hashtable和HashMap

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

还有就是,HashMap把Hashtable的contains方法去掉了,改成

containsvalue和containsKey。因为contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在 多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

43.描述一下JVM加载class文件的原理机制? 44.试举例说明一个典型的垃圾回收算法? 45.请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来.

46.请写一个java程序实现线程连接池功能?

47.给定一个C语言函数,要求实现在java类中进行调用。

48、编一段代码,实现在控制台输入一组数字后,排序后在控制台输出; 49、列出某文件夹下的所有文件;

50、调用系统命令实现删除文件的操作; 51、实现从文件中一次读出一个字符的操作; 52、列出一些控制流程的方法; 53、多线程有哪些状态? 54、编写了一个服务器端的程序实现在客户端输入字符然后在控制台上显示,直到输入\为止,让你写出客户端的程序;

55、作用域public,private,protected,以及不写时的区别 答:区别如下:

作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时默认为friendly

56、ArrayList和Vector的区别,HashMap和Hashtable的区别 答:就ArrayList与Vector主要从二方面来说.

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的

二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

就HashMap与HashTable主要从三方面来说。

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 57、char型变量中能不能存贮一个中文汉字?为什么?

答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

58、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify 59、垃圾回收机制,如何优化程序? 希望大家补上,谢谢

60、float型float f=3.4是否正确?

答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 61、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)? 答:Collection FrameWork如下: Collection ├List

│├LinkedList │├ArrayList │└Vector │ └Stack └Set Map

├Hashtable ├HashMap

└WeakHashMap

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements) Map提供key到value的映射

62、Java中异常处理机制,事件机制? 11、JAVA中的多形与继承? 希望大家补上,谢谢 63、抽象类与接口?

答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。

华为从事通信网络技术与产品的研究、开发、生产与销售,是中国电信市场的主要供应商之一,并已成功进入全球电信市场。每年华为都要在各大高校招聘大批的应界生,特别是华中科技大学。公司网址是:http://www.huawei.com 下面据说是华为公司的笔试题,其实我想它一次笔试不可能出这么多题,也许是多年笔试题的合集,或者也包括了其他公司的笔试内容。最近国际商用工程集团(http://www.ibegroup.com/)的网管告诉我这是他们的题目,是网上以讹传讹的说成是华为的题目了,我想应该是这样的,毕竟题目中赫然出现了他们公司的网址呢(见题2),希望大家转贴的时候也能写上这段声明。

另外我发现白云黄鹤有人不声不响的贴出我做的答案,还没有声明出处,俺很严肃的告诉他,俺很生气angry,后果很严重。

个人答案,仅供参考。呵呵,不过保证绝大多数答案的准确性。

1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4;

(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++); a = ?

答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a; 改后答案依次为9,10,10,11

2.某32位系统下, C++程序,请计算sizeof 的值(5分). char str[] = “www.ibegroup.com” char *p = str ; int n = 10; 请计算

sizeof (str ) = ?(1) sizeof ( p ) = ?(2) sizeof ( n ) = ?(3) void Foo ( char str[100]){ 请计算

sizeof( str ) = ?(4) }

void *p = malloc( 100 ); 请计算

sizeof ( p ) = ?(5)

答:(1)17 (2)4 (3) 4 (4)4 (5)4

3. 回答下面的问题. (4分)

(1).头文件中的 ifndef/define/endif 干什么用?预处理

答:防止头文件被重复引用

(2). #include 和 #include “filename.h” 有什么区别?

答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。 (3).在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?

答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern \修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。

(4). switch()中不允许的数据类型是? 答:实型

4. 回答下面的问题(6分) (1).

Void GetMemory(char **p, int num){ *p = (char *)malloc(num); }

void Test(void){ char *str = NULL; GetMemory(&str, 100); strcpy(str, \printf(str); }

请问运行Test 函数会有什么样的结果? 答:输出“hello” (2).

void Test(void){

char *str = (char *) malloc(100);

strcpy(str, “hello”); free(str); if(str != NULL){ strcpy(str, “world”); printf(str); } }

请问运行Test 函数会有什么样的结果?

答:输出“world”,因为free(str)后并未改变str所指的内存内容。 (3).

char *GetMemory(void){ char p[] = \return p; }

void Test(void){ char *str = NULL; str = GetMemory(); printf(str); }

请问运行Test 函数会有什么样的结果? 答:无效的指针,输出不确定

5. 编写strcat函数(6分)

已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串。 (1)不调用C++/C 的字符串库函数,请编写函数 strcat 答: VC源码:

char * __cdecl strcat (char * dst, const char * src) {

char * cp = dst; while( *cp )

cp++; /* find end of dst */

while( *cp++ = *src++ ) ; /* Copy src to end of dst */ return( dst ); /* return dst */ }

(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?

答:方便赋值给其他变量

6.MFC中CString是类型安全类么?

答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换

7.C++中为什么用模板类。

答:(1)可用来创建动态增长和减小的数据结构 (2)它是类型无关的,因此具有很高的可复用性。

(3)它在编译时而不是运行时检查数据类型,保证了类型安全 (4)它是平台无关的,可移植性 (5)可用于基本数据类型

8.CSingleLock是干什么的。

答:同步多个线程对一个数据类的同时访问

9.NEWTEXTMETRIC 是什么。

答:物理字体结构,用来设置字体的高宽大小

10.程序什么时候应该使用线程,什么时候单线程效率高。 答:1.耗时的操作使用线程,提高应用程序响应

2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。 3.多CPU系统中,使用线程提高CPU利用率

4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 其他情况都使用单线程。

11.Windows是内核级线程么。 答:见下一题

12.Linux有内核级线程么。

答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户级线程”和“内核级线程”。用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象 DOS 这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似 Windows 3.x 的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。

Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程

13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中? 答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理 堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上 近堆还是远堆不是很清楚。

14.使用线程是如何防止出现大的波峰。

答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队等候。

15函数模板与类模板有什么区别?

答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

16一般数据库若出现日志满了,会出现什么情况,是否还能使用?

答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。

17 SQL Server是否支持行级锁,有什么好处?

答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。

18如果数据库满了会出现什么情况,是否还能使用? 答:见16

19 关于内存对齐的问题以及sizof()的输出

答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。

20 int i=10, j=10, k=3; k*=i+j; k最后的值是?

答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低

21.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现? 答:将操作多个表的操作放入到事务中进行处理

22.TCP/IP 建立连接的过程?(3-way shake)

答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包

ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

23.ICMP是什么协议,处于哪一层?

答:Internet控制报文协议,处于网络层(IP层)

24.触发器怎么工作的?

答:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,数据库就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。

25.winsock建立连接的主要实现步骤?

答:服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。

客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。

服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。

26.动态连接库的两种方式?

答:调用一个DLL中的函数有两种方法:

1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。 2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用 GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。

27.IP组播有那些好处?答: Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络资源的前提下保证服务质量。

华为面试题

Q1:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?

Q2:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢?

Q3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的? Q4:请问C++的类和C里面的struct有什么区别? Q5:请讲一讲析构函数和虚函数的用法和作用?

Q6:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的? Q7:一些寄存器的题目,主要是寻址和内存管理等一些知识。 Q8:8086是多少尉的系统?在数据总线上是怎么实现的?

华为,也就是第一个给我OFFER的公司。之前不知道他招那么多,所以只是想拿点BS经验的态度去。BS大题目做得还好,选择题之类的就不太行,不过后来证明,招人多,要求分数就不多,我也被通知去一面了,一面去到酒店报到,等,并不是HR手不利索,只是人实在太多。能贯穿华为面试的只有一个词,那就是等待。一面是技术面.技术面没问到很深的东西,先自我介绍.如果你有做过项目,并且不指一两个的话,整个面试就是你在介绍项目。再来问了几个数据库的问题,存储过程的优点,他的性能与分开几条SQL语句来实现,哪个高,为什么。为什么我答不出来,我只好说:不好意思,短时间内怕是想不出来了,不过我回去以后都会去弄懂,就象我笔试题目一样,现在试卷上不懂的基本都想通了。还好面试官比较慈祥,只是说,你再想想一定可以答出来的,因为要把请求发到服务端嘛。他一说,

我就机灵的接过去,点下头,延伸了他的答案。然后他写意见,之后就结束了。 第一天,只面了一面,叫第二天再去二面。只好再缺一天的课,还是那套战袍第二面是群面,12个人一起,6个6个一组,在这我要谢谢我同班的同学前一晚告诉我的一些经验,在这里散发出去,帮他攒人品。

首先,在进去前等待的时候要跟队友们打熟,至少要找点话题说说,让他们记得你。 第二,尽量不要跟很说得话的一组,怕被牵着走,如果你是口才很好的那没关系。 第三,坐中间,不会被遗忘,不过我那组感觉面试官比较公平。

第四个,做什么都不要抢,讨论的时候有话要尽量说出来,说得越多越好,因为在你说话的时候人家是不会打断你的。反过来,你也最好不要打断人话,等人家说完了,你再示意你有一些意见要说。第四,讨论时,引导一直不说话的人去说话,这样就反映你有团队。

第五,群面不一定要做队长,能做就做,能力不够的,负责不过来,反而影响全队的发挥,有主见就行,除非那组人一定只留一个,那另算。

第六,面试官问什么,就答什么,别回避问题,人家问你全队谁表现最好,别老想着说:全队都好那种答案。就算一个,只要理由充分,都可以。优缺点这样的问题,一定要正面回答,在之前应该要准备好,别把无关的缺点也说上去,例如怕黑那些跟工作无关的别废话出来。说一些小缺点,但不是关于你的交际能力的,团队合作的缺点就行。还有别说一听就知道是优点的缺点,例如,我太追求完美了这样的。面试官都不是第一年做的,听几万个答案了,一眼就抓住你,死盯你这个问题那就自己害死自己。

我们组的题目是:作为一个成功人士的条件重轻排序。拿到题目立刻看表,报一下时给大家听。迅速浏览,看完16个条件后,立刻拿起来一条出来说自己的意见,不用抢在最前面说话,但是一定要说话,不要做第一也要在前3个发言。说完后不妨问问其他人怎么看你的想法,“大家说对不对”“你怎么认为呢”“我这样说合理不”之类的。具体的言论我是记不了了。最要紧就是好好表现自己就行。

二面在积极的发言和有见地的分析中度过。再来就等待网络测试,就是测试性格的题目,去电脑那边做,没什么好说的。再来就回来等三面。综合面,只是关乎到你的分配地的面试。我也是交三方那天才知道,之前填的是全球。建议填全球,但是在面试过程中把自己的意愿透露出来,让面试官知道你喜欢哪里,你在那里有什么优势,有什么东西让你为公司奉献更多。这一关一般都过,没什么好说的。四面就是英语了我的英语不太好,但是为了汇丰我抓紧练习,有了之前的练习,这关也算是过去了。先自我介绍,完了他问一个问题。我被问到的问题是,你认为你为什么适合华为,华为比较辛苦你怎么看。同组有另两个人,他们被问到的问题,我都有点汗,一个问了,你擅长煮东西吃吗?还有一个就问了你有特别好的朋友吗?哈哈~~~~~~~~~~~~

我就机灵的接过去,点下头,延伸了他的答案。然后他写意见,之后就结束了。 第一天,只面了一面,叫第二天再去二面。只好再缺一天的课,还是那套战袍第二面是群面,12个人一起,6个6个一组,在这我要谢谢我同班的同学前一晚告诉我的一些经验,在这里散发出去,帮他攒人品。

首先,在进去前等待的时候要跟队友们打熟,至少要找点话题说说,让他们记得你。 第二,尽量不要跟很说得话的一组,怕被牵着走,如果你是口才很好的那没关系。 第三,坐中间,不会被遗忘,不过我那组感觉面试官比较公平。

第四个,做什么都不要抢,讨论的时候有话要尽量说出来,说得越多越好,因为在你说话的时候人家是不会打断你的。反过来,你也最好不要打断人话,等人家说完了,你再示意你有一些意见要说。第四,讨论时,引导一直不说话的人去说话,这样就反映你有团队。

第五,群面不一定要做队长,能做就做,能力不够的,负责不过来,反而影响全队的发挥,有主见就行,除非那组人一定只留一个,那另算。

第六,面试官问什么,就答什么,别回避问题,人家问你全队谁表现最好,别老想着说:全队都好那种答案。就算一个,只要理由充分,都可以。优缺点这样的问题,一定要正面回答,在之前应该要准备好,别把无关的缺点也说上去,例如怕黑那些跟工作无关的别废话出来。说一些小缺点,但不是关于你的交际能力的,团队合作的缺点就行。还有别说一听就知道是优点的缺点,例如,我太追求完美了这样的。面试官都不是第一年做的,听几万个答案了,一眼就抓住你,死盯你这个问题那就自己害死自己。

我们组的题目是:作为一个成功人士的条件重轻排序。拿到题目立刻看表,报一下时给大家听。迅速浏览,看完16个条件后,立刻拿起来一条出来说自己的意见,不用抢在最前面说话,但是一定要说话,不要做第一也要在前3个发言。说完后不妨问问其他人怎么看你的想法,“大家说对不对”“你怎么认为呢”“我这样说合理不”之类的。具体的言论我是记不了了。最要紧就是好好表现自己就行。

二面在积极的发言和有见地的分析中度过。再来就等待网络测试,就是测试性格的题目,去电脑那边做,没什么好说的。再来就回来等三面。综合面,只是关乎到你的分配地的面试。我也是交三方那天才知道,之前填的是全球。建议填全球,但是在面试过程中把自己的意愿透露出来,让面试官知道你喜欢哪里,你在那里有什么优势,有什么东西让你为公司奉献更多。这一关一般都过,没什么好说的。四面就是英语了我的英语不太好,但是为了汇丰我抓紧练习,有了之前的练习,这关也算是过去了。先自我介绍,完了他问一个问题。我被问到的问题是,你认为你为什么适合华为,华为比较辛苦你怎么看。同组有另两个人,他们被问到的问题,我都有点汗,一个问了,你擅长煮东西吃吗?还有一个就问了你有特别好的朋友吗?哈哈~~~~~~~~~~~~

本文来源:https://www.bwwdw.com/article/hnq3.html

Top