总结
Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
【Android高级架构视频学习资源】
Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
这个菜单里除了CheckOut
还可以CheckOut as New Branch
即在当前分支的基础上再创建一个新分支。
切换完分支后底部会显示当前分支的名字:
切换远程分支
切换远程分支可以在Remote Branches
当中选择一个想要切换的远程分支进行CheckOut
切换完成以后当前工作空间就会切换到该分支并且在Local Branches
当中多了名为zhaoyun的分支:
当然这里在切换远程分支时最好选一个本地没有的对应的远程分支,如果你选了一个本地已有的分支,比如这里选develop
, 弹出的弹窗就会提示该分支已存在:
当然你如果改一个名字也是可以再check出来一个的:
这样本地就会存在两个对应远程develop的本地分支,这两个分支可以分开开发互不影响。
合并分支代码
合并本地分支代码
这种情况下一般是你自己在本地check了好几个远程分支的本地分支,然后自己想要合并不同的分支代码,在Local Branches
当中选择要合并的本地分支执行Merge
操作即可,比如现在是master
本地分支,我要合并develop
的本地分支:
合并后只是在本地进行了代码合并,如果想要在远程仓库也合并,需要在合并之后当前分支执行commit和push操作。
合并本地分支冲突
两个本地分支合并以后,如果没有冲突,并且被合并以后的代码没有被commit, 这时他们会共用相同的工作空间共用一份代码,修改代码的时候,所有merge过的本地分支代码都会被修改。
假如这时你commit了其中一个分支的修改的代码,那么再切换分支的时候,不同分支的代码就又会分隔开来。
假如这时你commit了其中一个本地分支的代码后又修改了代码,那么再次进行checkout另一个分支的时候,可能会发生冲突:
我们点击Smart Checkout按钮,会弹出冲突合并的弹窗:
点击merger按钮:
这个弹窗当中左边的框中是当前本地分支的尚未进行commit的代码,右边的框中是要checkout的目标分支的本地代码,而中间的框是最终合并的结果,你可以点击左右两边的 x
或者 >>
来选择保留或者舍弃某一边的代码。点击Apply
按钮会保留merge的结果,如果你点击了关闭弹窗,则冲突会被保留到代码当中:
这时即便你手动删除了冲突的代码,当你再次尝试切换分支的时候,依然会提示你冲突未解决:
点击提示中resolve,可以看到又会弹出刚才的merge弹窗:
保证冲突被解决后AS才会进行分支切换
本地分支合并远程分支
这种情况最常见,一般是多人开发,别人开的分支提交了代码之后,你的本地分支想去合并它提交的代码。
操作跟合并本地分支一样,直接在Remote Branches
当中选择要合并的本地分支执行Merge
操作即可:
合并之后不要忘了把合并的结果执行push操作
合并远程分支冲突
如果在本地分支合并远程分支的过程中出现冲突,AS会自动弹出合并冲突的弹窗:
点击Merge按钮会弹出下面的弹窗:
这个弹窗当中左边的框中是当前本地分支的代码,右边的框中是要merge的目标分支的远程代码,而中间的框是最终合并的结果,你可以点击左右两边的 x
或者 >>
来选择保留或者舍弃某一边的代码,当然为了保险有的时候还是需要仔细检查后手动去复制修改,以免误操作导致代码丢失错乱。注意,点击Apply
按钮才会保留merge的结果,如果你点击了关闭弹窗,则不会做任何改变。
远程分支合并远程分支
这个AS中没有找到对应的操作菜单,只能在服务端进行了,打开浏览器在GitLab上选择Merge Requests—New Merge Request:
这里会让你选择从哪个分支合并到哪个分支:
确认好后点击按钮继续:
最终会生成一个merger请求,我们点击下面的Accept Merge Request按钮才会真正的执行Merge操作:
Merge成功会有下面的提示,同时去commit history里也能看到提交记录
删除分支
AS可以选择删除本地分支和远程分支:
删除远程分支可能需要权限,删除分支后代码就没有了,所以一定谨慎。
更新代码
更新代码有两种方式,第一种是前面提到的直接点击工具栏上的更新按钮:
弹出的弹窗中会有一些选择项,如果你是单人单个分支开发的话,用默认的就可以,默认是更新的当前分支的代码。如果是多人开发的话,可以选择merge,这样如果别人有提交代码跟你的冲突的时候AS会自动弹出merge弹窗。
另一种更新代码的方式可以在右键菜单中选择Git–>Repository–>Pull:
这时会弹出下面的弹窗:
可以看到这里pull操作不仅可以选择当前分支,还可以选择服务器的其他远程分支进行一并Pull,如果有冲突的话,AS会自动弹出前面合并冲突的merge弹窗进行merge操作。
回退本地分支代码到某个版本
可以在Version Control
面板的Log记录列表中选择某一条你想要回退的记录,然后右键Revert
:
这步操作将会把你当前本地分支的代码和你选中的那条提交记录对应状态的代码进行合并操作,当然如果此时有冲突,AS依然会弹出merge弹窗。
或者,你也可以选择Reset Current Branch to Here
:
这个操作会弹出下面的弹窗:
这里有几种选择模式:Soft、Mixed、Hard、Keep,不同的模式含义也不同:
| Reset模式 | 含义 |
| :-: | :-: |
| Soft | 当前的代码文件不会发生任何变化,只是提交的记录指针会恢复到该次记录,下次提交时的变化将会是该次记录之后的所有变化 |
| Mixed | 当前的代码文件不会发生任何变化,提交记录指针会移动到该次记录,下次提交时的变化将会是当前代码基于该次记录之上的变化 |
| Hard | 该操作会将本地的工作区缓存区完全重置为选中的记录状态,当前任何代码的改动都会丢失 |
| Keep | 该操作会将本地的工作区缓存区完全重置为选中的记录状态,但是当前代码的改动任然会被保留下来 |
假如提交记录以及当前代码的状态如下:
那么此时我们选择第三次commit进行Reset不同模式的情况如下:
根据Tag检出代码
除了分支管理代码以外,我们也可以通过Tag来管理代码,Tag可以理解为某次提交的时刻打一个标记,一般用于比较重要的里程碑,例如你可以用它来进行发布版本的管理。
首先创建一个Tag:
这里弹窗中填写Tag名称与Tag信息,点击Create Tag即可创建本地标签。其中Commit可填写以前某次提交记录的id,表示在该次提交上打Tag,如果不填表示Tag打在最新提交的commit上。
创建完Tag后,需要将Tag推送到远程分支:
这里的弹窗中勾选Push Tags即可,Push之后我们可以在GitLab浏览器上看到刚刚提交的Tag:
然后我们可以根据Tag检出代码了:
这样检出代码以后,你会发现当前不处于任何分支:
此时工程文件处于一个没有名字的分支,如果你修改了代码后进行Push操作会发现处于Detached HEAD
状态无法进行Push:
这是因为 Tag 相当于是一个快照,是不能更改它的代码的, 如果要在 Tag 检出的代码的基础上做修改,你需要创建一个新的branch:git checkout -b branch_name tag_name
,这个操作在AS中无法通过菜单按钮完成,只能通过命令行执行:
执行完成后再回到AS中看一下:
可以看到我们的分支终于有了名字,这时就可以正常提交了,剩下的操作就跟之前的操作一样。其实最终还是将当前代码作为一个新的分支进行管理了,但这个只是本地分支,并不会在远程服务器创建新的分支,这样好处是可以避免创建过多的远程分支。
前面提到创建Tag时不填commit是为最新的一次commit打标记,如果我想为某一次打标记呢,有个便捷的方法,就是在Version Control的日志面板中选中某一条记录,然后右键执行New Tag:
弹出框中输入tag名称即可,然后同样进行Push 操作(不过这样创建的tag好像并不会在远程服务器端存在?),之后可以同前面操作一样去检查这个tag作为一个新的分支使用。
通过Revision Number ( 版本号 ) 检出代码
这个操作几乎跟tag检出过程一样,不过我们不需要先创建Revision Number,每次commit的时候Git都会生成一个id这个就是Revision Number,我们可以在Version Control的日志面板中选中某条提交记录,然后右键选择Copy Revision Number:
这样就能获得该次提交的id版本号,然后选择去CheckOut这个版本号的代码:
在弹出框中黏贴刚才Copy的版本号:
然后就能检出这个版本号的代码了,不过检出之后也会处于Detached HEAD
状态无法进行Push状态,同样我们需要通过命令执行git checkout -b branch_name commit_id
来创建一个新的branch,其中commit_id就是刚才Copy的Revision Number。
感觉这个好像比Tag更加方便一点
补充Gitlab命令拉取分支的三种方式:
1. 直接执行命令git clone -b branch_name branch.git
branch_name是分支名字
2. 可以先clone master.git
到本地, cd到项目目录,然后执行git checkout -b dev origin/branch_name
, branch_name是分支名字
最后
我的面试经验分享可能不会去罗列太多的具体题目,因为我依然认为面试经验中最宝贵的不是那一个个具体的题目或者具体的答案,而是结束面试时,那一刻你的感受以及多天之后你的回味~
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!