Android找工作一个月的一些感受(二)
接着上一篇写,感兴趣的朋友看看Android找工作一个月的一些感受(一)。
找了一个多月,最大的感受就是工作真的难找了,今年真是特别的一年。在这一个多月里,我只有3个面试。也只有一个比较正式。如下:
-
第一个面试只有一个面试邮件,没有电话通知。不过我还是去了,面积没有我上一家公司1/20大,做了一份笔试题,就让我回去等通知。感受 没有面试电话的公司真没必要去。感觉像在收集面试者资料的感觉。
-
第二个是腾讯QQ空间项目组晚上8点多直接打电话过来的,问了两个问题,1.架构的理解,2.对tcp/ip的理解。当时没做啥准备,对这种问题懵逼。
-
第三个就是现在的公司了,既有面试邮件,又有面试电话。去了先做了一份笔试题(android,c,linux都有,都是基础),发现很多人很快就走了,而我在那里快做了快两个小时。我认为做笔试题态度很重要,尽量把每题都写上答案,看的人不会那么详细去看,顶多会挑几个多看一眼。特别是手写编程题要做了。还有面试的时候,有关笔试有心得的可以提一下,证明你用心做了。笔试之后直接面试,然后隔一天复试之后就收到offer了。
虽然找工作每天都很煎熬,但是不要忘记提高自己的技术,因为行业朝着一个稳定高水准的方向发展,没有实力很容易被淘汰的。应用层已经泛滥了。总结了几个可以发展的方向。
-
全栈工程师 (伴随着react native 的火热,要比小程序对android/ios有冲击的多,JavaScript大有一统江湖之意。全能型人才绝对不简单,前后端都会绝对竞争力大增。)
-
游戏(感觉最有技术含量的)
-
NDK/JNI (Android由 Application、Framework、Liarbry、Linux内核组成,相比全栈工程师横向实力,NDK技术就是纵向实力,在一个平台上耕耘,显得更加专业有技术。物联网(智能家居、车联网、智能硬件)、音视频解码(视频,直播)等都是行业发展的趋势)
-
架构师(职业进阶方向。)
-
Framework (可能没有上面的有技术含量,但是相对简单并且贴合正在找工作的人。招聘也很多,说一将难求)
-
另外 大数据、云计算、AI、VR 也很火热。
还有感受到 简历也很重要。简历作为与应聘公司唯一的沟通桥梁(当然现在很多都可以聊天),一定要写好。比较建议按照STAR法则来写简历,这个法则像讲故事一样,让简历更真实,更有可读性。网站投递的简历和去面试时带的简历不一样比较好。还有是对于工作年限和学历。建议适当增加年限,和没有学历建议去考个本科或者MBA。(造假是个敏感话题,如果被公司发现,不要慌首先要表示道歉,说明缘由和情况,最后表示愿意接收公司制度处罚)参考:
STAR法则
致求职者:公司为什么会录用你?
推荐两个技术简历模板
25岁,我过的如此迷茫
相比腾讯面试时的尴尬,我规定自己遇到任何问题都能说两句。于是我罗列了一些问题,每个都要有答案。都是一些通俗的回答,可能不那么有技术含量,仅供参考。由于没弄几个就找到工作了,所以很多都没有答案。如果大家有错误或者好的答案,可以与我联系,我来修改。
**Tcp/Ip **
其实tcp/ip都是网络协议,有一个OSI模型,总共有7层,ip在网络层,tcp在传输层,udp也是。
- 网络层是分割和重新组合数据包Packet,基于网络层地址(IP地址)进行不同网络系统间的路径选择,
- 传输层把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。
- 在xxx项目开发聊天功能时用到socket聊天,有用到tcp/udp这样的协议。
- 在项目开发中用的最多的还是http/https协议。说起这个就不能不说 HttpClient和HttpConnect,HttpClient怎么样,HttpConnect怎么样怎么样。(敢自己知道的说)

参考:
百度百科 osi
OSI模型 - 维基百科
面试时,你被问到过 TCP/IP 协议吗?
通俗大白话来理解TCP协议的三次握手和四次分手
架构
现在android端主要架构有MVC MVP MVVM。
- mvc
待研究 - mvvm
待研究 - mvp
Mvp是现在android开发中非常流行的架构。
Mvp由mvc演变而来,Controler变成了Presenter,主要就是把Controler和View解耦,这样的好处显而易见,Activity的代码显著变少了。扩张性变得非常好。
画图解释比较清楚一点。
View : View持有persenter对象,而presenter持有View和Model的接口实例,这样view就可以让presenter去请求数据,然后再返回给view,
Presenter :presenter持有View和Model的接口实例
Model :专注于数据操作
而最妙的地方在于,Presenter持有的是接口实例,
缺点也是有的,这样导致类会非常多。
还有这样的mvp太简单了,要做一些优化,比如activity已经销毁了,但是model还在请求数据,view对象还在presenter引用着。
所以呢,还可以进行一些封装。如下:
- 对于view,代码封装在BaseActivity
- 主要是presenter这边的优化,为了防止内存泄漏,抽象出一个接口,在他的实现类里面实现接口的方法,这里为了防止内存泄漏,采用弱引用weakRefrence保存view.在BaseActivity里面oncreate和ondestory绑定解绑view.
(这个东西写其实看不大明白,自己写一遍就好了)参考
github - mvp 瓣呀
github - mvp mvp
百度云链接:http://pan.baidu.com/s/1slnoMeT 密码:lvgb
多线程
在程序开发的实践当中,为了让程序表现得更加流畅,我们肯定会需要使用到多线程来提升程序的并发执行性能。但是编写多线程并发的代码一直以来都是一个相对棘手的问题,所以想要获得更佳的程序性能,我们非常有必要掌握多线程并发编程的基础技能。
就像售卖火车票一样,每一个售票窗口就像一个线程,买票的人就相当于执行的任务。窗口越多,售卖的票肯定也越多。
线程安全和线程不安全 打个比方,arrayList是线程不安全的 他就会这样 new 10个线程每个线程添加100条数据,这里总共就添加了1000条数据,但是结果一般没有1000条,为什么呢?因为非线程安全就是可能出现多个线程操作同一个对象可能会出现问题。而线程安全则不会有问题。
首先说一下关键字 synchronized 同步锁 同一时间只让一个线程执行,另一个线程阻塞。执行完了另外一个线程才能执行。这样就能保证线程安全。
当然还有Volatile,volatile比较难理解,volatile需要满足两个条件才能保证并发线程安全。
1.对变量的写操作不依赖于当前值。
2.该变量没有包含在其他变量的不定式(Invariants)中
说起多线程,不得不说一下,生产者消费者模式,多个线程生产,多个线程消费,如果处理不好,就会产生这样的问题,明明只有100张票,却卖了101张。就是多余或者小于100张票,
那怎么解决呢?不管生产消费,做操作之前都要进行判断,如果最多只产生100张票,那只要满了100张,生产线程就需要wait,只要票数等于0,生产线程也需要wait,那什么时候唤醒呢?当生产线程生产了1张时,就需要notify了,但是因为是多线程所以需要notifyall,然后线程唤醒之后,就先进行判断,时候需要进行生产或者消费。
这个还可以优化,因为有个不好的地方notifyall会唤醒所有的线程,那能不能生产了,只唤醒所有的消费线程,线程消费了,只唤醒全部的生产线程呢?
在jdk1.5的时候,推出了lock和condition对象 。
Lock替代了原有的synchronize
condition代替了原本的object类里的方法 wait,notify,notifyAll 。
Condition的强大之处在于可以为多个线程间建立多个condition,这样就不是唤醒所有的线程了,而是分开唤醒的。同时BlockingQueue也可以实现生产者消费者模式。
性能优化
这要说的东西就太多了,分点来说。(很多问题都可以用这里的知识回答),参考:性能优化系列总篇
View的绘制流程
待研究
内存泄漏
待研究
ANR
待研究
手势事件传递

设计模式
看视频资料(看后评价下怎么样)
百度云盘链接:http://pan.baidu.com/s/1kVFRucB 密码:9a6j
适配
待研究
service怎么保活
待研究
react native
算法题部分
给最外层的rootview,把这个根视图下的全部button背景设置成红色,手写代码,不许用递归
待研究
给一串字符串比如abbbcccd,输出a1b3c3d1,手写代码(注意个别字符可能出现10次以上的情况)
待研究
一个序列,它的形式是12345678,9是最高峰,经历了一个上升又下降的过程,找出里面的最大值的位置,要求效率尽可能高
待研究
二叉查找树的删除超过,手写代码
待研究
反转链表,手写代码
待研究
二分查找,手写代码
待研究
快速排序
原理之后讲吧,先看看代码。
public class FastSort{
public static void main(String []args){
System.out.println("Hello World");
int[] a = {12,20,5,16,15,1,30,45,23,9};
int start = 0;
int end = a.length-1;
sort(a,start,end);
for(int i = 0; i<a.length; i++){
System.out.println(a[i]);
}
}
public static void sort(int[] a,int low,int high){
int start = low;
int end = high;
int key = a[low];
while(end>start){
//从后往前比较
while(end>start&&a[end]>=key) //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
end--;
if(a[end]<=key){
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//从前往后比较
while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
start++;
if(a[start]>=key){
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
//此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
}
//递归
if(start>low) sort(a,low,start-1);//左边序列。第一个索引位置到关键值索引-1
if(end<high) sort(a,end+1,high);//右边序列。从关键值索引+1到最后一个
}
}
有海量条url,其中不重复的有300万条,现在希望挑选出重复出现次数最高的url,要求效率尽可能的高
待研究
一篇英语文章,去掉字符只留下k个,如何去掉才能使K个字符字典序最小
待研究
弗洛伊德算法和dijkstra算法的区别?复杂度是多少?讲讲dijkstra算法的具体过程
待研究
反转字符串,要求手写代码,优化速度,优化空间
待研究
给出两个无向图,找出这2个无向图中相同的环路,手写代码
待研究
单例模式,手写代码
生产者与消费者,手写代码
待研究
二叉树镜像,手写代码
待研究
最长不重复子串(最长重复子串),手写代码
待研究
参考
要换工作? 还不来看看面试题?
2017 年 Android 杭州面试经历
2017 年初、阿里、腾讯、百度、华为、京东、搜狗和滴滴面题目汇集(更新篇)
Android 知识梳理
亲爱的面试官,这个我可没看过!(Android 部分)
面试遇到了算法题?看这篇就够啦。
Android 自定义 View 合集
自定义 View,有这一篇就够了
Android自定义View必备