2021春招面试作业帮Android开发工程师岗位
1.自我介绍
自我介绍就不多说了
2.项目介绍
面试官让我介绍一下我在简历上写的一个项目,说明一下:这个项目其实比较简单,但是由于是我一个人做的,而且是第一次做,所以在做的途中遇到很多的坑,浪费了很多的时间在爬坑上面;言归正传,先简单介绍一下这个项目,这个项目的业务需求就是这个app主要是实现对一个工厂的电机,水泵,离心机运作时各项数据,比如电机转速,电压,电流,温度实现在线显示,监测,对出现异常的数据进行预警,对出现故障的设备进行诊断(就是查出是设备哪里出了问题)并给出相应的维修意见。项目的设计模式是MVC模式,主要的功能模块主要包括信息获取,信息监测以及数据分析三大模块。在大致介绍后面试官根据我的项目提了几个问题:
* 项目数据获取你是怎么实现的
我答:通过可靠的网络传输协议TCP/IP 中的套接字socket与socket service实现手机移动端与上位机服务器建立长连接,然后进行IO流的传输
* 如何保持移动端和服务器端的长连接
我答:I don‘t konw
* 能说说fragment与activity的区别吗
我答:fragment是碎片,activity是整个屏幕
*简单说一下activity的生命周期
我答:创建->初始化->运行->停止->销毁(重新运行)
*说一下resume是那个阶段实现的
我答:activity停止状态之后通过调用resume方法可实现activity的重新运行
3.基础知识面试
面试官:平常学过哪些编程语言
我:学过c/c++,java
然后他说那就问一点java的问题吧
* 你知道java中常见的数据类型吗
我答:比如说整型,字节型,字符型,string类型
* 你知道常见的引用数据类型吗
我答:有点懵圈,不知道引用是什么鬼
* 介绍一下arraylist与linklist,它们有什么区别
我答:它们都属于线性表这种数据结构,具体arraylist是数组,linklist是链表,它们的区别,嗯。。。我当时只说了存储逻辑的不同(当时有点紧张)arraylist是在内存中开辟一段连续的存储区域,可通过数组首地址address和偏移量index进行数组进行数据访问;linklist是非连续的存储形式,它的每个节点都有地址区和数据区,地址区是指向下一个节点的地址(单向链表),数据区是存储数据的;当然还有其它区别,如果有相同的数据内容的arraylist对象和linklist对象,进行数据访问和查询操作的话arraylist更有利,进行数据增删linklist更有优势,上面主要是以大量数据为背景,考虑时间复杂度O(n)的情况下得出的结论。
* 如何比较两个两个数组是否相等,能用“==”能直接判断吗
我答:有好几种方法可以实现,当时只记得equal()方法了,不能直接用“==”直接判断,因为它只会比较两个数组的首地址是否相等,并不能实现判断两个数组的是否相等
* 你知道java中的类加载吗
我答:根据双亲委派原则,分级对类进行加载,原则是类先优先由其父类加载器进行加载,如果加载的业务范围中超出父类加载器的业务范围,那么父类加载器会将类传给它的父类加载器,依次顺延,直到加载完成,当然所有的父类加载器都是javaLoader的子类,及javaLoader是最顶层的类加载器
* java类经过类加载器加载后会成为什么
我答:一脸蒙逼,我只知道类加载
* 介绍一下socket的三次握手,为什么是三次,四次不行吗
我答:三次请求是:第一次握手 客户端发送连接请求,将用户数据报打包成帧(包括客户端IP地址和连接端口)发送给服务器端,第二次握手:服务器端收连接请求后,检查客户端IP地址和端口号,在确认无误后,他将可连接的信息发送给客户端;第三次握手:两端都确认相关连接信息无误后,通过socket建立连接,然后进行端口通讯。三次就可以满足连接的正确性和稳定性,四次可以,但是没有必要
*你知道常见的几种http请求吗
我答:不知道 ,顿时语塞,气氛十分尴尬
4.编程题目
编程题是面试官当场出题,然后自己可以敲代码(语言可以自己选用熟悉的)
*实现单例模式的几种方法(要考虑线程安全)
public void solution(){
System.out.print(“I don‘t know!”); //后期学会后会加上去
}
* 给出一个数组和一个数,利用二分查找法实现定位找到到这个数并给出索引
public int solution(int num[],int a){
int i=a;
for(int i=0;i<num.length;i++){
//二分法实现查找,我是fw,目前还不会
}
return i;
}
在经历两题的沉默后,面试官脸上写满了不耐烦,我猜他在想:怎么会有这种fw,简直就是浪费我的时间
* 最后他让我写了个冒泡排序算法,然后让我滚蛋,并对我说:我们公司不招fw
Public void solution (int array[]){
for(int i=0;i<array.length;i++){
for(int j=i+1;j<array.length-1;j++){
if(array[i]<array[j]){
int swap=array[i];
array[i]=array[j];
array[j]=swap;
}
}
}
}