某信外企大厂面试题

面试题全是英文,这里我就不用英文复述了,简单用中文还原。在写面试题之前,简单总结一下,面试的是Java开发,从试卷的整体难度来看,除了最后的开放题,其他的都还算可以,我自己菜,基础掌握的不扎实,还是代码敲得太少,不够熟练。另外一方面自己经历的项目经验也太少,很多知识点也没有了解过,整个试卷有数据库方面的、有C++方面的、也有考察linux命令的,总体来说,试卷考查的知识点很全面。再说一句,我是真的太菜了,而且面试官一针见血指出我的致命点,知识掌握的太浅,没有知其然而知其所以然。

扯远了,还是直接上题目。

试卷总共分为4个部分,分别是选择题,代码题,简答题,开放题。

第一部分——选择题

1.这题考察的是死锁,具体的题目记不清了,大家多了解下死锁就行了,这里我简单写一下死锁的定义。

线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。

更详细的死锁有关的知识点可以参考这边文章https://www.cnblogs.com/hadoop-dev/p/6899171.html。

2.这题考察的是冒泡排序,比较的简单。

3.第三题考察的是二叉树的先序遍历。

第二部分——代码题

1.这题大意是写一个swap方法。

2.这题是一个学生对象有学生姓名,学生ID,学生性别以及学生年龄。用C++设计一个对象结构,并实现删除学生列表中年龄相同的对象。给出的函数为void delete_Student_ByID(Student* list, int age){}

3.这题是给了一个栈的实现。然后问了三个问题。分别是方法ensureCapicity的作用是什么?代码中有没有什么存在问题的地方,以及相应的改进方案?

public class Stack{
    Object[] elements;
    int Size = 0;

    public void ensureCapicity(){
        if(elements.length == Size){
           elements = new Object[2*elements.length + 1];
           Obejct[] tempElements  = new Object[elements.length];
           System.arrayCopy(tempElements, 0, elements, 0, Size);
        }
    }

    public void push(Object obj){
        ensureCapicity();
        Size++;
    }

    public Object pop(){
        if(size == 0){
            throw new Exception();
        }
        return elements[--Size];
    }
}

(大概就是这样的代码)

4.这题是说添加一个商品到购物车中,如果这个商品降价了,给用户的手机和邮箱发一封邮件通知。给出实现代码。

第三部分——简答题

1.简述OSI网络模型。

一共分为七层,自下而上是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

2.简述一下TCP的三次握手的过程。

3.数据库编程中哪个属性决定了当有一个数据发生更新的时候通知或不通知其他的表单(大概是这样,记得不清楚)。

4.数据库加载驱动和连接数据库表单的基本操作。

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?user=root&password=1234");

5.linux中显示内存使用情况的命令。

6.Linux中将线程放入后台和放回前台的命令。

jobs——查看后台执行的进程的编号

fg jobnumber——将后台执行进程调到前台执行

bg jobnumber——将后台挂起的进程继续执行

7.这是一道关于将xmlns语言编译成XML语言格式的题目,内容记不太清楚了。

第五部分——开放题

1.一根不均匀的绳子从头烧到尾需要60分钟,现在有几根这样的绳子,设置一个定时75分钟的方法。

2.(好像是)一个数组,遍历一次,找到第二大的数字。

你可能感兴趣的:(java学习)