欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

腾讯测试开发电面经历

程序员文章站 2022-05-10 22:18:15
...

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

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

 

 

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】


腾讯测试开发电面经历
            
    
    博客分类: 非技术 面经腾讯测试开发 
 

 

 

 

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

不要沉默走进黑夜...

  • 腾讯测试开发电面经历
            
    
    博客分类: 非技术 面经腾讯测试开发 
  • 大小: 70.6 KB
  • 腾讯测试开发电面经历
            
    
    博客分类: 非技术 面经腾讯测试开发 
  • 大小: 5.9 KB
  • 腾讯测试开发电面经历
            
    
    博客分类: 非技术 面经腾讯测试开发 
  • 大小: 5.9 KB