
面试题
月亮是我踹弯的
抱怨没有用,一切靠自己
展开
-
重学数据结构与算法(15~19)
15 | 定位问题才能更好地解决问题:开发前的复杂度分析与技术选型我们前面学习的数据结构和算法思维,是解决问题和代码优化的基础。本节课开始,我们进入实战模块,从真正解决问题的角度来看看,如何将我们此前学到的知识灵活运用到实际工作中。问题定位和技术选型加入我现在面对一个实际的算法题,我需要从以下两个方面进行思考。首先,我们要明确目标。即用尽可能低的时间复杂度和空间复杂度,解决问题并写出代码;接着,我们要定位问题。目的是更高效地解决问题。这里定位问题包含很多内容。例如:这个问题时什么类型原创 2020-09-25 18:21:38 · 174 阅读 · 0 评论 -
重学数据结构与算法(1~12)
01 | 复杂度:如何衡量程序运行的效率?复杂度通常包括时间复杂度和空间复杂度,在具体计算时要注意以下几点:它与具体常系数无关,O(n)和O(2n)表示的是同样的复杂度。 复杂度相加时,选择高阶作为结果,也就是说O(n^2)+O(n)和O(n^2)表示同样的复杂度。 O(1)也是表示一个特殊的复杂度,即任务与算例个数n无关。时间复杂度与代码的结构设计高度相关,空间复杂度与代码中的数据结构的选择高度相关。02 | 数据结构:将“昂贵”的时间复杂度转换成“廉价”的空间复杂度我们需要从时间复原创 2020-09-25 15:15:16 · 921 阅读 · 2 评论 -
重学数据结构与算法(面试现场)
20 | 代码之外,技术面试应该具备哪些软素质技术面试一般涉及以下6个环节:简历筛查好的简历要满足以下3个必要条件,分别是信息完备、抽象概括、重点突出。信息完备,指的是必备的东西不可缺。例如姓名、学历、联系方式、工作经历等。 抽象概括,指的是可有可无的东西不要写。例如,政治面貌、户籍等。 重点突出,指的是对你有利的东西要放大放粗。例如,电话、S绩效、系统性能提高50%等。自我介绍建议控制在5分钟,按照时间顺序,比如从大学开始分段介绍,高度抽象出来,以10句左右为限制。说的时候语原创 2020-09-25 15:01:40 · 255 阅读 · 0 评论 -
经典排序算法原理与优劣对比
二分查找要求原数组必须有序。其实,由有序到无序,这是算法领域最常见的一类问题。本课时主要学习4种常见的排序算法,包括冒泡排序、插入排序、归并排序以及快速排序。衡量一个排序算法的优劣,我们主要从以下3个角度进行分析:时间复杂度,具体包括,最好时间复杂度、最坏时间复杂度以及平均时间复杂度。 空间复杂度,如果空间复杂度为1,也叫作原地排序。 稳定性,排序的稳定性是指相等的数据对象,在排序之后,顺序是否能保证不变。常见的排序算法及其思想1.冒泡排序原理:从第一个数据开始,依次比较相...原创 2020-09-24 17:18:44 · 240 阅读 · 0 评论 -
Android进阶课学习收获(27~28)
第27讲:面对UI卡顿,如何入手分析解决问题? 对于UI性能分析,Systrace是目前使用最广的工具。它能够帮助开发者分析多个模块的运行状态以及详细信息。比如SurfaceFlinger、View刷机机制等。通过Android提供的脚本systrace.py,可以设置数据采集方式并收集相关程序运行数据,最终生成一个网页文件,提供程序开发者分析程序性能问题。Systrace简单使用在Android SDK中提供了运行Systrace的脚本,具体路径在 android-sdk/plat...原创 2020-09-23 16:55:59 · 335 阅读 · 0 评论 -
Android进阶课学习收获(31~33)
第32讲:解析动态权限适配遇到的问题 Android 6.0之前,APP需要的权限会在安装阶段向用户展示,APP运行期间不需要动态判断权限是否已申请。从6.0之后的版本开始,对于部分权限,APP需要在代码中动态申请相应的权限。 Android权限分2种,分为普通权限和危险权限,这两种权限都需要在AndroidManifest清单文件中声明。普通权限在程序运行期间自动获取,危险权限比如通讯录、图库、位置等这类操作,Android系统要求App主动向用户展示操作所需要的权限,只有用户...原创 2020-09-17 14:45:33 · 696 阅读 · 0 评论 -
Android进阶课学习(24-26)
第24讲:APK如何做到包体积优化?因为每个项目的背景、实现方式都不尽相同,导致各个项目之间能列出的共性相对较少。本节主要从两部分谈谈对包体积优化的一些尝试:安装包监控、安装包大小优化。安装包监控Android Studio 的APK Analyser analyser的使用非常简单,只需将需要分析的apk文件拖入Android Studio即可,它会显示各项内容所占的大小,并按照大小排序,比如图片占用了比较大的资源空间,可以针对其做压缩优化等操作。Matrix 的ApkCh...原创 2020-09-16 11:48:19 · 352 阅读 · 0 评论 -
Android进阶课学习收获 (13~18)
第13讲:Android是如何通过Activity进行交互的?taskAffinity 单纯使用taskAffinity不能导致Activity被创建在新的任务栈中,需要配合使用singleTask或者singleInstance。我们可以在命令行里输入 adb shell dumpsys activity activities 来输出日志 查看任务栈情况,其中一个TaskRecord代表一个任务栈,如下:taskAffinity + allowTaskReparenting...原创 2020-08-28 18:47:58 · 473 阅读 · 0 评论 -
持续学习--PMS服务启动原理、AMS服务执行流程详解
1.PMS服务启动原理?从开机到APP启动,PMS服务处理机制及流程?PMS全称Package Manager Service,由System Server启动,PMS运行在单独的系统进程中,启动的时候通过ServerManager.addService()存入PMS对象,应用层通过ServerManager.getService()获取对象,由于PMS运行在单独的进程中,所有其获取的对象是一个IBinder接口。 PMS的作用时期主要集中在手机开机时期,它会扫描/data/system和/data/原创 2020-08-25 13:49:18 · 1395 阅读 · 0 评论 -
持续学习--Handler原理
线程之间通过Handler机制通信的大致流程:Handler通过sendMessage()、postMessage()以及对应的一些delay方法来发送消息; 消息队列MesageQueue通过enqueueMessage()将消息加入队列(其实是单链表,并且在插入的时候是从头部开始,按照时间优先原则插入); Looper对象的loop()方法,不间断的通过MessageQueue的next()方法取message,取到msg后,调用msg.target.dispatchMessage(msg),其原创 2020-08-17 11:21:19 · 163 阅读 · 0 评论