目录

前言

Kotlin协程,现在已经成为了面试甚至是工作中一个非常火的东西。

本人在刚开始了解Kotlin协程的时候,断断续续看了网上不少文章,用长篇大论把Kotlin协程描述的非常玄乎,但是看完后还是依然云里雾里,所以决定来写一篇关于协程的文章,希望能够帮助大家能够更快的上手Kotlin协程

网络:分层模型、TCP、UDP、HTTP、HTTPS

分层模型

  • 应用层:负责处理特定的应用程序细节,如 HTTP、FTP、DNS
  • 运输层:为两台主机提供端到端的基础通信,如 TCP、UDP
  • 网络层:控制分组传输、路由选择等,如 IP
  • 链路层:操作系统设备驱动程序、网卡相关接口

UDP

  • UDP 头结构:来源端口、目的端口、长度域、校验和
  • 特点:不可靠、无序、面向报文、速度快、轻量
  • 适用场景:适用于即时通讯、视频通话等
  • 应用:DHCP、DNS、QUCI、VXLAN、GTP-U、TFTP、SNMP

TCP

  • TCP 头结构:来源端口、目的端口、序号、确认序号、SYN/ACK 等状态位、窗口大小、校验和、紧急指针
  • 特点:面向字节流、有拥塞和流量控制、可靠、有序、速度慢、较重量,通过滑动窗口实现流量控制、用塞控制
  • 适用场景:文件传输、浏览器等
  • 应用:HTTP、HTTPS、RTMP、FTP、SMTP、POP3
  • 三次握手:
1\. C->S:SYN,seq=x(你能听到吗?)
2\. S->C:SYN,seq=y,ack=x+1(我能听到,你能听到吗?)
3\. C->S:ACK,seq=x+1,ack=y+1(我能听到,开始吧)两方都要能确保:我说的话,你能听到;你说的话,我能听到。所以需要三次握手
复制代码
  • 四次挥手:
1\. C->S:FIN,seq=p(我说完了)
2\. S->C:ACK,ack=p+1(我知道了,等一下,我可能还没说完)
3\. S->C:FIN,seq=q,ACK,ack=p+1(我也说完了)
4\. C->S:ACK,ack=q+1(我知道了,结束吧)S 收到 C 结束的消息后 S 可能还没说完,没法立即回复结束标示,只能等说完后再告诉 C :我说完了
复制代码

HTTP

  • 超文本传输协议,明文传输,默认 80 端口
  • POST 和 GET:Get 参数放在 url 中;Post 参数放在 request Body 中
  • 访问网页过程:DNS 域名解析、TCP 三次握手建立连接、发起 HTTP 请求

HTTPS

  • 默认 443 端口,使用 SSL 协议对 HTTP 传输数据进行了加密,安全
  • 加密过程:Client/Server 通过非对称加密生成密钥,然后用这个密钥去对称加密传输数据

算法:数据结构、常用算法

数据结构

  • 数组、链表
  • 栈、队列
  • 散列表
  • 树、堆、图

常用算法

  • 排序
  • 双指针、滑动窗口、字符串
  • 递归、分治、二分
  • 回溯、贪心、动态规划

Java 基础:StringBuilder、泛型擦除、Exception、IO、容器

StringBuilder

  • StringBuffer 线程安全,StringBuilder 线程不安全
  • +实际上是用 StringBuilder 来实现的,所以非循环体可以直接用 +,循环体不行,因为会频繁创建 StringBuilder
  • String.concat 实质是 new String ,效率也低,耗时排序:StringBuilder < StringBuffer < concat < +

泛型擦除

  • 修饰成员变量等类结构相关的泛型不会被擦除
  • 容器类泛型会被擦除

Exception 和 Error

  • Exception 和 Error 都继承自 Throwable
  • Error 大部分是指不可恢复的错误状态,比如 OOM,所以也不需要捕获
  • Exception 分为 CheckedException 和 UnCheckedException
    • CheckedException:必须显式捕获,受编译器检查,比如 io 操作
    • UnCheckedException:不用显示捕获,比如空指针、数组越界等

IO 、 NIO、 OKIO

  • IO 是面向流的,一次一个字节的处理,NIO 是面向缓冲区的,一次产生或消费一个数据块
  • IO 是阻塞的,NIO 是非阻塞的
  • NIO 支持内存映射方式
  • okio 相比 io 和 nio,api 更简单易用
  • okio 支持超时机制
  • okio 引入 ByteString 空间换时间提高性能
  • okio 采用 segment 机制进行内存共享,节省 copy 时间消耗

ArrayList、LinkedList

  • ArrayList

    • 基于数组实现,查找快:o(1),增删慢:o(n)
    • 初始容量为10,扩容通过 System.arrayCopy 方法
  • LinkedList
    • 基于双向链表实现,查找慢:o(n),增删快:o(1)
    • 封装了队列和栈的调用

HashMap 、HashTable、HashSet

  • HashMap(允许 key/value 为 null)

    • 基于数组和单向链表实现,数组是 HashMap 的主体;链表是为解决哈希冲突而存在的,存放的是key和value结合的实体
    • 数组索引通过 key.hashCode(还会二次 hash) 得到,在链表上通过 key.equals 索引
    • 哈希冲突落在同一个桶中时,直接放在链表头部(java1.8后放到尾部)
    • JAVA 8 中链表数量大于 8 时会转为红黑树存储,查找时间由 O(n) 变为 O(logn)
    • 数组长度总是2的n次方:这样就能通过位运算实现取余,从而让 index 能落在数组长度范围内
    • 加载因子(默认0.75)表示添加到多少填充比时进行扩容,填充比大:链表较长,查找慢;填充比小:链表短,查找快
    • 扩容时直接创建原数组两倍的长度,然后将原有对象再进行hash找到新的index,重新放
  • HashTable(不允许 key/value 为 null)

    • 数据结构和 HashMap 一样
    • 线程安全
  • HashSet

    • 基于 HashMap 实现,元素就是 HashMap 的 key,Value 传入了一个固定值

ArrayMap、SparseArray

  • ArrayMap

    • 基于两个数组实现,一个存放 hash;一个存放键值对
    • 存放 hash 的数组是有序的,查找时使用二分法查找
    • 发生哈希冲突时键值对数组里连续存放,查找时也是通过 key.equals索引,找不到时先向后再向前遍历相同hash值的键值对数组
    • 扩容时不像 HashMap 直接 double,内存利用率高;也不需要重建哈希表,只需要调用 system.arraycopy 数组拷贝,性能较高
    • 不适合存大量数据(1000以下),因为数据量大的时候二分查找相比红黑树会慢很多
  • SparseArray

    • 基于 ArrayMap,key 只能是特定类型

Concurrent 集合

  • ConcurrentHashMap

    • 数据结构跟 HashMap 一样,还是数组加链表
    • 采用 segment 分段锁技术,不像 HashTable 无脑直接同步 put 和 get 操作
    • get 操作没有加锁,因为 value 用 volatile 修饰来保证可见行,性能很高
    • java1.8 后去除分段锁,采用 CAS 乐观锁加 synchronized 来实现

LRUCache 原理

  • 基于访问顺序排序的 LinkedHashMap 实现,最近访问的会排在最后

最后我想说

为什么很多程序员做不了架构师?
1、良好健康的职业规划很重要,但大多数人都忽略了
2、学习的习惯很重要,持之以恒才是正解。
3、编程思维没能提升一个台阶,局限在了编码,业务,没考虑过选型、扩展
4、身边没有好的架构师引导、培养。所处的圈子对程序员的成长影响巨大。

金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-NVglgPPu-1618479374370)]

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

Android面试送分题:微信小程序的事件处理,年薪50W相关推荐

  1. Android面试送分题:最新Android面试题整理,详细的Android学习指南

    前言 之前老是看着搞Java的朋友炫耀他的核心知识点笔记,真的,我内心毫无波澜,只有一点点酸 其实Android开发也有很多知识点,我一直以来就想要一份Android核心知识点笔记来帮助自己查漏补缺, ...

  2. Android面试送分题:这份354页笔记的Android进阶知识+大厂高频面试题,已拿offer

    程序员与别的专业有所不同,其他专业都是越老越香,而程序员却是一个例外,因为计算机技术更新太快,而且工作强度很大,因此大部分程序员只会写 3 年代码.3 年后要不晋升做项目经理,要么转行,个别研究所除外 ...

  3. 土著刷题微信小程序迭代新增更多的实用功能,试题查重、导出、笔记~~~

    土著刷题微信小程序v1.5迭代了几个较为实用的功能,算是一个小版本中的大版本,安排的工作量还算合理,刚好赶上国庆节假期,趁此集中精力全力开发,接下来就逐一介绍v1.5主要的迭代新增功能. 试题查重 平 ...

  4. 小程序源码:端午送粽子祝福微信小程序源码下载支持打赏模式带背景音乐

    端午节的时候很火的一款小程序 给亲朋好友送祝福也是一款引流非常不错的一款小程序 支持打赏小程序模式实现盈利模式 当然了,有能力的小伙伴也可以魔改一下做成别的小程序也是可以的 该小程序无需服务器和域名, ...

  5. 小程序源码:网课查题微信小程序源码下载,题库资源丰富自动采集,支持语音拍照识别

    这是一款网课查题微信小程序源码 题库资源丰富自动采集, 支持语音拍照识别 该款采用接口方式,所以题库自动全网采集 而且该款小程序无需服务器和域名即可搭建 大家解压源码然后使用微信开发者工具打开源码 然 ...

  6. 多接口网课题库等综合搜题微信小程序源码带流量主

    多接口网课题库等综合搜题微信小程序源码带流量主,网课搜题小程序 下载:https://download.csdn.net/download/qq_45102995/87785387

  7. Android开发经验谈:微信小程序的事件处理,灵魂拷问

    前言 春招已经接近尾声了,不知道各位小伙伴有没有找到自己心仪的工作呢. 笔者前几天内推刚刚收获了腾讯高级开发岗的offer,得益于内推朋友面试时的面试经验,照着他给的方向复习刷题,顺利的通过了面试.在 ...

  8. 微信 android兼容性问题怎么解决方案,微信小程序兼容性问题

    本文我们来谈谈微信小程序系统兼容性的那些坑. 微信小程序兼容性问题 微信小程序发布一周多了,兼容性问题,特别是 Android 平台兼容性问题特别严重.据我观察,好多小程序掉到兼容性的坑里.掉坑里不要 ...

  9. android img标签属性_微信小程序 组件叠加效果(如 Android 中的添加蒙层)

    实现的效果如下: 可以看出这是由image组件和text组件叠加到一块组成的蒙层效果. 在小程序中实现这个效果主要用到z-index属性和position属性 z-index的使用必须是双方组件都设置 ...

最新文章

  1. 从智能合约到智能资产
  2. 南大计算机考研录取,南京大学拟录取名单公示,初试最高446分,推免占比竟高达75%...
  3. JAVA开发需求分析套路_JAVA并发工具常用设计套路示例代码
  4. pareto解是什么意思_Pareto是什么意思
  5. 文本文档代码大全简单_简单4步搞定PC版微信多开,不再重复切换
  6. spring cloud简介之最好参考
  7. 李开复:多次失败后,我总结出最优秀创业者的4个特点
  8. 证明$A^TAX = A^Tb$有公共解
  9. 第二天linux,yum源配置和ftp部分设置
  10. OpenLayers之官网实例
  11. Node.JS——NodeJS引用路径的小问题
  12. asp.net 路径
  13. django mysql 登陆界面_django 简单实现登录验证给你 Django用户登录验证跳转问题
  14. 一键磨皮插件:DR5白金版(支持ps 2022)中文版
  15. VBA调用sqlserver带参数的存储过程
  16. HDU4585 Shaolin
  17. LeetCode 781. 森林中的兔子
  18. <Navigate>与useNavigate()
  19. 行人重识别+人脸识别+商品识别(新商品库对比)
  20. 《Python深度学习》3.4电影评论分类:二分类问题

热门文章

  1. c语言医疗系统软件,c麦医疗app下载-c麦医疗下载v1.6.2安卓版-西西软件下载
  2. 我们都是被选中的孩子
  3. MOS管Qg的概念解析
  4. Map集合(超详细+源码讲解)
  5. 实习日志(编写电商系统)
  6. A Capsule Network-based Embedding Model for Search Personalization
  7. Android9.0设置AlertDialog修改底部按钮居中等
  8. 环氧树脂胶粘剂性能和特性?什么是环氧结构胶?
  9. 十招让你设计不恶心的PPT
  10. 最近宽带升级成了200M速率,但是家里路由器不支持千兆宽带,该换什么样的?