"腾讯2015年的春季招聘练习卷涵盖了后台和Web前端开发的相关技术题目,主要涉及了编程语言的基础知识,如线程安全、数据结构与算法、C/C++指针、Java语言特性、计算机体系结构以及编程规范等。这份练习卷旨在测试应聘者的编程基础和问题解决能力。"
在提供的练习卷中,我们可以提炼出以下几个关键知识点:
1. **线程安全**:
- Vector、Hashtable和Stack是线程安全的,因为它们在Java的早期版本中设计为同步的,可以在多线程环境中使用而不必担心数据一致性问题。
- ArrayList不是线程安全的,它没有内置的同步控制,如果在多线程环境中使用,需要开发者手动添加同步机制。
2. **排序算法**:
- 拓扑排序、快速排序、堆排序和基数排序都是用于排序的算法,这些算法在不同的场景下有不同的效率和适用性。
- 拓扑排序主要用于有向无环图(DAG)的节点排序;快速排序是高效的内部排序算法;堆排序是基于比较的排序,适用于大数据集;基数排序则是非比较型排序,适用于数字排序。
3. **C/C++指针**:
- 在C/C++中,`#define INT_PTR int*` 和 `typedef int* int_ptr` 都是用来定义指针类型的别名。
- 变量a、c和d都是指针类型,而b在定义中没有使用星号(*),因此不是指针类型。
4. **Java基础知识**:
- Java的JAR文件可以通过java.exe运行,但需要main()方法作为程序入口。
- J2SDK包含了Java API,但J2SDK这个术语在Java SE 5.0之后已经被废弃,改为Java SDK。
- Appletviewer.exe不能利用jar选项运行.jar文件,它主要用于本地运行Applet。
- 能被Appletviewer成功运行的javaclass文件不需要有main()方法,因为Applet是在浏览器环境下运行的。
5. **计算机体系结构**:
- 冯·诺依曼体系结构的组成部分包括CPU、RAM和ROM,而不包含Cache。Cache是后来为了提高性能而添加到计算机系统中的高速缓冲存储器。
6. **C++字符串和指针操作**:
- const char *p1 = "hello"; 定义了一个指向常量字符串的指针,不可修改p1指向的字符。
- char *const p2 = "world"; 定义了一个指向字符的常量指针,即p2的值不可变,但可以修改p2所指向的字符。
- 对于p1++和p2++,在定义的上下文中,p1++是非法的,因为p1指向的是常量字符串,不可修改。
- p1[2] = 'w'; 是非法的,同样因为p1指向常量字符串。
- p2[2] = 'l'; 如果p2不指向常量字符串,这是合法的修改操作。
- p2++; 若p2不是指向常量的,这个操作是合法的,可以改变p2的值。
7. **内存管理**:
- 减少换页错误通常通过利用访问局部性(locality of reference)来实现,即进程倾向于访问最近使用的数据,减少了对内存中不同部分的频繁访问,从而降低页面交换。
8. **访问控制属性**:
- Java中访问控制属性包括public(公有)、private(私有)和protected(受保护),友元类型(friend)是C++中的概念,Java中没有这个访问控制属性。
9. **Java编程**:
- Java中数组是对象,但数组不是Java的原生类型(primitives),原生类型包括int、char等。
- 数组的大小在声明时固定,不能在运行时改变。
- Java中的环境变量可以在编译时指定,例如设置classpath。
- javac可以一次编译多个源文件,并可以指定输出目录。
10. **负载均衡**:
- 负载均衡器将请求按照特定概率分配到集群的不同部分,例如集群A、B、C、D的处理概率分别为10%、20%、30%和40%。
以上是练习卷中涉及的关键知识点,对于准备面试或学习编程的人员来说,这些都是非常重要的基础概念和技术。