-
框架深入| Dagger2深入浅出 Part1_使用操作
什么是Dagger2?Dagger2是Dagger的升级版,是一个依赖注入框架,第一代由大名鼎鼎的Square公司共享出来,第二代则是由谷歌接手后推出的,现在由Google接手维护。google / dagger [GitHub地址] 什么是依赖注入?依赖注入是面向对象编程的一种设计原则,其目的是为了降低程序耦合,这个耦合就是类之间的依赖引起的。 Dagger2专题框架深入| Dagger2深入浅出 Part1_使用操作框架深入| Dagger2深入浅出 Part2_源...…
-
Android面经| 算法题解
整理了校招面试算法题,部分《剑指offer》算法题,以及LeetCode算法题,本博文中算法题均使用Java实现 校招面试题解 剑指offer部分题解 LeetCode中文网 部分题解 题目描述: 了解哪些排序算法,依次描述并说下时间、空间复杂度 技术点: 排序 参考 十大经典排序算法最强总结(含JAVA代码实现) 思路: 名称 描述 时间复杂度 空间复杂度 ...…
-
补全计划| JVM内存区域管理
在Android开发中,我们经常会碰到OOM以及莫名闪退的情况,很大程度上导致于此的原因都是因为我们没有很好地对内存进行管理,进而导致内存泄露(如长生命周期的对象持有短生命周期对象的引用)、内存溢出的情况(如Handler的不规范写法,加载过大过多的bitmap资源)。于是有时要求程序员们进行手动GC,或使用更轻量的数据结构等方法去避免内存溢出。 内存溢出(Out Of Memory)指程序在申请内存时,没有足够的内存空间供其使用,出现OOM;比如申请了一个integer,但...…
-
补全计划| 类加载器+插件化
在阿里一面中问到了这块知识,当时没准备类加载器相关的,还很尴尬地提到了插件化,结果也没能讲多少。那么,始めましょう!补全计划!概述 类加载 定义虚拟机把描述类的数据从Class文件加载到内存,并对数据进行效验,转换解析,连接初始化,都是在程序运行期间进行的,这种策略虽然会令类的加载提供一些性能开销,但是给java提供了很高的灵活性,java天生可以动态拓展的语言特性就是依赖运行时动态加载和动态链接的特点实现的,例如如果写一个面向接口的程序可以等到运行时再写具体的实现,用户可以通过ja...…
-
学习笔记| git相关
常用命令$ git init $ git clone $ git add filename$ git add . //添加所有文件至暂存区$ git commit -m "yourmassage"$ git push origin master //推送到远程master分支$ git status //查看文件的状态$ git remote add o...…
-
Android面经| 回顾展望
从去年12月开始极其不认真断断续续地啃书,三月底才开始认真整体性复习(从github绿墙可以看到中间一直在做项目….)对比于从年初开始认真复习刷题,最后上岸字节跳动的同学,我实在是太菜了四月初面阿里(挂了),四月中面宇视(offer get,已拒),五月底面了三家分别是教育、金融和互联网类(一周CP),三家都拿到offer,前两家不方便提及因为还没拒。算是大中小厂都面了一遍,中间经历了痛苦的求职之路(这里实力劝退,跨平台的出现,Android Native开发实习真的很难找…)。最后终...…
-
搭建jekyll + Github Pages博客
个人博客:https://withlei.github.io/ 操作系统:Windows10Jekyll是什么 引用自官网:Jekyll 是一个简单的博客形态的静态站点生产机器。它有一个模版目录,其中包含原始文本格式的文档,通过一个转换器(如 Markdown)和我们的 Liquid 渲染器转化成一个完整的可发布的静态网站,你可以发布在任何你喜爱的服务器上。Jekyll 也可以运行在 GitHub Page 上,也就是说,你可以使用 GitHub 的服务来搭建你的项目页面、博客或者网站...…
-
Android面经| 问题归纳
面经专题系列:Android面经| 问题归纳Android面经| 回顾展望Android面经| 算法题解@[toc]Android相关AMS相关ActivityManagerService是Android中最核心的服务 , 主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似。看源码谈谈AMS启动过程:ActivityManagerService分析——AMS启动流程Activity相关SingleTask优化//如果标签为s...…
-
ArrayList、Vector、HashMap、HashTable如何扩容
在复习Java基础容器扩容相关时,发现许多博客写的十分混乱,整理一下源码和结论ArrayList默认初始10个大小,每次扩容是原容量的1.5倍,具体代码如下public ArrayList() { this(10);} int newCapacity = (oldCapacity * 3)/2 + 1;public static native void arraycopy(Object src, int srcPos, ...…
-
学习笔记|《Android开发艺术探索》第八章
理解Window和WindowManagerWindow是一个抽象类,它的具体实现是PhoneWindow。WindowManager是外界访问Window的入口,Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService的交互是一个IPC过程。Android中所有的视图都是通过Window来呈现的,不管是Activity、Dialog还是Toast,它们的视图实际上都是附加在Window上的,因此Window...…
-
补全计划| Android性能优化分析
Android性能优化合理管理内存节制的使用Service如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来。当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能。我们可以使用IntentService,当后台任务执行结束后会自动停止,避免了Service的内存泄漏。当界面不可见时释放内存当用户打开了另外一个程序,我们的...…
-
学习笔记|《Android开发艺术探索》第四章
View的工作原理4.1 初识ViewRoot和DecorView ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView建立连接。 View的绘制流程是...…
-
学习笔记|《Android开发艺术探索》第三章
《Android开发艺术探索》第三章笔记View的基础知识 什么是ViewView是Android中所有控件的基类,View是一种界面层的控件的一种抽象,它代表了一个控件,在Android设计中,ViewGroup也继承了View,这就意味着View本身就可以是单个控件也可以是多个控件组成的一组控件,通过这种关系就形成了View树的结构。 View的位置参数view的位置主要由它的四个顶点来决定,分别对应于View的四个属性:top、left、right、bottom,其中top是左上...…
-
微信早晚安自动化
Description和基友异地,总是不能及时和他说早晚安。自动化早晚安,解放双手~Usage Make sure Node.js and npm installed. Run npm install to install all dependencies. Run npm start to start the application.Demonstration结果被基友这样回复,哭了项目链接项目地址-GitHub…
-
部署项目到CentOS6
一、 环境服务商:VultrLinux操作系统: centos6.0tomcat版本: tomcat7.0+二、 安装Tomcat1、 更新yum源[root@vultr ~]# yum update2、 查询yum中的tomcat版本信息[root@vultr ~]# yum info tomcatLoaded plugins: fastestmirror, prioritiesLoading mirror speeds from cached hostfile * base: mirr...…
-
删除Git远程仓库项目的所有内容,重新提交所有内容(填文件大小写坑)
问题在向github远程仓库同步项目的时候发现,之前重新更改大小写的文件夹同步出了问题,导致同时存在大小写的文件夹。或是如果我们上传了一个项目到git并已经commit和push了所有内容,但是忘记搞gitignore文件,导致一些不想加入版本控制的文件,如IDE配置文件,编译文件,部署文件等。解决方案试一试如下命令:首先配置好你的.gitignore文件,然后git config --global core.ignorecase false (全局设置 大小写敏感 。)git rm -...…
-
Flutter开发中遇到的坑 - Waiting for another flutter command to release the startup lock
本机环境 系统:Windows 10 X64 IDE:Android Studio这个错误发生于在编译器里get package,等了很久没有获取到package之后,我果断关掉了AS,打开终端输入了flutter doctor但是出现了这个错误。 查了一下github的flutter issue 找到了解决方法,如下: 打开flutter的安装目录/bin/cache/ 删除lockfile文件 重启AndroidStudio…
-
Flutter学习笔记 - 安装,镜像,配置
随着Flutter1.0正式版发布,很多程序员都把目光放到了Flutter上,毕竟程序员是永远无法满足的o( ̄︶ ̄)o@[toc]Flutter的安装在Windows上安装Flutter过程十分简单本机环境 系统:Windows 10 X64 内存:8G ## 安装前注意 系统:Windows 7 或更高版本(64位) 存储:不低于 400 MB 使用镜像 由于在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,大家可以将如下环境变...…
-
React-Native与安卓原生的混合开发
写在前面目前很多大厂APP(如淘宝、饿了么、美团等等)并不是纯原生Android&IOS,也不是纯JS开发,而是Hybird APP开发,混合型优势很多:比如热更新,保证在一些类似双十一的活动到来时能够快速上线活动页面,用户不必再去更新APP。再来有效地减小了安装包的体积大小,大部分的界面都位于服务器端,本地只需要进行绘制。1. 新建Android项目我这里使用之前的项目2. 在项目根目录引入React-Native模块在项目根目录打开终端(tip:按住shift + 右键,选择打...…
-
学习笔记| Retrofit 有关线程调度器
线程调度器Scheduler(线程调度器)赋予RxJava简洁明了的异步操作,可以说是RxJava中最值得称道的地方。Observable发射数据流,Observer接收响应数据流,以及Operators加工数据流均是在同一个线程中,实现出来的是一个同步的函数响应式。但是函数响应式的实际应用却不是这样的,大部分都是后台处理,前台响应的一个过程。Observable生成发射数据流,以及Operators加工数据流都是在后台线程中进行,而Observer在前台线程中接受并相应数据。Schedu...…