面试完我感觉五味杂陈,八年 Android 开发这种水平要20k?

2023-11-11 14:10

本文主要是介绍面试完我感觉五味杂陈,八年 Android 开发这种水平要20k?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近,帮朋友面试了一个八年工作经验的 Android 开发工程师,面试完我感觉五味杂陈,不知道对方的面试感受如何,这里也不多加揣测了。话不多说,应聘者的大概履历如下:

基本信息姓名:xxx年龄:32性别:男工作年限:8 年求职意向:Android高级开发工程师期望薪资:20k个人描述:本人有 8 年Android实际开发经验,先后待过 5 家公司,负责过各方面 Android 端项目,涉及电商、iot、直播、社交等领域。有独立解决问题的能力,遇到问题尽量是一个人去解决的,具有较强的学习能力,经常关注和了解新技术。拥有良好的团队协作能力和执行能力,吃苦耐劳,能够保证项目进度的平稳进行和快速迭代。技术专长- 熟练掌握 Java,熟悉 Java 虚拟机原理
- 掌握常见的设计模式和数据结构算法
- 掌握Android基础(四大组件、五大布局、多线程等)
- 熟悉Android主流框架(Glide、Retrofit、GreenDao、Logger、Gson等)
- 熟练掌握Android中的 MVP、MVVM 等架构
- 熟悉第三方登录、支付、分享等功能开发
- ......工作经历- xxx软件公司(外包) | 一年 | Android 高级开发负责xxx iot核心模块功能开发,负责xxx部分业务的协同开发,项目性能优化处理等
- xxx软件公司(外包) | 两年 | Android 开发组长负责多个电商产品的Android端研发,带领Android团队从项目搭建到核心功能开发再到项目最终上线,全程都有参与
- xxx软件公司(外包) | 两年 | Android 开发略...(类似,无亮点)
- xxx科技公司(创业) | 两年 | Android 开发负责公司所有android端app的开发工作
- xxx软件公司(外包) | 一年 | Android 开发负责公司Android应用开发工作项目经验- xxx商城项目负责个人中心、订单、退换货和物流信息等模块的开发;消息推送功能的实现;项目的性能优化和打包;
- 其他类似,此处略...

看到这里,你有什么想说的吗?期望薪资20k,你觉得他要多了还是要少了呢?

从工作经历来看,并不是说外包公司不好,只是觉得作为技术人员不能只满足于业务代码的堆叠,虽然对各种业务了然于胸,对职业发展来说也是种宝贵财富,但更重要的不应该是自身的技术能力吗?这才是核心竞争力!我们经常会被问到的一个问题:你觉得你的项目有哪些亮点,可以选取一两个来说一下吗?如果每天纯粹做业务开发,各种 CV 大法而不去思考技术的迭代创新或者可维护性,那么三年和八年的工作经验有什么本质区别吗?我看到最多的借口就是:平时公司任务多,太忙了,没时间去学习。难道是真的没时间吗?还是说每天回去沉浸在游戏、短视频等“纸醉金迷”中无法自拔呢?时间这东西,挤挤还是有的,哪怕是利用每天上下班路上的时间去看一篇技术文章,这对于我们个人来说,也是一种收获。如果真的没时间,那么你有想过跳出这个舒适圈吗?

你可能会说:简历并不能代表一切,有可能他是刚刚准备,还没有来得及完善。好的??,虽然几率很低,但的确也会发生这种情况,那么我们来看看面试的大概过程吧。

PS: ???表示面试官;??♂表示应聘者。

???:先来做个简单的自我介绍吧!

??♂:简历中的内容叙述了一遍,此处略…

???:为什么想来上海发展?

??♂:安逸太久,想改变自己。

???:看你之前开发了这么多项目,有哪个让你收获最大?能不能详细介绍一下你在项目里担任的角色以及收获?

??♂:让我印象最深刻的应该是xxx商城项目,因为之前一般都是我独立去完成整个app的项目开发。这项目里,我主要负责一些核心功能开发,如订单和个人中心,通过这项目,让我个人在团队协作方面有了进一步成长,另外技术框架的封装和使用方面也得到了进一步提升。

???:说到订单功能,你可以说说订单超时的处理思路吗?如果存在多个取消的订单,你会怎么处理?

??♂:只要给每个超时的订单设置一个定时器,时间到了之后就改变订单状态,并刷新列表就可以了。

???:除了给列表中的每个订单设置一个定时器,还有其他实现思路吗?

??♂:暂时想不到了…

???:那么你可以说说这个项目的技术栈组成是什么样子的吗?

??♂:大概是 MVP+Retrofit+Glide+Gson+RxJava+ButterKnife 这种,当然还有自定义View、事件分发机制、动画和异步任务使用等。

???:你可以说一下 Android 中异步任务的实现方式有哪些吗?

??♂:一般是通过 Handler+Thread的形式,也可以使用Runnable,另外还提供了AsyncTask来实现,其他的就记不得了。

???:说到AsyncTask,你有了解过它的源码吗?它的实现原理是怎样的?

??♂:这个不太清楚,没有看过它的源码,但我用过它,知道它里面常见的几个方法,doInBackground用来处理耗时操作,处于异步线程,其他方法在UI线程执行。

???:有听过 HandlerThread 和 IntentService 吗?

??♂:额…好像没有听过

???:那好吧,你可以说一下事件分发机制吗?

??♂:当点击的时候,会先调用顶级 ViewGroup 的 dispatchTouchEvent,如果顶级的 ViewGroup 通过 onInterceptTouchEvent 拦截了此事件,则此事件序列由顶级 ViewGroup 处理。如果顶级 ViewGroup 设置setOnTouchListener,则会回调接口中的 onTouch,此时顶级的 ViewGroup 中的 onTouchEvent 不再回调,如果不设置 setOnTouchListener 则 onTouchEvent 会回调。如果顶级 ViewGroup 设置 setOnClickListener,则会回调接口中的 onClick 方法。如果顶级 ViewGroup 不拦截事件,事件就会向下传递给他的子 View,然后子View(ViewGroup)就会调用它的dispatchTouchEvent方法。

???:(终于能接得上话了)嗯,那么你项目里有处理过滑动冲突的情况吗?如何处理的?

??♂:有处理过 ListView 和 ScrollView 之间的滑动冲突问题,当时应该是通过重写外层ScrollView的onInterceptTouchEvent方法来根据一些特定逻辑判断是否需要拦截。

???:有了解过哪些第三方框架的源码吗?

??♂:额,这个没有看过源码,只是简单知道Retrofit对Okhttp进行了简单封装,Glide用了三级缓存。

???:你知道Activity的启动流程是怎样的吗?

??♂:点击桌面 App 图标,Launcher 进程采用 Binder IPC(具体为ActivityManager.getService 获取 AMS 实例) 向 system_server 的 AMS 发起 startActivity 请求,system_server 进程收到请求后,向 Zygote 进程发送创建进程的请求;Zygote 进程孵化出新的子进程,即 App 进程。App 进程通过 Binder IPC 向 system_server 进程的 AMS 发起 attachApplication 请求,system_server 进程的 AMS 在收到 attachApplication 请求后,做一系列操作后,通知 ApplicationThread bindApplication,然后发送 H.BIND_APPLICATION 消息,主线程收到 H.BIND_APPLICATION 消息,调用 handleBindApplication 处理后做一系列的初始化操作,初始化 Application 等。system_server 进程的 AMS 在 bindApplication 后,会调用 ActivityStackSupervisor.attachApplicationLocked,之后经过一系列操作,在 realStartActivityLocked 方法通过 Binder IPC 向 App 进程发送 scheduleLaunchActivity 请求;App进程的 binder 线程(ApplicationThread)在收到请求后,通过 handler 向主线程发送 LAUNCH_ACTIVITY 消息。主线程收到 message 后经过 handleLaunchActivity,performLaunchActivity 方法,然后通过反射机制创建目标 Activity。

???:嗯好,那么你可以说一下Binder机制吗?

??♂:这个我了解的比较少,只是知道它是C/S结构,是跨进程通信的方式之一。

???:好的,那我们来聊点别的…

??♂:…

???:…

??♂:…


大概面试过程就是这样,后面还问了他一些 Java 基础和多线程,掌握情况不是很好。期间还问了他 synchronized 和 volatile 的区别有哪些,他只回答了三个字:不知道。八年开发,按理来说应该肯定远远不止这个水平,可结果也并不显得差强人意。

另外,从面试者个人项目经验来看,虽然接手过很多项目,而且业务种类也很多,但是并没有吃透其中某一个业务。比如,同样是做电商项目,你有将外面同类知名产品拿来与自己开发的项目进行比较吗?这些产品经历了长时间的市场和用户验证,一定有很多地方是值得学习和思考借鉴的,假如这个功能让你去实现,你有什么思路呢?如何进一步去优化呢?其实我们周围有很多东西值得我们思考和学习,但很多时候我们可能选择了无视。

现在,你觉得给他开多少薪资合适呢?所幸,他当前也已经意识到自己安逸太久,需要突破一下自己了,虽然有些迟,但只要能够努力和自律,相信成长空间也是非常大的。毕竟成事在人,谋事在天。

通过这件事联想到自己最近的裸辞,虽然很多人劝过我不要这么果断,先看看形势,但所幸我做出的应该是正确的决定。如果想要在技术领域站稳脚跟,除了不断汲取新知识,拓宽自己的知识面,更要紧的是挖掘自己的技术深度,这样才不会很容易就被后来人所取代。人不能在一个地方安逸太久,否则,这份安逸会成为束缚自己的泥沼,想挣脱也并非容易了。趁我们还年轻,如果我们心中已作出决定,而苦于时机未成熟、无法实施的时候,倒不如斩断自己的后路,破釜沉舟,背水一战,未尝不可。又或者,待十年之后,你鼓起勇气想破釜沉舟,但是,前方还有多少彼岸任你停靠呢?

本文可能比较枯燥无味,但也点明了一些我们技术人员的现状和挑战 ,找工作不难,难的是找到真正符合我们职业发展规划的那条路。有捷径可以走吗?有!最大的捷径就是早日看清自己的现状,跳出舒适圈,去追求自己真正想要的,并为之奋斗!

对于 Android 开发者来说,要成为优秀的 Android 开发工程师,不只能够让你在工作中更加游刃有余,同样会让你在职业发展中面临更多优质的机遇。而一个初中级 Android 工程师在通往高级甚至是资深工程师的发展过程中,我认为这份Android面试指导手册中超过 90% 的内容都是你必须掌握,且无法绕过的。这些笔记和面试文档已经全部整理收录好了,需要参考学习的可以 点击这里 进行查看。

这篇关于面试完我感觉五味杂陈,八年 Android 开发这种水平要20k?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390605

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta