三年Android开发却只有一年工作经验,是怎么收到offer的?

一、前言

在读文章前,可以先聆听一下我的故事:

从毕业到现在面试也就那么几家公司,单前几次都比较顺利,在面到第三家时都给到了我offer!

前面两次找工作,没考虑到以后需要什么,自己的对未来的规划是什么,只要有份工作,工资符合自己的要求就行!所以在BOSS上选好工资范围,就一顿海投,坐等面试电话!

做了快三年的Android开发,工作的任务也就是一些界面的编写,RecyclerView的简单使用,网络框架也是别人封装好的直接用,再就是集成些第三方的分享、支付什么的!

技术上的提升可以说根本没有,和工作一年左右的人,比起来就多几个项目优势!所以这次出来找工作还期望15K,说起来心里慌的厉害!

于是乎,我反思了一下我的人生:

1、小公司要求不高,自己也抱着只要能做出功能的态度

2、对行业趋势把握不准,没有未来规划(所谓混吃等死)

3、对自己的工作不感兴趣,上班有空闲时间也不会去深入学习

再来说说这次找工作面试的一些经历和感想!这次面试大大小小面试了十多家!依我自己在简历上写的几个商城类APP的工作经验,在智联和BOSS上也只有小公司能叫我去面试!(所以说技术深度很重要)

废话不多说,直接进入正题(这里就不公布公司信息了):

二、面经

第一家:

一个小姐姐把我问得n脸懵逼(一个屌丝程序猴和妹子聊天就紧张,心跳加速,口干舌燥,说话结巴)!

她首先让我自我介绍一下,可脑袋一下像短路了一样!

就说:“你知道的程序员表达能力差,嗯。。。嗯。。。你看简历吧!”她直接一脸无语!

  • 一面

java:

1、jvm启动过程? 验证是验证什么
2、强引用、软引用、弱引用、虚引用,是什么?分别在什么时候用
3、反序列和序列化 为什么要? 什么情况下要?
4、反射 为什么要反射? 什么时候用? 缺点?
5、hashcode 为什么出现、是什么、equals关系

c语言:

6、include 作用、import作用
7、static关键字:c跟java
8、动态编译、静态编译
9、线程通信
10、设计模式:生产者消费者、工厂模式、单例模式(3种实现、为什么双验证)你会怎么设计
11、tcp和udp区别
12、做一道题topk的题,指定用快排的思路

  • 二面
    1、项目及项目里用到的知识
    2、3次握手、4次挥手、为什么不4次、5次
    3、数据结构,10大排序挑2个讲
    4、计算机系统,中断是怎么实现的
    5、计算机系统的锁底层是怎么样实现的
    6、多核cpu,多线程怎么访问同一个内存

Android:

7、怎么学Android
8、handle作用,为什么
9、有没有写过安卓的多线程
还有的有点记不清了

第二家:

面试官特别关注我的实践经验,面试官很和蔼,但我和面试题都很难。

数据库

1.数据库中什么时候用索引?(应用场景)

2.数据库中的索引一般是什么数据结构?

3.数据库中的事务是怎么回事?(我就知道这个…泪目)

网络:

http和https的区别?追问:https的安全信道建立的具体步骤?

TCP为什么比UDP稳定?

JAVA:

进程和线程的区别?

线程安全怎么保证?

什么时候volatile可以保证线程安全?

除了sychronized,还有什么可以保证线程安全的方法?

Android:

Activity A 启动 Activity B,两个Activity的生命周期顺序?(假设完全覆盖,且standard Activity 启动模式)

如果按返回键呢?

sqlite、SharedPreferences和文件的应用场景有啥区别?

手写代码:

一个机会均等的互赠礼物函数:输出一种完全随机的可能性,且不能自己送自己。

每个人准备一份礼物,收到一份礼物。

e.g.

1->N

2->3

N->1

第三家:

面试官是个东北银,一口浓厚的东北口音,觉得还挺平易近人?

  • 一面

1. 自我介绍

2. 笔试题1:删除无序链表中的重复结点(能否优化)

例:输入3 -> 2 -> 4 -> 3 -> 5 输出3 -> 2 -> 4 -> 5

解释:3结点重复,将第二个’3’结点删除(这边的重复指的是结点的值重复)

3. 笔试题2:先说一下二叉树的有哪些遍历方法。写一个二叉树前序遍历的非递归形式。

4. 讲一下Java的内存。

5. 创建一个字符串对象,这个对象分配在哪里?

6. String str = “123” + “456”;会创建几个对象。

7. 问了操作系统的问题,没学过,所以也忘了问了什么。

8. 数据存储有学过吗?数据库和文件保存有什么区别?

9. Activity有哪些启动模式?

10. 有什么要问的?

  • 二面

1. 上一轮面试做了哪2道面试题?

2. 会哪些编程语言?

3. 想做哪个方向?为什么?

4. 对Android比较感兴趣,都学了些什么?

5. ListView源代码有看过吗?

6. 想一下ListView应该是怎么实现的?链表?

7. 给你2个线程,如何产生死锁?为什么会产生死锁?

8. 外存有一定量的数据,需要读取到内存中处理,但是内存的大小是不知道的,要求如何能够读取尽量少的次数,才能处理完全部的数据?

三、醒悟

经过这段时间的面试,懂得了技术深度的重要性,还有职业规划的重要性!

我意识到自己不能这样再咸鱼下去了,我,一个工作三年却只有一年工作经验的Android开发,终于醒悟了!

1、要知道自己到底想要什么很重要。这是第一步,也是最重要的一步。因为这关系到你能够够选对学习方向,能否沉下心来去学习。

我们都知道,做自己感兴趣的事情的时候,是可以事半功倍的,因为你愿意去做它,而不是出于某种原因不得不去做。

因为热爱,是一个人奋斗和坚持的最好的动力。

我以前觉得选择远比努力重要,我选择一个我不喜欢的方向但是可以赚更多。选择远比努力重要的前提是你这个选择得正确,但是能够做出正确的选择的人,他本身就已经是一个优秀的人了。抛开这点不谈,在一个自己不喜欢的领域你能走的多深入呢?

2、要知道人外有人。自满,自大,自欺欺人是影响自己进步的绊脚石。如果你觉得,你现在已经很了不起了,你能做到这个程度已经很不错了,你就会停滞不前,然后浪费大把的时间。

我的经历文章开头也说了,我的学校是末流大学,计算机也不是学校很好的专业,消息也比较闭塞。在我的圈子里,我一直觉得自己很牛。

但是,当我开始准备春招准备校招的时候,我发现我错了,比我优秀的人一大把,我算什么东西。

以前觉得自己会的东西,出去一看,大家其实都会;

以前觉得很多知识等工作了再去学也不迟,出去一看,发现早就有人学会了。

但是,现在认识到这些已经有点晚了,因为已经开始找工作了,没有时间再去让你从头开始学了。

如果有一天,你觉得周围没有人比你更厉害了,一定要记得,不是你走到巅峰了,而是你的圈子,应该扩大了。

只有你的周围,有很多更厉害的人,你才能意识到自己的不足。

你想变成什么样的人,你就要去认识什么样的人,你的周围是什么样的人,你就会变成什么样的人。

要知道,物以类聚,人以群分。

**3、活到老学到老。**为什么要学习呢?学习的目的,根本上是为了获取竞争优势,增加选择机会。你比别人懂得多,比别人学的深,你就更有竞争力。

对于程序员来说,不懂得学习是没有办法在这个行业混下去的。技术的更新换代,技术的深入掌握都需要去不断的学习,如果你不学,很快就会被淘汰了。

学习才能度过职业危机,程序员是高薪职业,近年来互联网的技术高速发展,吸引非常多的人投身到这个行业中,人越多竞争越激烈,很多时候,名企大厂竞争真是堪比高考,千军万马过独木桥。

只有努力学习,才能没有职业危机,只有成为中高端工程师,才能在职场立于不败之地。

一朝成为Android工程师,就注定终身学习。

如果想要成为一个优秀的Android工程师,就要做好随时学习的准备,并持之以恒,这样才能跟上互联网日新月异的发展节奏。

在这里我也分享一份几位大佬一起收录整理的Android学习PDF+架构视频+面试文档+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料

有人会说网上一搜不是一大堆?是的,那一大堆都是散漫的,我们系统性的学习,效率是可以事半功倍!

如果你有需要的话,可以私信我【资料】我发给你,欢迎大家来白嫖~

喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗~

猜你喜欢

转载自blog.csdn.net/ajsliu1233/article/details/107186191