面经-腾讯客户端开发(带脑图)

第一问:进程与线程有什么区别?进程之间通信有哪些方式?

有什么区别:

核心区别在于资源分配与执行流

1:进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位

2:进程内存严格分离,线程共享内存;前者稳定开销大,后者效率高易出现竞态(需要考虑同步问题)

3:进程进行操作的内存成本高

4:进程适用于高隔离性任务(浏览器多标签页),线程适合高并发计算(web服务器处理请求)

进程之间的通信方式?

常见有:

  1. 共享内存(最快,适合大数据交换),但需搭配信号量同步;

  2. 消息队列(异步解耦),比如日志系统;

  3. 套接字(跨网络通信),比如微服务调用。

除此之外还有管道,命名管道,信号量,信号等进程通信方式

第二问:什么是双端对列?相比于传统对列和栈,双端对列有哪些优势和应用场景?

双端队列(Deque)是一种允许在头部和尾部高效插入删除的数据结构。它兼具队列和栈的灵活性,比如用它可以轻松实现滑动窗口算法——窗口移动时,从头部移除过期数据,尾部加入新数据。

相比传统队列(只能尾部进、头部出)和栈(仅顶部操作),双端队列的优势在于操作的全面性时间复杂度的高效性(两端操作均为O(1))。

典型应用包括:

  1. 算法:滑动窗口最大值问题中,用Deque维护当前窗口内的候选最大值;

  2. 系统设计:浏览器历史记录支持前进后退,通过Deque管理访问顺序;

  3. 并发编程:工作窃取算法中,线程从自己Deque的头部取任务,其他线程从尾部偷任务,提升并行效率。

第三问:你了解HTTPS的认证握手过程吗?单向认证和双向认证的区别是什么?

HTTPS单向认证的核心是客户端验证服务器身份并协商对称密钥。以RSA密钥交换为例:客户端生成预主密钥,用服务器公钥加密后发送;服务器用私钥解密,双方再结合Client Random和Server Random,通过PRF生成会话密钥,用于加密HTTP数据。

双向认证在此基础上增加了客户端身份验证:服务器会请求客户端证书,验证其合法性(如是否由可信CA签发)。后续密钥协商流程与单向认证类似,但双方都需验证对方身份,确保通信两端都可信。

从密码学角度看,HTTPS结合了数字签名(验证证书)、公钥加密(保护密钥传输)和对称加密(高效加密数据),实现了安全与性能的平衡。

第四问:Android子线程为什么不能刷新UI,核心限制是什么?

Android规定子线程不能直接刷新UI的核心原因在于线程安全。UI组件不是线程安全的,如果多个线程同时操作TextView,可能导致显示错乱。

系统通过ViewRootImplcheckThread()方法强制检查当前线程是否是主线程,否则直接抛异常。此外,主线程的Looper负责将所有UI操作序列化处理,保证执行顺序,避免竞态条件。

虽然某些情况下(如View未附加到窗口时)子线程操作可能不崩溃,但这是危险行为。正确做法是用HandlerrunOnUiThread将UI更新切回主线程,确保安全性和渲染效率。

第五问:Java中final、finally、finalize各有什么区别?

finalfinallyfinalize虽然名字相似,但作用完全不同:

  1. final是修饰符:用来让类不可继承、方法不可重写、变量不可变,比如String类用final保证不可变性;

  2. finally是代码块:用来在try-catch后执行必须的清理代码,比如关闭数据库连接,即使发生异常也会执行;

  3. finalize是Object的方法:对象被垃圾回收前会调用它,但因为执行不可靠,Java已经废弃它,改用try-with-resources管理资源。

第六问:在客户端开发中,如何设计一个缓存策略来优化网络请求性能?

设计客户端缓存策略需要分层处理:

  1. 内存缓存使用LruCacheConcurrentHashMap保证线程安全,高频数据如用户信息优先缓存;

  2. 磁盘缓存通过SQLite(结构化数据)和OkHttp Cache(文件)实现,利用mmap加速大文件读写;

  3. HTTP缓存依赖服务端Cache-ControlETag头自动管理。

过期策略需按数据类型定制:静态资源长期缓存,动态数据如新闻列表采用动态时间衰减模型。

更新机制结合主动拉取(定时任务)和被动推送(WebSocket),例如消息列表收到推送后立即刷新本地缓存。

监控方面需采集命中率、内存/磁盘占用,命中率低于70%时动态调整缓存时间;异常时降级为回源请求或返回默认数据。

并发控制通过读写锁和CAS保证线程安全,双检锁防止重复网络请求,版本号避免脏读。

例如,在实现用户信息缓存时,用ReentrantReadWriteLock控制读写,同时通过WorkManager每1小时主动刷新,确保数据一致性和实时性。

 

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值