2022年互联网平均薪资18500元,你拖后腿了吗?

互联网春招正当时,阿里、字节跳动、美团、网易等企业都已启动春招,动辄年薪20W+、各种补贴、年底分红、股票期权......

大厂作为互联网行业的风向标,其福利待遇一定程度上反映了行业招聘现状:互联网行业对优质人才的投入成本依然保持着积极增长。

据拉勾招聘发布的《2022年互联网行业春招薪酬报告》显示,2022年以来,互联网行业平均薪资为18500元,较去年同期增长7.5%。

2022年互联网平均薪资18500元,你拖后腿了吗?_第1张图片

虽然现在正处于疫情爆发时期,但是这根本不会成为程序员跳槽路上的绊脚石,以渔村为例:从深圳在发布居家办公通告后,13日晚,深圳许多“打工人”选择连夜从公司往家里搬电脑,拷资料。

2022年互联网平均薪资18500元,你拖后腿了吗?_第2张图片

目前行业现状就是:大厂求贤若渴,而大部分程序员却找不到满意的工作。究竟是行业不饱和还是行业太饱和?

又要到金三银四的跳槽季了,在这样的背景下,对于准备跳槽的猿猿来说并不是很友好,想要拿到心仪的offer要下一番苦心了

2022年互联网平均薪资18500元,你拖后腿了吗?_第3张图片

那么怎么才能更好的进大厂呢?

提升自身实力。只有自身水平够硬才是大厂的敲门砖,啥学历、资历,那些都是借口!

互联网时代,网上有很多免费学习资料,只要你用点心,也总能找到学习资料。但是,很多时候,效率很重要,网上纵有很多免费消息,但是一来花费你的时间,二来自己摸索也会踩不少坑,三是不够系统

为了让更多的小伙伴可以在面试的时候取的更好的offer,下面整理了近年来大厂面试中的原题,希望大家能在跳槽前做好准备。

Part 1—Android基础

Android系统

AMS

  • binder讲解
  • binder Native
  • AIDL使用
  • binder原理
  • binder原理和实现一次拷贝的流程
  • Android跨进程通信
  • ActivityThread里面启动那个线程是干嘛的?

binder

  • 进程间通信的优势
  • binder是不是异步的?
  • linux有哪些线程间通信,android这种线程间通信有什么优势
  • 安卓有进程通信方式有哪些
  • binder的内存映射为什么只需要复制一次

handler

  • handler的实现原理
  • msg队列中没有消息线程处于什么状态、怎么唤醒的
  • looper的阻塞是通过什么实现的
    管道
  • 怎么给线程创建looper的
  • handler的定时任务的实现
  • looper.loop做了什么
  • 线程 looper hander 消息队列分别都会有几个
  • message队列中没有消息后,当前线程处于什么状态,当消息再次来到的时候怎么通知当前线程
  • 信号量唤起线程是怎么实现的
  • Looper为什么不会造成ANR
四大组件

Activity

  • Activity的生命周期
  • activity生命周期,A到B按返回,生命周期顺序。
  • B是SingleTop、B启动B会执行哪些生命周期方法
  • A到B到C,C退出想跟A通信,怎么设计启动模式,如果A被回收了呢(有涉及onNewIntent)会不会启动onResum?
  • Activity的启动模式有哪些
  • Android为啥么要有Activity的存在
  • Activity和window的关系
  • Activity的启动流程
  • 如何知道Activiyt渲染完成
  • 在Activity的oncreate方法中调用finish都执行哪些生命周期
  • fragment生命周期
  • Fragment只能在Activity中运行吗
  • Activity外部启动是否运行到其他进程、Activity的崩溃是否会影响其他进程的崩溃
  • 怎么解决,如何设置只在自己的进程中运行

Service

  • service的生命周期
  • intentService和Service区别
  • HandlerThread的实现和作用
  • service和Thread的区别还有优缺点
  • 一个app中两个service 一个服务进程 一个前台进程是否同时回收
  • Service和Thread如何选择

Broadcase

  • 有哪几类广播
  • LocalBroadcas的实现原理

ContentProvider

  • 四大组件哪些是运行在主线程的
View相关

View的事件分发

  • view事件分发原理
  • view的cancel事件都什么时候触发
  • view的cancel事件都什么时候触发
  • 一个listenerview里面有button,当点击button以后再划出 抬起,整个事件是怎么分发的
  • 两个view 、蓝色在外、红色在内,点击红色移动到蓝色,松手哪个click事件执行了,事件怎么传递的
  • 手指离开view时view收到的最后一个事件
  • Activity可以做事件拦截吗,可以在开始就拦截吗,有dispatchTouchEvent吗
  • 怎么解决滑动冲突
  • 怎么加大view事件点击区域

view的绘制

  • view的绘制流程
  • view的三个重要方法的详细实现
  • view和viewgroup中onLayout的区别
  • 介绍一下mesure方法
  • Measure三种模式的含义
  • ondraw方法都什么时候调用
  • 如何自定义一个ui组件,请举例介绍下
  • 实现圆形头像的方法
  • 自定义view,getWith和getMeasureWith什么区别,什么时候不一样,layout的时候给left和right的宽度如果跟getMeasureWith不一样会怎样
  • 两个view在父布局中比重为1和2,显示结果是什么。(重点为2次measure,最终宽度为本身宽度+剩余父空间在比重所占的比例)
  • 怎么获取view的高度
  • handler.post 能不能获取到高度
  • onCreate设置了contentView之后,获取它里面的一个textview的宽高能获取吗,如果想获取宽高如何去做?
  • 如果想让一个imageView高度跟着一个textview的高度变化怎么做
  • onGlobalLayoutChange里能获取到宽高吗
    -还在onCreate的时候用textView.post,之后再runnable中能获取宽高吗,为什么
  • view.post有自己的队列吗
  • view的x和left区别
  • vsynch信号收到以后有没有做什么特殊处理
  • view的requestLayout和Initlayout区别

动画

  • 动画分哪几类。
  • 动画总结。 重点是属性动画内部实现原理,差值器和估值器的使用
  • 属性动画和补间动画的区别
  • 怎么实现一个View怎么绕着圆心转

Window

  • Activity,Window,DecorView之间的关系
  • 一个Activity一定会有一个window吗,如果有什么时候创建的
  • setContentView是加在DecorView的什么地方,DecorView是什么样的布局,什么样的结构
  • 如何开启一个window
  • popupwindow的原理
  • Activity中的window是什么时候创建的
    Activity的attach方法中
  • DecorView是什么时候创建的
    setContentView

sp

  • 实现原理
  • 是不是线程安全
  • 是不是进程安全的
  • 怎么实现进程安全

context

  • android有哪些Context
两个虚拟机区别

Dalvik

  • Dalvik基于寄存器
  • jvm基于栈
  • 执行的是dex字节码格式
  • 多个class装载在一个dex文件

ART

  • 应用在第一次安装的时候会预编译成机器码
  • Dalvik每次启动都要编译、ART只需要首次。所以后面启动速度更快
  • ART占用空间大(原始代码占用空间大)
  • 减少编译、减少cpu使用频率

进程

  • 进程之间的优先级。 前台进程、可见进程、后台进程、不可见进程与空进程
  • 如何起多进程
  • 起多进程有什么好处
  • 实现跨线程通信和跨进程通信的方式

其他

  • aar打包R文件怎么处理的
  • 65535方法数限制的原理、及怎么解决
  • android里面的序列化方式有哪些,分别有什么区别,性能上哪个好,为什么,parceable可以持久化到本地吗?
  • AsyncTask内部实现原理
  • 安卓里有哪些ClassLoader,有用过pathClassLoader吗
  • Serializable和Parcelable的区别,各自的优势
  • 一个bitmap,怎么计算内存(RGB888)
  • Android 4.0, Android5.0,Android8.0版本安装过程有啥区别
  • 不同drawe文件加载在内存的区别
  • 一个图片加载到内存占用占有多大内存
  • 一个图片像素除了四个字节的表示还有什么表示方法
  • recylerview缓存机制
  • ASyncTask原理

Part 2—Java基础

类加载

  • ClassLoader的双亲委派原理
  • loadclass和findclass方法的关系
  • 类加载机制:
    DexClassLoader可以加载jar/apk/dex,可以从SD卡中加载未安装的apk
    PathClassLoader只能加载系统中已经安装过的apk
  • java类在虚拟机中分哪几种状态

引用类型

  • 内存泄漏的场景
  • 强软弱虚引用分别什么区别
  • 什么场景下使用虚引用

JVM

  • GC的原理
  • java垃圾回收算法
  • JVM内存模型
  • 方法区里面存的是什么
  • 虚拟机中堆有几个栈有几个
  • java内存结构,分成哪几个区域,其中哪些区域是线程共享的?
  • jvm哪些放在栈哪些放在堆

语言特性

  • hash和equel方法的区别,不都实现会有什么问题
  • 对多态的理解
  • 对泛型的理解和使用场景
  • 什么是类型擦除
  • 内部类为什么能使用外部类的私有方法
  • 反射的实现原理
  • 面向对象6大原则

Part 3—数据结构

  • hashmap的实现原理
  • hashmap扩容因子是怎么计算的,分子分母是谁
  • hashmap怎么找到index
  • size为啥是2的倍数
  • 怎么样resize,resize之后之前的hash冲突还存在吗
  • hashmap1.7之前和之后有什么区别
  • 为什么1.7以后hashmap用了红黑树 不用别的树
  • hashmap是不是线程安全的、有没有什么实现线程安全的方案
  • CocurrentHashMap的实现原理
  • LinkedHashMap 是不是线程安全的
  • SparseArray与HashMap的区别
  • ArrayList是线程安全的吗?默认初始容量是多少?
  • ArrayMap和SparseArray
  • LruCache实现原理(分为内存lru和diskLru两种实现)
  • 了解红黑树吗
  • recyclerview工作原理与绘制流程,以及多层缓存机制怎么做的
  • 系统中用到代理模式的地方

Part 4—性能优化

包体积

  • 包体积优化
    1.删除无用资源
    2.图片只保存一份
    3.资源下沉,上层业务只使用一份
    4.开启代码混淆、优化代码混淆
    5.图片压缩
    6.资源混淆,微信的资源混淆工具
    7.zip压缩
    8.so静态链接转动态链接。
    9.搬,将大文件进行远程下载
    10.监控:图片过大、体积过大、无用资源。

内存优化

  • 内存泄漏的检测
  • 内存泄漏出现的场景
  • 内存泄露的本质原因
    长生命周期对象引用短生命周期对象
  • 什么是内存抖动
    不断创建和回收重复对象,导致系统频繁GC,而GC会引起主线程阻塞,最终导致UI卡顿
  • 不用Leatcanary怎么分析内存泄露
  • 如果要加载一个大图片如何优化
    1.缩放比例
    2.采样率
    3.解码格式
    4.lrucache

布局绘制

  • 布局优化的几个方法
    1.减少嵌套层级使用 include、merge和viewstub等标签
  • 减少重复绘制
    1.减少不必要的背景
    2.widow设置空背景
    3.clipRect方法设置绘画区域
  • viewstub 可以重复加载吗
    不能,只能inflate一次
  • 绘制优化(不要在onDraw方法里面创建新的对象)
  • 影响feed流体验的关键指标,如何优化
  • 如何优化fps

网络优化

  • 网络优化
    1.优化数据结构,压缩数据
    2.根据业务合并/拆分请求
    3.根据屏幕密度下发不同size的图片
    4.dns缓存,缓存多个域名对应的缓存,减少解析频率
    5.根据网络状态下发不同size的图片
    6.根据网络状态动态调整轮训频率
    7.列表数据分页加载

启动速度优化

  • 启动速度优化
    1.延迟初始化
    2.耗时操作开线程
    3.设置主题背景,防止黑屏

卡顿优化

  • cpu占用过大怎么排查
  • ANR是怎么发生的,如何排查
    1.5S内无法响应用户输入事件
    2.广播在10s内没处理结束
  • trace文件内容和如何生成
  • 如果一个list中加载了很多图片怎么优化

Part 5—计算机网络

  • http1.0和2.0之前的区别
  • https的加密原理
  • https抓包原理
  • 如何防止抓包
  • 对称加密和非对称加密的区别
  • md5和sha1区别
  • http协议的组成
  • .http请求头中都有哪些参数
  • 简单说下网络请求的整个过程。
  • 发起一个网络请求,经历哪些步骤
  • http协议几次握手,几次挥手?
  • TPC为什么需要三次握手
  • UDP和TCP的区别
  • http和https的区别:
  • https的请求流程
  • http1.0和2.0区别
  • post和ger区别
  • tcp链接数据包什么时候发出,数据包间时间间隔
  • 网络优化有啥方案

Part 6—设计模式

  • mvc 、mvp、mvvm的区别
  • mvp的内存泄露怎么搞
  • mvvm使用livedata会不会有什么内存泄露问题
  • 你理解的MVVM是什么样的
  • 动态代理的实现
  • 项目中用到了哪些设计模式
  • 责任链模式的优缺点
  • 了解android中哪些设计模式
  • AOP IOC DI
  • 代理模式的类图
  • 依赖注入和控制反转
  • 一系列依赖任务的场景用什么设计模式
  • 看源码中哪些设计比较印象深刻
  • 静态代理和动态代理的区别

Part 7—算法

  • 经典的排序算法
  • N中有多少个7 (77算两个7)
  • 二叉树的层序遍历
  • 算数表达式转化成二叉树
  • 01背包问题
  • LeetCode 11 盛水最多的容器
  • 两个无序数组,查找重复元素
  • 链表上删除倒数第K个节点
  • 写个二分查找
  • 在旋转数组中输出一个数的index,不存在就输出-1
  • 一个字符串去重且保持原有相对顺序
  • 一个数组中,数都是成对出现只有一个是单独的 如何快速的找出它
  • 链表逆转
  • 最大子段和
  • 层序遍历二叉树
  • 合并两个有序的数组
  • 归并排序
  • 一个无序的int数组,给一个target数字找出数组中两个数字相加为target并输出坐标
  • 桶排序
  • 之字形打印二叉树
  • 插入排序
  • 快排
  • 二维数组中全是0和1,求岛的个数
  • 二维数组(n,n),横向和纵向都是升序,给定数字查找是否在其中:从(0,n)位置开始找,大于往下走,小于往左走
  • 无序数组找第K大的值:采用快排思路,先按某个值划分大小组,如果大组数量大于K,那么用大组的数据继续进行大小组划分,如果大组数量小于K,累计记录大组的个数和,
  • 两个有序链表合并成一个链表
  • 二分查找
  • 二叉树公式

Part 8—其他技术

  • hotpach的实现
  • 多渠道怎么打
  • 进程保活的方法
  • .google的jetpact
  • 安卓中进程分哪几种,什么区别,这么分的作用
  • webview和js通信的方式

flutter

  • flutter三个绘画树的工作原理
  • Flutter channel设计
  • flutter如何做状态管理
  • Flutter中inheritedwidget是怎么实现的
  • Flutter的动态化怎么搞的
  • flutter和native直接怎么共享图片,内存的共享
  • dart的消息机制

Part 9—HR

  • 为什么离职
  • 和前面面试官聊的怎么样
  • 了解我们公司吗
  • 讲一个你最骄傲的项目
  • 你之前公司给你带来了哪些成长
  • 这次出来主要看哪个方向的机会
以上这些问题的参考答案我也给大家整理成PDF文档了,内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。

一些过来人的建议

有些程序员自认自己技术挺好在面试时薪资谈判时觉得自己要求很低,但还是被淘汰了,因此想不通原因,这都是因为对自身的技能层级认知不够清晰,进行了错误的判断。2022可谓是招聘面试寒冬,不少大厂,如腾讯、字节的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言。过硬的技术功底是最起码的考核要求,面试前做准备是很重要的。

√最后关注我,我们一起学习Android,共同进步啊~

你可能感兴趣的:(android程序员面试问题)