二本毕业,我是如何成为BAT-安卓开发工程师?

1.对基础原理不断挖掘

进入公司,我的职位是Linux应用开发工程师,做App网络传输模块,本质上就是把本地的数据通过socket传输到服务端。用到的技术是C语言,网络编程,多线程编程。

那时是最痛苦的几个月,因为非计算机出生,很多东西都不会,经常程序段错误,都不能定位到问题代码。

当时处于试用期间,秉承着不成功则成仁的心态开始恶补相关的基础知识以及代码规范。那时网络上没有现成的视频资料,艰难地把计算机专业的书籍自学了一遍。例如,数据结构与算法,计算机网络,操作系统原理,计算机体系结构……

image

熬过了试用期,产品也上线了,第一次体会到成就感爆棚的感觉。

**现在回头看,经验就5个字:原理很重要。**很多看起来没用的原理,其实是重要基础。比如:

你能讲清楚函数的调用过程吗?是怎么调用的?怎么返回的?参数是怎么传递的?函数的内存布局是怎么样的?

如果了解这些原理,就可以快速使用各种开源库。可以更快地熟悉各种中间件sdk的使用方法。刚入行技术不求多,熟练掌握一项技术,能把原理讲清楚,拿得出手才有基本竞争力。

2.专注方向

了解技术全貌,做合格架构师

基础仅仅是开始,技术要有应用场景,转化为产品才能最大化地产出价值。

后来,我自学了Android开发,比如UI开发,网络开发。当时也是夜郎自大得以为UI开发就是Android的全部。投递了很多大厂的Android岗位,却没有收到面试邀请。回过头来再做分析岗位需求时,才发现自己技术栈背景确实不匹配,就算进了面试,好多问题也都答不上。比如:

1. 动态化混合渲染技术架构是怎么样?怎么提高开发效能?

2. 产品的DAU有多少,如何保证稳定性高且可用的?

3. 如何跟踪用户行为,利用大数据完善产品功能,降低运营成本?

这些​
问题让我意识到,语言、UI和原理只是程序员的基本技能而已。

**想要进一步发展,不光只考虑个人技术,必须在整个产品生命周期、开发、运维、能效上有合理的架构,进而满足行业的发展需求。**你不光需要考虑业务需求如何实现,更多的重心需要关注开发提效,大团队并行开发协作,大流量稳定性保障。

image

学习Weex技术,Rn技术后,颠覆了我对移动APP开发的认识。如果写native页面,可能一天一个页面,Android iOS就需要2个人日,Weex是跨平台渲染,一份代码可以在Android iOS两个平台使用。那开发一个页面就只需要原来一半的资源。通过新技术合理架构提升研发效能,动态化技术提升发布成本。

**无论程序多么完美,Bug永远存在。**对于线上故障,如果不能提前预防以及快速解决,损失可能不堪设想。所以线上运维,异常监控,性能监控,数据埋点是优秀架构师的必备技能。

自学的过程是痛苦的,移动端的技术日新月异,很多前沿的技术还没有体系化的书籍,只能在论坛,博客等看零碎的文章,学习效率比较慢。要想高效的学习一线技术,网络课程是一种新的选择。有老司机指导方向,避免走弯路,事半功倍。

3.沉淀经验

适应发展,做技术的领头羊

有良好的技术基础,学会了行业流行的框架,可能只是获得了进入大厂的敲门砖。**多少人努力进入大厂,最终默默无闻地进去,悄无声息地出来。**没错,平台很重要,但更重要的是你能在这个平台上发展到什么程度。

这个日异月新的时代,不光需要Follow一线技术,更重要的是要引领时代,才能在技术快速发展的阶段不被淘汰,或者才能在下一次技术革命中抓住机会。

如果仅仅只掌握Android本身的技术是不够的,比如说在iot时代有这样一个需求: 做一个APP完成智能硬件的一键WiFi配网。这个就需要对TCP/IP协议栈,WiFi加密,网络抓包等有深入的理解。

所以最重要的是突破当前岗位需求的设限,对各种技术融会贯通,创造新的技术框架,做技术的领头羊,适应时代发展。

技术人成长不能再单打独斗,要学会与人交流,学会将别人的知识为自己所用。如果你依然觉得有些茫然,不如跟有多年Android开发经验的资深工程师聊一聊。

最后附上小编整理出来的Android相关的学习思维导图,让大家有个学习的方向,早日拿到大厂的offer。

Android进阶

image

image.png

需要这些安卓学习资料和面试资料的大伙需要的关注+点赞+加群:185873940 免费获取!

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取
鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[FreeRTOS 功能应用] 互斥访问与回环队列 功能应用

文章目录 一、基础知识点二、代码讲解三、结果演示四、代码下载 一、基础知识点 [FreeRTOS 基础知识] 互斥访问与回环队列 概念 [FreeRTOS 内部实现] 互斥访问与回环队列 [FreeRTOS 内部实现] 创建任务 xTaskCreate函数解析 本实验是基于STM32F103开发移植FreeRTOS实时操作系…

解决WebStorm中不显示npm任务面板

鼠标右键项目的package.json文件,然后点击show npm scripts选项。 然后npm工具窗口就显示了:

02--MySQL数据库概述

目录 第10章 子查询 10.1 SELECT的SELECT中嵌套子查询 10.2 SELECT的WHERE或HAVING中嵌套子查询 10.3 SELECT中的EXISTS型子查询 10.4 SELECT的FROM中嵌套子查询 第11章 MySQL支持的数据类型 11.1 数值类型:包括整数和小数 1、整数类型 2、bit类型 3、小数类型 11.2…

【Python系列】探索 NumPy 中的 mean 函数:计算平均值的利器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

软件串口接收子程序

代码; stduart.c /*《AVR专题精选》随书例程3.通信接口使用技巧项目:使用延时法实现半双工软件串口文件:sfuart.c说明:软件串口驱动文件作者:邵子扬时间:2012年12月13日*/ #include "sfduart.h"// 循环中延…

WinMerge v2 (开源的文件比较/合并工具)

前言 WinMerge 是一款运行于Windows系统下的免费开源的文件比较/合并工具,使用它可以非常方便地比较多个文档内容甚至是文件夹与文件夹之间的文件差异。适合程序员或者经常需要撰写文稿的朋友使用。 一、下载地址 下载链接:http://dygod/source 点击搜…

【Linux】进程间通信3——线程安全

1.Linux线程互斥 1.1.进程线程间的互斥相关背景概念 临界资源: 多线程执行流共享的资源叫做临界资源。临界区: 每个线程内部,访问临界资源的代码,就叫做临界区。互斥: 任何时刻,互斥保证有且只有一个执行…

动态创建接口地址

和SpringBoot版本有关系 这里用的boot 2.2.2

LabVIEW电控旋翼测控系统

开发基于LabVIEW开发的电控旋翼测控系统,通过高效监控和控制提升旋翼系统的性能和安全性。系统集成了多种硬件设备,采用模块化设计,实现复杂的控制和数据处理功能,适用于现代航空航天领域。 项目背景 传统旋翼系统依赖机械和液压…

IO模型详解

阻塞IO模型 假设应用程序的进程发起IO调用,但是如果内核的数据还没准备好的话,那应用程序进程就一直在阻塞等待,一直等到内核数据准备好了,从内核拷贝到用户空间,才返回成功提示,此次IO操作,称…

C# 中的静态关键字

C# 语言中的 static 关键字用于声明静态类和静态类成员。静态类和静态类成员(如构造函数、字段、属性、方法和事件)在只需要一个对象(类或类成员)副本并在类型(和成员)的所有实例(对象&#xff…

React+TS前台项目实战(十五)-- 全局常用组件Table封装

文章目录 前言Table组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 在这篇文章中,我们将对本系列项目中常用的表格组件Table进行自定义封装,以提高性能并适应项目需求。后期也可进行修改和扩展,以满足项目的需求。 Table组…

C# Onnx Yolov5 水果识别,人员识别,物品识别 人工智能

目录 先上效果 来电废话,但实用 网络成功案例实践易失败的原因 万物检测涉及技术 下载合集 关键代码 全部代码 实操vs2022安装关键 YOLO V5核心库编译 编写自己识别软件 更新相关依赖 标注字库文件 测试效果 名词解释YOLO 名词解释ONNX 源码 直播教…

卸载 ubuntu-wsl2-systemd-script,使用 WSLg 图形用户界面

目录 全新安装 - 以前没有安装 WSL现有 WSL 安装卸载 ubuntu-wsl2-systemd-script使用 Linux GUI参考链接在 Windows 上使用 Linux 开发环境,最好的做法是使用 WSL2。在 WSL 和早期的 WSL2 版本中,并不支持图形用户界面。因此如果想要使用 GUI 程序,需要自行解决。具体方法可…

读线圈和离散状态寄存器信息

一.功能码操作类型 二.读线圈状态 需求实例 读取设备地址为 3 的从设备的线圈状态寄存器,线圈地址为 19 到 55(从 0 开始计算)共 37 个状态。 分析:由需求可知读取地址,则功能码是0x01,地址为3即为0x03,线圈地址为19到…

Python | Leetcode Python题解之第179题最大数

题目&#xff1a; 题解&#xff1a; class Solution:def largestNumber(self, nums: List[int]) -> str:def quick_sort(l , r):if l > r: returni, j l, rwhile i < j:while strs[j] strs[l] > strs[l] strs[j] and i < j: j - 1while strs[i] strs[l] &l…

基于matlab的BP神经网络分类预测

1.神经网络结构 本文网络结构如图1所示&#xff1a; 图1 网络结构 图1给出的并不是单纯的bp神经网络结构这里设置了三个隐藏层&#xff0c;神经元个数分别为6&#xff0c;3&#xff0c;3&#xff0c;输入层12个特征输入&#xff0c;输出层输出4个类型结果。 2.代码 %% 清空环…

使用ViewDragHelper打造属于自己的DragLayout(抽屉开关 )

</com.xujun.drawerLayout.drag.DragLayout> 在代码中若想为其设置监听器, 分别可以监听打开的 时候&#xff0c;关闭的时候&#xff0c;拖动的时候&#xff0c;可以在里面做相应的处理&#xff0c;同时我还加入了 自定义属性可以通过 app:range”480”或者setRange&am…

嵌入式linux系统中LCD屏驱动实现思路分析

在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。接下来就来学习一下如何在 Linux 下驱动 LCD 屏幕。 第一:Framebuffer设备简介 先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下: ①、初始化 I.MX6U 的…

Selenium WebDriver - 网络元素

本文翻译整理自&#xff1a;https://www.selenium.dev/documentation/webdriver/elements/ 文章目录 一、文件上传二、定位策略1、传统定位器2、创建定位器3、类名4、CSS选择器5、id6、NAME7、链接文本8、部分链接文本9、标签名称10、xpath11、相对定位器它是如何工作的可用相对…