当前位置: 首页 > news >正文

简约wordpress主题佛山seo管理

简约wordpress主题,佛山seo管理,wordpress自定义广告,图书管理系统网站开发设计过程都说大厂面试必问源码#xff0c;可很多人看完MMKV 源码、Handler 源码、Binder 源码、OkHttp 源码等源码记不住#xff0c;是脑子有问题吗#xff1f;当然不是#xff01;是因为你没有掌握学习源码的技巧。 我的朋友子路#xff0c;很多人都叫他路神#xff0c;称他为“…都说大厂面试必问源码可很多人看完MMKV 源码、Handler 源码、Binder 源码、OkHttp 源码等源码记不住是脑子有问题吗当然不是是因为你没有掌握学习源码的技巧。 我的朋友子路很多人都叫他路神称他为“国内源码讲解最好的第一人”。 子路说他以前学习MMKV 、ARouter 源码只能去翻书去报个线下培训班或者向其他公司的大牛请教一个疑问有时候会卡好几天。 但现在不一样各种免费的资料和视频学习成本太低了但是网上的内容质量参差不齐都是东拼西凑的辛辛苦苦学半天面试还是挂了… **学习成本越来越低后果就是对程序员的要求越来越高。**以前你只需掌握简单的源码工作随便找基本面试就这么几套。现在你只会这些再出去试试 Android面试中有哪些常见问题汇总答题思路 目录 1.网络 2.Java 基础容器同步设计模式 3.Java 虚拟机内存结构GC类加载四种引用动态代理 4.Android 基础性能优化Framwork 5.Android 模块化热修复热更新打包混淆压缩 6.音视频FFmpeg播放器 1、网络 网络协议模型 应用层负责处理特定的应用程序细节 HTTP、FTP、DNS 传输层为两台主机提供端到端的基础通信 TCP、UDP 网络层控制分组传输、路由选择等 IP 链路层操作系统设备驱动程序、网卡相关接口 TCP 和 UDP 区别 TCP 连接可靠有序面向字节流速度慢较重量全双工适用于文件传输、浏览器等 全双工A 给 B 发消息的同时B 也能给 A 发半双工A 给 B 发消息的同时B 不能给 A 发 UDP 无连接不可靠无序面向报文速度快轻量适用于即时通讯、视频通话等 TCP 三次握手 A你能听到吗 B我能听到你能听到吗 A我能听到开始吧 A 和 B 两方都要能确保我说的话你能听到你说的话我能听到。所以需要三次握手 TCP 四次挥手 A我说完了 B我知道了等一下我可能还没说完 B我也说完了 A我知道了结束吧 B 收到 A 结束的消息后 B 可能还没说完没法立即回复结束标示只能等说完后再告诉 A 我说完了。 POST 和 GET 区别 Get 参数放在 url 中Post 参数放在 request Body 中 Get 可能不安全因为参数放在 url 中 HTTPS HTTP 是超文本传输协议明文传输HTTPS 使用 SSL 协议对 HTTP 传输数据进行了加密 HTTP 默认 80 端口HTTPS 默认 443 端口 优点安全 缺点费时、SSL 证书收费加密能力还是有限的但是比 HTTP 强多了 2、Java 基础容器同步设计模式 StringBuilder、StringBuffer、、String.concat 链接字符串 StringBuffer 线程安全StringBuilder 线程不安全实际上是用 StringBuilder 来实现的所以非循环体可以直接用 循环体不行因为会频繁创建 StringBuilderString.concat 实质是 new String 效率也低耗时排序StringBuilder StringBuffer concat Java 泛型擦除 修饰成员变量等类结构相关的泛型不会被擦除容器类泛型会被擦除 ArrayList、LinkedList ArrayList 基于数组实现查找快o(1)增删慢o(n) 初始容量为10扩容通过 System.arrayCopy 方法 LinkedList 基于双向链表实现查找慢o(n)增删快o(1) 封装了队列和栈的调用 HashMap 、HashTable HashMap 基于数组和链表实现数组是 HashMap 的主体链表是为解决哈希冲突而存在的当发生哈希冲突且链表 size 大于阈值时会扩容JAVA 8 会将链表转为红黑树提高性能 允许 key/value 为 null HashTable 数据结构和 HashMap 一样不允许 value 为 null线程安全 ArrayMap、SparseArray ArrayMap 1.基于两个数组实现一个存放 hash一个存放键值对。扩容的时候只需要数组拷贝不需要重建哈希表 2.内存利用率高 3.不适合存大量数据因为会对 key 进行二分法查找1000以下 SparseArray 1.基于两个数组实现int 做 key 2.内存利用率高 3.不适合存大量数据因为会对 key 进行二分法查找1000以下 volatile 关键字 只能用来修饰变量适用修饰可能被多线程同时访问的变量相当于轻量级的 synchronizedvolatitle 能保证有序性禁用指令重排序、可见性后者还能保证原子性变量位于主内存中每个线程还有自己的工作内存变量在自己线程的工作内存中有份拷贝线程直接操作的是这个拷贝被 volatile 修饰的变量改变后会立即同步到主内存保持变量的可见性。 双重检查单例为什么要加 volatile 1.volatile想要解决的问题是在另一个线程中想要使用instance发现instance!null但是实际上instance还未初始化完毕这个问题 2.将instance newInstance();拆分为3句话是。1.分配内存2.初始化3.将instance指向分配的内存空 3.volatile可以禁止指令重排序确保先执行2后执行3 wait 和 sleep sleep 是 Thread 的静态方法可以在任何地方调用wait 是 Object 的成员方法只能在 synchronized 代码块中调用否则会报 IllegalMonitorStateException 非法监控状态异常sleep 不会释放共享资源锁wait 会释放共享资源锁 lock 和 synchronized synchronized 是 Java 关键字内置特性Lock 是一个接口synchronized 会自动释放锁lock 需要手动释放所以需要写到 try catch 块中并在 finally 中释放锁synchronized 无法中断等待锁lock 可以中断Lock 可以提高多个线程进行读/写操作的效率竞争资源激烈时lock 的性能会明显的优于 synchronized 可重入锁 定义已经获取到锁后再次调用同步代码块/尝试获取锁时不必重新去申请锁可以直接执行相关代码ReentrantLock 和 synchronized 都是可重入锁 公平锁 定义等待时间最久的线程会优先获得锁非公平锁无法保证哪个线程获取到锁synchronized 就是非公平锁ReentrantLock 默认时非公平锁可以设置为公平锁 乐观锁和悲观锁 悲观锁线程一旦得到锁其他线程就挂起等待适用于写入操作频繁的场景synchronized 就是悲观锁乐观锁假设没有冲突不加锁更新数据时判断该数据是否过期过期的话则不进行数据更新适用于读取操作频繁的场景乐观锁 CASCompare And Swap更新数据时先比较原值是否相等不相等则表示数据过去不进行数据更新乐观锁实现AtomicInteger、AtomicLong、AtomicBoolean 死锁 4 个必要条件 互斥占有且等待不可抢占循环等待 synchronized 原理 每个对象都有一个监视器锁monitor同步代码块会执行 monitorenter 开始motnitorexit 结束wait/notify 就依赖 monitor 监视器所以在非同步代码块中执行会报 IllegalMonitorStateException 异常 3、Java 虚拟机内存结构GC类加载四种引用动态代理 JVM 定义可以理解成一个虚构的计算机解释自己的字节码指令集映射到本地 CPU 或 OS 的指令集上层只需关注 Class 文件与操作系统无关实现跨平台Kotlin 就是能解释成 Class 文件所以可以跑在 JVM 上 JVM 内存模型 Java 多线程之间是通过共享内存来通信的每个线程都有自己的本地内存共享变量存放于主内存中线程会拷贝一份共享变量到本地内存volatile 关键字就是给内存模型服务的用来保证内存可见性和顺序性 JVM 内存结构 线程私有 1.程序计数器记录正在执行的字节码指令地址若正在执行 Native 方法则为空 2.虚拟机栈执行方法时把方法所需数据存为一个栈帧入栈执行完后出栈 3.本地方法栈同虚拟机栈但是针对的是 Native 方法 线程共享 1.堆存储 Java 实例GC 主要区域分代收集 GC 方法会吧堆划分为新生代、老年代 2.方法区存储类信息常量池静态变量等数据 GC 回收区域只针对堆、方法区线程私有区域数据会随线程结束销毁不用回收 回收类型 1.堆中的对象 分代收集 GC 方法会吧堆划分为新生代、老年代新生代新建小对象会进入新生代通过复制算法回收对象老年代新建大对象及老对象会进入老年代通过标记-清除算法回收对象 2.方法区中的类信息、常量池 判断一个对象是否可被回收 1.引用计数法 缺点循环引用 2.可达性分析法 定义从 GC ROOT 开始搜索不可达的对象都是可以被回收的 GC ROOT 1.虚拟机栈/本地方法栈中引用的对象 2.方法区中常量/静态变量引用的对象 四种引用 强引用不会被回收软引用内存不足时会被回收弱引用gc 时会被回收虚引用无法通过虚引用得到对象可以监听对象的回收 ClassLoader 类的生命周期 1.加载2.验证3.准备4.解析5.初始化6.使用7.卸载 类加载过程 1.加载获取类的二进制字节流生成方法区的运行时存储结构在内存中生成 Class 对象 2.验证确保该 Class 字节流符合虚拟机要求 3.准备初始化静态变量 4.解析将常量池的符号引用替换为直接引用 5.初始化执行静态块代码、类变量赋值 类加载时机 1.实例化对象 2.调用类的静态方法 3.调用类的静态变量放入常量池的常量除外 类加载器负责加载 class 文件 分类 1.引导类加载器 - 没有父类加载器 2.拓展类加载器 - 继承自引导类加载器 3.系统类加载器 - 继承自拓展类加载器 双亲委托模型 当要加载一个 class 时会先逐层向上让父加载器先加载加载失败才会自己加载 为什么叫双亲不考虑自定义加载器系统类加载器需要网上询问两层所以叫双亲 判断是否是同一个类时除了类信息还必须时同一个类加载器 优点 防止重复加载父加载器加载过了就没必要加载了安全防止篡改核心库类 动态代理原理及实现 InvocationHandler 接口动态代理类需要实现这个接口Proxy.newProxyInstance用于动态创建代理对象Retrofit 应用 Retrofit 通过动态代理为我们定义的请求接口都生成一个动态代理对象实现请求 4、Android 基础性能优化Framwork Activity 启动模式 standard 标准模式singleTop 栈顶复用模式 推送点击消息界面 singleTask 栈内复用模式 首页 singleInstance 单例模式单独位于一个任务栈中 拨打电话界面 细节taskAffinity任务相关性用于指定任务栈名称默认为应用包名allowTaskReparenting允许转移任务栈 View 工作原理 DecorView (FrameLayout) LinearLayout titlebarContent调用 setContentView 设置的 View ViewRoot 的 performTraversals 方法调用触发开始 View 的绘制然后会依次调用: performMeasure遍历 View 的 measure 测量尺寸performLayout遍历 View 的 layout 确定位置performDraw遍历 View 的 draw 绘制 事件分发机制 一个 MotionEvent 产生后按 Activity - Window - decorView - View 顺序传递View 传递过程就是事件分发主要依赖三个方法:dispatchTouchEvent用于分发事件只要接受到点击事件就会被调用返回结果表示是否消耗了当前事件onInterceptTouchEvent用于判断是否拦截事件当 ViewGroup 确定要拦截事件后该事件序列都不会再触发调用此 ViewGroup 的 onInterceptonTouchEvent用于处理事件返回结果表示是否处理了当前事件未处理则传递给父容器处理细节 一个事件序列只能被一个 View 拦截且消耗View 没有 onIntercept 方法直接调用 onTouchEvent 处理OnTouchListener 优先级比 OnTouchEvent 高onClickListener 优先级最低requestDisallowInterceptTouchEvent 可以屏蔽父容器 onIntercet 方法的调用 Window 、 WindowManager、WMS、SurfaceFlinger Window抽象概念不是实际存在的而是以 View 的形式存在通过 PhoneWindow 实现WindowManager外界访问 Window 的入口内部与 WMS 交互是个 IPC 过程WMS管理窗口 Surface 的布局和次序作为系统级服务单独运行在一个进程SurfaceFlinger将 WMS 维护的窗口按一定次序混合后显示到屏幕上 View 动画、帧动画及属性动画 View 动画 作用对象是 View可用 xml 定义建议 xml 实现比较易读支持四种效果平移、缩放、旋转、透明度 帧动画 通过 AnimationDrawable 实现容易 OOM 属性动画 可作用于任何对象可用 xml 定义Android 3 引入建议代码实现比较灵活包括 ObjectAnimator、ValuetAnimator、AnimatorSet时间插值器根据时间流逝的百分比计算当前属性改变的百分比系统预置匀速、加速、减速等插值器类型估值器根据当前属性改变的百分比计算改变后的属性值系统预置整型、浮点、色值等类型估值器使用注意事项避免使用帧动画容易OOM界面销毁时停止动画避免内存泄漏开启硬件加速提高动画流畅性 硬件加速将 cpu 一部分工作分担给 gpu 使用 gpu 完成绘制工作从工作分摊和绘制机制两个方面优化了绘制速度 最后 Android学习是一条漫长的道路我们要学习的东西不仅仅只有表面的 技术还要深入底层弄明白下面的 原理只有这样我们才能够提高自己的竞争力在当今这个竞争激烈的世界里立足。 人生不可能一帆风顺有高峰自然有低谷要相信那些打不倒我们的终将使我们更强大要做自己的摆渡人。 我把自己这段时间整理的Android最重要最热门的学习方向资料放在了我的GitHub里面还有不同方向的自学编程路线、面试题集合/面经、及系列技术文章等。 资源持续更新中欢迎大家一起学习和探讨。
http://www.pierceye.com/news/597941/

相关文章:

  • 阿里巴巴上做网站要多少钱信息网络工程师
  • 网站建设与网页设计心得体会淘宝网页制作素材
  • 男女做床网站装酷网装修平台
  • 网站引导页动画华为网站哪个公司做的
  • 网站开发用了哪些技术上海建设网站制作
  • 惠州微网站建设胶州家园网站建设
  • 建设配资网站有要求吗网站的内部链接如何做
  • 济南专业做公司网站的机构评价一个网站的优缺点
  • 广东省石油化工建设集团公司网站炫酷个人网站
  • 石家庄模板建站代理什么网站可以自己做字
  • 公司想做个网站应该怎么做河南郑州网站设计公司
  • 建电影网站赚钱挣钱吗网站互动功能
  • 流浪动物网站开发巴中手机网站建设
  • 吕梁网站建设kuyiso手机网站建设 jz.woonl
  • 电脑和手机都能浏览的网站开发设计学类包括哪些专业
  • 网站规划与建设评分标准网站中竖导航栏怎么做
  • 网站备案规定周到的商城网站建设
  • 考幼师证去哪个网站做试题如何分析网站建设
  • 济南智能网站建设哪家好化工网站建设推广
  • 福州 网站定制设计稿定设计官方免费下载
  • 统计局网站建设情况南宁做网站优化的公司
  • 免费的软件网站建设北京建设厅网站查询
  • 没有公司做网站短网址短链接生成器
  • 利于seo优化的网站网站怎么上传到空间
  • 寿阳网站建设开发网站的硬件成本
  • 做网站的叫什么软件众筹网站开发
  • 鲜花网网站开发的目标河南郑州建设网站
  • 做网站上哪买空间帝国网站管理系统安装连接不上数据库
  • 做前端网站用什么工具网站备案后怎么做实名认证
  • 做兼职那个网站比较好重庆的seo服务公司