腾讯测试开发电面经历

今天晚上,电面了腾讯的测试开发。很遗憾,面试的并不理想。

将经过和面试后的总结放在这里,不是说为了给后人以经验,而是为了时刻提醒自己,不能松懈。

 

C:register变量的作用是什么?

       被标识为register变量存储在cpu寄存器中,cpu访问寄存器内存极快,一般可用于大循环体内以提高循环效率。

  • 只有局部自动变量和形式参数可以作为寄存器变量
  • 一个计算机系统的寄存器数目有限,不能定义任意多个寄存器变量
  • 局部静态变量不能定义为寄存器变量

 

C里面一个程序crash的原因有哪些?

      数组越界、野指针

      野指针:当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称为野指针。

 

 Android四大组件有哪些?

Activicty,BroadcastReceiver(广播接收者),service,content provider(内容提供者)

  1. Activicty之间通过intent来进行通信
  2. Broadreceiver:可以使用它对外部事件进行过滤,只对感兴趣的外部事件进行接收并响应(普通广播,有序广播,异步广播)
  3. Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序
  4. android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式, 其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。

    【来源:http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html

Android的进程之间进行通信的方式有那些?

Activity、ContentProvider、Broadcast和AIDL Service。

  1. Activity可以跨进程调用其他应用程序的Activity;
  2. ContentProvider可以访问其他应用程序返回的 Cursor对象;
  3. Broadcast采用的是被动接收的方法,也就是说,客户端只能接收广播数据,而不能向发送广播的程序发送信息。
  4. AIDL Service可以将程序中的某个接口公开,这样在其他的应用程序中就可以象访问本地对象一样访问AIDL服务对象了。

这4种跨进程通讯的方式可以应用在不同的场合。例如,在需要显示可视化的界面时可以用Activity,需要返回记录集时可以用ContentProvider。至于在应用程序中具体要用 到哪一种或几种方式进行跨进程通讯,读者可以根据实际情况进行选择。

 

Java中class类有三类,private,public,protected,它们的引用方式有什么不同?



 

Java中内存泄漏(memory leak)的原因有哪些?

我的回答:深度递归,开辟的内存超过jvm所设置的限制

马后炮:

           当某些对象不再被应用程序所使用,但是由于仍然被引用而导致垃圾收集器不能释放(Remove,移除)他们.

用白话来说就是: 该回收的内存没被回收,最后因为内存不够用而导致程序报错

具体情况有:

1. 当心集合类,比如 HashMap,ArrayList等,因为这是最容易发生内存泄露的地方.当集合对象被声明为static时,他们的生命周期一般和整个应用程序一样长。

2. 注意事件监听和回调.当注册的监听器不再使用以后,如果没有被注销,那么很可能会发生内存泄露.

3. "当一个类自己管理其内存空间时,程序员应该注意内存泄露." 常常是一个对象的成员变量需要被置为null 时仍然指向其他对象,

 

内存泄漏和内存溢出的区别:

           内存泄露是指分配出去的内存没有被回收回来,由于失去了对该内存区域的控制,因而造成了资源的浪费。

        内存溢出是指程序所需要的内存超出了系统所能分配的内存(包括动态扩展)的上限。

 

 

Java中内存溢出(out of memory error)的原因有哪些?

一般原因在于jvm内存过小、程序不严密,产生了过多垃圾

导致OutOfMemoryError异常的常见原因有以下几种:

  1. 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
  2. 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
  3. 代码中存在死循环或循环产生过多重复的对象实体;
  4. 使用的第三方软件中的BUG;
  5. 启动参数内存值设定的过小;

此错误常见的错误提示:

  1. tomcat:java.lang.OutOfMemoryError: PermGen space
  2. tomcat:java.lang.OutOfMemoryError: Java heap space
  3. weblogic:Root cause of ServletException java.lang.OutOfMemoryError
  4. resin:java.lang.OutOfMemoryError
  5. java:java.lang.OutOfMemoryError

解决方案:

  1. 增加jvm的内存大小:
  •  执行某个class文件的时候,可以使用java-Xmx256m.aa.class来设置运行aa.class时所允许占用的最大内存为256m
  • 对于tomcat容器,可以在启动的时候对jvm设置内存限度
  • 对于resin容器,可以在启动的时候对jvm设置内存限度

 2. 优化程序,释放垃圾:

主要包括避免死循环,即使释放各种资源:内存,数据的各种连接,防止一次载入太多的数据,导致内存溢出的根本原因是程序不健壮。

3. Java代码问题导致的out of memory error 的解决:

重点排查:

  1. 检查代码中是否有死循环或递归调用
  2. 检查是否有大循环重复产生的对象实体
  3. 检查对数据库的查询中,是否有一次获得全部数据的查询。一般来说,若一次取十万条记录到内存,就可能引起内存溢出(该问题较隐蔽,在上线前,数据库数据较少,不容易出问题,待上线后数据多了,一次查询就有可能引起内存溢出,因此,对于数据库查询尽量使用分页的方式查询)
  4. 检查List、Map等集合对象中是否使用完后未清除的问题:List、Map等集合对象会始终持有对对象的引用,使得这些对象不能被GC回收。

 

【总结自:http://outofmemory.cn/c/java-outOfMemoryError】



 

 

 

在你说有坑的时候,是真有坑还是你自己的学习能力出了问题?

不要沉默走进黑夜...

猜你喜欢

转载自narutolzj.iteye.com/blog/2287289