当前位置: 首页 > news >正文

3年 Android 开发的面试心经(后悔当初没有拿 N+1)

作者:勇闯天涯

当某人顺利通过大厂面试时,总会有人认为这是运气比较好罢了,但他们不曾得知对方之前受过多少苦和委屈,又付出了多少努力一步步去突破这些困境。正是因为他们的努力付出,在合适的时间与地点,用自己付出的成果牢牢找抓了自己的机遇。遇到机遇这可以说是运气,能不能抓住这还得看你自己的实力。

废话不多说了,直接来说说我最近的面试经历吧。我投简历的公司有很多,基本都收到了面试通知的邀请,其中有让我心血沸腾的简历,也有让我感到失望到无助的经历,于是我将这些经历都记录下来了,细想之后很值得,面试了这么多家公司,要是到最后什么都没有留下来,那就白白浪费了这么多的时间。至少对我来说将一些好的经历与差的经历进行整理总结,最后肯定能等到我想要的答案。希望这些能给想换工作的大家提供帮助。

离职原因

公司裁员的时候我们老大对我说:你留下来好好干,后面不管公司怎么分股份、期权、肯定不会少你。当时我很信任老大,跟着老大一起干感觉就是一种享受。

但是没有想到公司裁员后,公司内部动荡很大,主业务线从客户端A业务线转移到B业务上。我主要负责的是A客户端的架构,于是我闲下来了。B业务线那边很忙,没时间配合我做一些架构上的事情。于是我每天就在脑补的查看各种学习文档,补充知识点能量。

做了几天后,后悔自己当时没有那 N+1 走人,有种被老大忽悠的感觉。因为后面发生的是我就暂且不讲了。只怪本人经历尚浅,看不清一些大的趋势,还是老鸟们聪明,拿钱走人,然后换一个新工作,好不自在啊

没过多久我就离职,开启了我的面试之旅~

面试分级

我在家休息了一周左右的时间,给自己简单的放松了一下。休息完后就开始了投递简历(世界那么大,我想去看看)。这次看机会与以往不同,我决定先想好好的准备一番,然后开始投递简历,主要通过的是朋友内推,Boss直聘。

这次看机会我将所有公司分为三类:

1.A类: BAT公司,非常靠谱,各项待遇都是很优厚的
2.B类:一些知名的互联网公司(基本都在C轮以上),基本很靠谱,该有的都少不了
3.C类:就是那些正在招聘的公司,没啥名气,虽然钱多但是事也多。靠不靠谱真还不知道,只能碰运气

基础很重要

以前自己一直觉得从事 Android 开发工作都好几年了,去面试基础问题应该没什么问题。正式因为自己傲娇的自信,导致自己总是碰壁,尤其是遇到很多基础性的提问,一时尴尬的不知道怎么回答?还有一种情况就是,一些问题面试前都记得很准确,但到我回答的时候,却怎么也打不上了。

于是在这次面试前,我在网上收集整理了一些 Android 开发相关的学习文档、面试题等进行了复习学习。还把自己之前做过的一些项目中遇到的问题进行了回顾,并找到了相应的解决方案。心想这次应该没有那么尴尬的碰壁了吧。

为了方便以后能够利用空余时间进行查阅翻阅复习,我特此整理在该笔录里面了,如有需要参考的可以直接去我 https://qr18.cn/CgxrRy 访问查阅

刚踏入架构师之路的经历

这次我给自己的规划是做一个架构师,但是我深知架构师可不是闹着玩的,必须要有很强的一面,因此我在简历里面写的只是“架构师方向”。我在K公司 做得是架构师方向,因此我觉得有必要朝着这个方向发力,虽然现在不是很厉害,但是坚持一两年后,即使不是非常厉害,但是也距离非常厉害很近(这里使用了《孙子兵法》的一句:“求其上,得其中;求其中,得其下,求其下,必败。” )。

这个想法来源于在K 公司我第一任leader曾经跟我说过的话:『对于新东西,如果你觉得掌握了,但是不应用到项目里面来,是没有什么意义的,时间长了还是会忘记的。』我很庆幸我有一个好老大(我是属于双领导型的,K 公司 A项目的负责人是我的leader,但是我的直接汇报对象是 K 公司的副技术总监,下文就成为老大),用他的话来说就是经常踢着我的屁股走。

当我在网上了解到很多实用的新技术时,跟他随意吐露一句话,他就能非常用心的倾听我的想法,并鼓励我将这些东西带入到项目中来。从那以后我就开始看很多新技术,感觉合适的会引进到我们的项目中。从之后的证明中来看,是非常有价值的。

面试经历

A公司一面

  1. 自定义view
  2. Handler机制
  3. 组件化和插件化
  4. HashMap的源码
  5. retrofit和okhttp的源码用到了哪些设计模式
  6. NDK静态库和动态库编译流程
  7. openGL渲染模式
  8. Android中的动画有哪些它们之间的区别
  9. 谈谈mvvm

A公司二面

  1. 讲之前做的项目负责哪块,根据业务采用什么架构
  2. 使用过哪些设计模式,项目中遇到哪些棘手的问题,如何解决的。

A公司三面

这个是hr说,整体问下以前公司的情况等问题

感受:自己简历上写的东西要熟悉,基本面试官都是根据简历来问的。对自己以前做的项目也好好梳理,提前组织好语言,挖掘项目闪光点。

B公司一面

  1. java引用,以及引用队列,以及使用场景
  2. 拆装箱
  3. LeakCanary
  4. map
  5. 线上性能监控
  6. SharedPrefrence 遇到的问题
  7. 手写算法

B公司二面

  1. Handler
  2. 进程间通信
  3. 序列化
  4. 动画
  5. native崩溃捕获原理
  6. 结合项目提问
  7. Recyclerview的点击事件原理
  8. 启动一个空的apk,回启动几个线程
  9. 手写算法

B公司三面

  1. 跳槽原因
  2. 原来公司规模
  3. 预期薪资
  4. 个人优势

感受
1.简历上写的一定要了解,并且知道原理
2.多熟悉项目,找出一些能聊得功能点
3.崩溃捕获,以及解决(java ,native)
4.优化需要知道(大厂都会问)
5.了解由点到面,需要把知识连贯起来
6.还有如果想要高薪,一定要多跳槽,一般大厂工资涨幅都是有限度的,最高涨幅百分之30,除非你特别牛皮

C公司一面

  1. MediaCodec连环炮:MediaCodec报错,只有错误码,没有任何其它信息,如何解决?使用MediaCodec遇到了哪些问题?同步使用和异步使用有什么区别?
  2. 如何计算音频帧,一帧音频帧有多大
  3. YUV基础知识,相比于RGB减少了多少空间,YUV 各个分量都是0实际渲染出来是什么颜色的,NV21和NV12有什么区别
  4. MP4是如何存储音视频文件的,它是什么结构
  5. OpenSL 相关的问题,如何使用。可以干什么不可以干什么
  6. 结合项目问题

C公司二面

1.SurfaceView和TextureView区别
2.OpenGL ES相关问题,MVP矩阵左乘和右乘有什么区别,什么是外部纹理,为什么叫外部
3.OpenGL如何渲染一个View
4.VBO是用来干嘛的解决什么问题
5.结合项目问问题

C公司三面

1.项目是什么架构,如何设计的,为什么这么设计
2.算法题:字符串反转
3.平时如何学习的

感受:音视频开发感觉OpenGL ES问的比较多

D公司一面

1.问的项目中哪些用到了hook技术,是怎么实现的
2.Okhttp底层原理
3.点击应用图标的启动流程
4.hashmap在java7和java8的区别,为什么要引入红黑树

D公司二面

1.项目是怎么搭建的,用到了哪些技术点
2.arouter用到了什么技术点,是用来解决什么问题
3.socket底层原理
4.一个功能是如何从分析需求到落地的
5.如何带领团队的

感受:主要简历要写的好,尽量围绕简历上的点来刷面试题,不一定都要研究透彻,被问到自己不熟的点,可以尽量尝试着往自己熟悉点带,例如之前我被问到pms是怎么管理package信息的,我就说目前我对pms了解不深,主要也是研究了ams,然后就把自己了解的说一下就好了。

总结

先说再投简历前,首先要对自己的简历进行优化,简历中填写的一些项目经历要熟悉。还有就是在面试前期要复习好基础知识点,不要像文章前面说的,等到被提问是自己回答不上来,那就真的尴尬了!!!

最后跟大家分享一下我这面试前期进行收集整理复习的一些 Android 开发相关的学习文档、面试题、Android 核心笔记等等文档,希望能帮助到大家学习提升,为了方便以后能够利用空余时间进行查阅翻阅复习,我特此整理在该笔录里面了,如有需要参考的可以直接去我 https://qr18.cn/CgxrRy 访问查阅

祝想找工作换工作的小伙伴们都能去自己心仪的公司,前程似锦!

相关文章:

3年 Android 开发的面试心经(后悔当初没有拿 N+1)

作者:勇闯天涯 当某人顺利通过大厂面试时,总会有人认为这是运气比较好罢了,但他们不曾得知对方之前受过多少苦和委屈,又付出了多少努力一步步去突破这些困境。正是因为他们的努力付出,在合适的时间与地点,用…...

【c语言】 -- 指针进阶

📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章来学习指针进阶。 让我们开启c语言学习…...

软件压力测试对软件产品起到什么作用?

一、软件压力测试是什么? 软件压力测试是一种通过模拟正常使用环境中可能出现的大量用户和大数据量的情况,来评估软件系统在压力下的稳定性和性能表现的测试方法。在软件开发过程中,经常会遇到一些性能瓶颈和稳定性问题,而软件压力测试的作…...

Stephen Wolfram:那么…ChatGPT 在做什么,为什么它有效呢?

So … What Is ChatGPT Doing, and Why Does It Work? 那么…ChatGPT在做什么,为什么它有效呢? The basic concept of ChatGPT is at some level rather simple. Start from a huge sample of human-created text from the web, books, etc. Then train…...

机器学习基础(五)

决策树 决策树是一种预测模型,它代表着对象属属性与对象值之间的一种映射关系。树中的每个节点代表一个对象,分叉路径(或者叫树枝)则代表一个属性值。 决策树常用方法: 分类树分析,是一种监督学习,用于预计结果可能为离散类型。 回归树分析,用于预计结果为实数。 CART,…...

阿里云服务器安装WordPress网站教程基于CentOS系统

阿里云百科分享使用阿里云服务器安装WordPress博客网站教程,WordPress是使用PHP语言开发的博客平台,在支持PHP和MySQL数据库的服务器上,您可以用WordPress架设自己的网站,也可以用作内容管理系统(CMS)。本教…...

【100天精通python】Day37:GUI界面编程_PyQT从入门到实战(上)

目录 专栏导读 1 PyQt6 简介: 1.1 安装 PyQt6 和相关工具: 1.2 PyQt6 基础知识: 1.2.1 Qt 的基本概念和组件: 1.2.2 创建和使用 Qt 窗口、标签、按钮等基本组件 1.2.3 布局管理器:垂直布局、水平布局、网格布局…...

数据结构—散列表的查找

7.4散列表的查找 7.4.1散列表的基本概念 基本思想:记录的存储位置域关键字之间存在对应关系 ​ 对应关系——hash函数 ​ Loc(i) H(keyi) 如何查找: 根据散列函数 H(key) k 查找key9,则访…...

Expo项目 使用Native base UI库

装包: yarn add native-base expo install react-native-svg12.1.1 Index.js: import React from react import { View, Text } from react-native import useList from ./useList import { NativeBaseProvider, Button, Box } from native-base import styles f…...

74、75、76——tomcat项目实战

tomcat项目实战 tomcat 依赖 java运行环境,必须要有jre , 选择 jdk1.8 JvmPertest 千万不能用 kyj易捷支付 项目机器 选择 一台机器 ,安装jdk1.8的机器下载tomcat的包 上传到机器,解压tomcattomcat文件 bin文件夹: 启动文件 堆栈配置文件 catalina.sh JAVA_OPTS="-Xm…...

jmeter errstr :“unsupported field type for multipart.FileHeader“

在使用jmeter测试接口的时候,提示errstr :"unsupported field type for multipart.FileHeader"如图所示 这是因为我们 在HTTP信息头管理加content-type参数有问题 直接在HTTP请求中,勾选: use multipart/form-data for POST【中文…...

C#调用C++ DLL传参byte[]数组字节值大于127时会变为0x3f的问题解决

最近做了一个网络编程的DLL给C#调用,DLL中封装了一个TCP Client的函数接口,如下所示 //C TCP报文发送接口 int TcpClient_send(unsigned char* buffSend, unsigned int nLen) {unsigned char buff[1024];int len StringToHex(buffSend, buff);int nRet…...

【vue3+xlxs+xlsx-style-vite】vue3项目中使用xlsx插件实现Excel表格的导出和解析,已实现

在vue3项目中使用xlsx插件实现Excel表格的导出和解析 1、xlsx插件包官方 xlsx插件包官方 2、FileReader官方文档:FileReader官方文档 安装xlsx和xlsx-style-vite、file-saver npm install xlsx npm install xlsx-style-vite npm install file-saverpackage.json中查…...

Doris2.0时代的一些机遇和挑战!

300万字!全网最全大数据学习面试社区等你来! 上个周五的时候,Doris官宣了2.0版本,除了在性能上的大幅提升,还有一些特性需要大家特别关注。 根据官网的描述,Doris在下面领域都有了长足进步: 日志…...

Leetcode-每日一题【剑指 Offer 32 - I. 从上到下打印二叉树】

题目 从上到下打印出二叉树的每个节点&#xff0c;同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回&#xff1a; [3,9,20,15,7] 提示&#xff1a; 节点总数 < 1000 解题思路 1.题目要求我们从…...

网神 SecGate 3600 防火墙任意文件上传漏洞复现

0x01 产品简介 网神SecGate3600下一代极速防火墙&#xff08;NSG系列&#xff09;是基于完全自主研发、经受市场检验的成熟稳定网神第三代SecOS操作系统 并且在专业防火墙、VPN、IPS的多年产品经验积累基础上精心研发的高性能下一代防火墙 专门为运营商、政府、军队、教育、大型…...

把独显塞回CPU,新核显能够媲美RTX 30、40系显卡了

上个月&#xff0c;AMD 发布了 Zen4 架构 R5 7600X 的无核显版 - 7500F 。 各种数据评测和玩家实际体验大家也已经看过了&#xff0c;说是变相降价一点不错。 原因也很简单&#xff0c;感谢 Intel 。 Jon Peddie Research 刚出炉报告显示&#xff0c;2023 第二季度 AMD 客户端…...

Python爬虫——scrapy_工作原理

引擎向spiders要url引擎把将要爬取的url给调度器调度器会将url生成的请求对象放入到指定的队列中从队列中出队一个请求引擎将请求交给下载器进行处理下载器发送请求获取互联网数据下载器将数据返回给引擎引擎将数据再次给到spidersspiders通过xpath解析该数据&#xff0c;得到数…...

gRPC vs REST:创建API的方法比较

本文对gRPC和REST的特征和区别进行了介绍&#xff0c;这可能是当今创建API最常用的两种方法。 文章目录 一、gRPC的介绍 二、什么是REST&#xff1f; 三、什么是gRPC? 四、gRPC和REST的比较 &#xff08;1&#xff09;底层HTTP协议 &#xff08;2&#xff09;支持的数据…...

缓存平均的两种算法

引言 线边库存物料的合理性问题是物流仿真中研究的重要问题之一,如果线边库存量过多,则会对生产现场的布局产生负面影响,增加成本,降低效益。 写在前面 仿真分析后对线边Buffer的使用情况进行合理的评估就是一个非常重要的事情。比较关心的参数包括:缓存位最大值…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...