前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >移动端:想斩获大厂offer,这些中高级面试题你至少得刷过(持续更新中···)

移动端:想斩获大厂offer,这些中高级面试题你至少得刷过(持续更新中···)

原创
作者头像
Android技术干货分享
修改2020-03-24 17:41:40
4760
修改2020-03-24 17:41:40
举报
文章被收录于专栏:Android技术分享Android技术分享

疫情一过,我相信将会是面试求职的高峰时期,如果此时手里有份高质量的面试宝典,那么你将得心应手面对考官各种问题。虽然不敢保证你能应聘上心仪的职位,但是能保证看完这些内容你将会获的一些收获! 此份面试宝典是我工作几年搜集整理,最近再分享面试相关,今天的只是收集的一部分,之后还会继续更新面试题以及面试相关需要注意的问题等等!

1、谈谈对命令模式的理解

将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

何时使用:

  • 程序需要在不同的时刻指定、排列和执行请求。
  • 程序需要提供撤销操作。
  • 程序需要支持宏操作。

优点:

  • 在命令模式中,请求者(Invoker)不直接与接受者(Receiver)交互,及请求者(Invoker)不包含接受者(Receiver)的引用,因此彻底消除了彼此间的耦合。
  • 命令模式满足“开-闭原则”。如果增加新的具体命令和该命令的接受者,不必修改调用者的代码,调用者就可以使用新的命令对象;反之,如果增加新的调用者,不必修改现有具体命令和接收者,新增加的调用者就可以使用已有的具体命令。
  • 由于请求者的请求被封装到具体的命令中,那么就可以将具体命令保存到持久化的媒介中,在需要的时候,重新执行这个具体命令。因此,使用命令模式可以记录日志。
  • 使用命令模式可以对请求者的“请求”进行排队。每个请求都各自对应一个具体命令,因此可以按一定顺序执行这些具体命令。

一个对象有多种操作,但是我们不希望调用者(请求者)直接使用,我们就额外添加一个对象,然后让调用者通过这个对象来使用那些操作。比如,我们有一个类可以在磁盘上新建或是删除文件(接收者),但是我们不希望直接提供给别人(请求者)使用,所以我们就为它的各种操作创建对应的命令

代码语言:javascript
复制
//接收者
public class MakeFile {
  //新建文件
  public void createFile(String name) throws IOException{
    File file = new File(name);
    file.createNewFile();
  }
  //删除文件
  public boolean deleteFile(String name){
    File file = new File(name);
    if(file.exists()&&file.isFile()){
      file.delete();
    return true;
  }
     return false;
  }
}
代码语言:javascript
复制
//命令接口
public interface Command {
  void execute(String name) throws Exception;
}
代码语言:javascript
复制
//新建文件命令
public class CommandCreate implements Command {
  MakeFile makeFile;
  public CommandCreate(MakeFile makeFile) {
    this.makeFile = makeFile;
  }
  @Override
  public void execute(String name) throws Exception {
    makeFile.createFile(name);
  }
}
代码语言:javascript
复制
//删文件命令
public class CommandDelete implements Command{
  MakeFile makeFile;
  public CommandDelete(MakeFile makeFile) {
    this.makeFile = makeFile;
  }
  @Override
  public void execute(String name) throws Exception {
    makeFile.deleteFile(name);
  }
}
代码语言:javascript
复制
//请求者
public class Client {
  Command command;
  public Client setCommand(Command command){
    this.command = command;
    return this;
  }
  public void executeCommand(String name) throws Exception{
    if(command==null)
    throw new Exception("命令不能为空!");
    command.execute(name);
  }
}
代码语言:javascript
复制
public class Test {
public static void main(String args[]) throws Exception{
  //接收者
  MakeFile makeFile = new MakeFile();
  //命令
  CommandCreate create = new CommandCreate(makeFile);
  CommandDelete delete = new CommandDelete(makeFile);
  //请求者
  Client client = new Client();
  //执行命令
  client.setCommand(create).executeCommand("d://test1.txt");
  client.setCommand(create).executeCommand("d://test2.txt");
  client.setCommand(delete).executeCommand("d://test2.txt");
  }
}//执行完后在D盘会有一个test1.txt的文件,test2.txt本页创建了,不过又被删除了

命令模式不宜滥用,比如:使用这种模式,会多出来很多对象(命令)。

2、简述TCP和UDP的区别

tcp 和 udp 是 OSI 模型中的运输层中的协议。tcp 提供可靠的通信传输,而 udp 则常被用于让广播和细节控制交给应用的通信传输。

两者的区别大致如下:

  • tcp 面向连接,udp 面向非连接即发送数据前不需要建立链接;
  • tcp 提供可靠的服务(数据传输),udp 无法保证;
  • tcp 面向字节流,udp 面向报文;
  • tcp 数据传输慢,udp 数据传输快;

3、Android网络数据的加密方式

对称加密,就是加密和解密数据都是使用同一个key,这方面的算法有DES。

非对称加密,加密和解密是使用不同的key。发送数据之前要先和服务端约定生成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有RSA。ssh 和 ssl都是典型的非对称加密。

4、Http和Https的区别

HTTP超文本传输协议(HyperText Transfer Protocol),是目前互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。现在主要是一个客户端和服务器端请求和应答的标准(TCP),但是正在被HTTPS取代。

HTTPS安全套接字层超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer)或超文本传输安全协议(Hypertext Transfer Protocol Secure),由网景公司(Netscape)于1994年创建的,是以安全为目标的HTTP通道。简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

主要区别:

  1. URL:http 一般以http:// 开头,https以https:// 开头。
  2. 证书:http不需要证书;https需要到ca申请证书,一般免费证书很少,所以需要一定费用。
  3. 安全:http信息是明文传输;https 则是具有安全性的ssl加密传输协议。
  4. 端口:http 默认端口是80;https是443。
  5. 连接:http 的连接很简单,是无状态的;https协议是由SSL+http协议构建的可进行加密传输、身份认证的网络协议,所以首次建立连接会慢一些,但是比http协议安全。

附:https优缺点:

优点:

  1. 通过证书可以更信任服务器。
  2. 更安全,防篡改。

缺点:

  1. https 需要证书。
  2. 因为对传输进行加密,会一定程度增加cpu消耗。
  3. 由于https 要还密钥和确认加密算法的需要,所以首次建立连接会慢一些。
  4. 带宽消耗会增加,服务端压力大。

进阶Http 进阶Https

5、简述apk打包流程

  1. 打包资源文件,生成R.java文件 输入:res文件,Assets文件,AndroidManifest.xml文件,Android基础类库(Android.jar文件) 输出:R.java,resources.arsc 工具:aapt 工具位置:SDK\build-tools\29.0.0\aapt.exe
  2. 处理aidl文件,生成相应java文件 输入:源码文件,aidl文件,framework.aidl文件 输出:对应的.java文件 工具:aidl工具 工具位置:SDK\build-tools\29.0.0\aidl.exe
  3. 编译工程源代码,生成相应class文件 输入:源码文件(包括R.java和AIDL生成的.java文件),库文件(jar文件) 输出:.class文件 工具:javac工具 工具位置:Java\jdk1.8.0_201\bin\javac.exe
  4. 转换所有class文件,生成classes.dex文件 输入:.class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),库文件(.jar文件) 输出:.dex文件 工具:javac工具 工具位置:Java\jdk1.8.0_201\bin\javac.exe
  5. 打包生成apk文件 输入:打包后的资源文件,打包后类文件(.dex文件),libs文件(包括.so文件) 输出:未签名的.apk文件 工具:apkbuilder.bat工具已废弃,改为sdklib.jar工具 工具位置:E:\SDK\tools\lib\sdklib.jar
  6. 对apk文件进行签名 输入:未签名的.apk文件 输出:签名的.apk文件 工具: jarsigner工具 apksigner工具 工具位置: Java\jdk1.8.0_201\bin\jarsigner.exe SDK\build-tools\29.0.0\lib\apksigner.jar
  7. 对签名后的apk文件进行对齐处理 输入:签名后的.apk文件 输出:对齐后的.apk文件 工具:zipalign工具 工具位置:SDK\build-tools\29.0.0\zipalign.exe

注:工具位置基于win平台,参考连接

【Android进阶学习视频】、【全套Android面试秘籍】关注我【主页简介】查看免费领取方式!

最后

今天分享的面试题就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、谈谈对命令模式的理解
  • 2、简述TCP和UDP的区别
  • 3、Android网络数据的加密方式
  • 4、Http和Https的区别
  • 5、简述apk打包流程
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档