最后
上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。
也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。
我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料。
部分文件:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
val appNameField = Class.forName(“a.a.aaa.R.string”).getField(“app_name”)
return appNameField.get(null) as String
}
}
这里我们使用到了反射,通过反射获取一个R.string类中的app_name变量。
接下来,我们直接手动修改AndroidManifest.xml中的package的值为:a.a.bbb,然后就会发现有3个地方报错了,如下:
这是因为,.MainActivity前面的那个点,代表以package中声明的包名作为前缀的,现在我们改在了a.a.bbb,所以就报错了,因为a.a.bbb.MainActivity并不存在,所以这里只能使用全包名形式了:a.a.aaa.MainActivity
第二个报错,MainActivity:
前面我们说了package中的包名用于指定自动生成的类所在的包,没修改之前,a.a.aaa.R.layout.activity_main和a.a.aaa.MainActivity在同一个包下,所以不用导包,修改之后,自动生成的activity_main为a.a.bbb.R.layout.activity_main和a.a.aaa.MainActivity不在同一个包下了,所以需要导包:import a.a.bbb.R
第三个报错,Utils:
容易理解,R文件已经不在a.a.aaa包下,所以这里会报错,而且这里的反射我们也需要手动修改包名,如果是一个真实的项目,类很多,那要这样手动改的话,真是要累死人的,所以要使用重构的方式,我们把代码还原一下,然后在aaa包名上点击一下,然后按下Shift + F6,此时会弹出一个警告对话框,如下:
这个汉化的内容我感觉不太对,于是关闭汉化插件再看一下对话框,如下:
根据我试验的结果,此对话框提示a.a.aaa目录在3个地方都有,一个是我们的android主项目src\main\java\a\a\aaa,一个是对应的Android测试目录src\androidTest\java\a\a\aaa,一个是对应的java测试目录src\java\a\a\aaa,对话框问我们是想要重命名整个包还是只重命名src\main\java\a\a\aaa这一个目录?重构整个包名会重构到上面说的3个目录。
我们先使用“重命名目录”按钮,出现如下对话框:
我们输入bbb,然后点击“预览”按钮,此时会在AndroidStudio的底部出现“重构预览”即在发生重构前,先让你知道重构会改变哪些地方,如下:
可以看到,有两个地方会被修改,第一个是告诉你MainActivity.kt文件会被移动到a.a.bbb目录,第二个是告诉你MainActivity.kt中的package a.a.aaa也会改成package a.a.bbb,这也很容易理解,因为MainActivity已经放到a.a.bbb目录下了,当然package也要改成对应的包。感觉上因为就真的只有这两个地方会被修改,但是ide会做的更多,我们点击“执行重构”,然后提交代码(我提前把代码放到SVN上了),然后就能看到有哪些改动了,如下:
我们发现,activity_main.xml和AndroidManifest.xml中也有改动,如下:
activity_main.xml:
AndroidManifest.xml:
还挺智能的,它知道MainActivity的位置变了,不在相对于a.a.aaa的位置了,所以需要使用全包名的形式。
很明显,这种方式不是我们想要的,它并没有为我们重命名清单文件中的package属性。我们把代码还原,然后再执行重构,这次我们选择“重命名包”按钮,然后出现对话框,如下:
我们把aaa改成bbb,然后点击预览按钮,如下:
双击对应的条目即可快速跳转到相应的位置,比如双击最前面的aaa,我们发现它被定位到主项目的aaa目录,如下:
这里工具有点问题,有两个aaa都指向了同一个地方,另外两个aaa分别指向对应的Android测试目录和Java测试目录,如下:
再往下,这3个目录中对应了3个类,所以类里面的package语句中的包肯定也是要修改的,再往下是清单文件中package的值也会被修改,最后是Utils中使用到了import a.a.aaa.R也会被修改,因为package的值修改了,则自动生成的R对应的包肯定也是需要修改的,但是我们代码中反射使用到了a.a.aaa啊,它不给我重构一下吗?我们取消这次的重构预览,重新执行重构,如下:
这次我们勾选了“在注释和字符中搜索”,再次预览,结果如下:
这还不错啊,找到了我们反射的字符串了,但是同时问题也来了,还会找到了更多我们不想要重构的地方,如下:
这里的项目名称和应用的进程名,我们并不想改,甚至在jdk和sdk中的一些注释或字符串它也改搜索出来了,如下:
最后
由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
https://bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!