
小白成长日记
文章平均质量分 74
爱做的小乌龟
但行好事,莫问前程
展开
-
IPC基础概念介绍
1.Serializable接口 Serializable是java提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作。使用Serializable来实现序列化相当简单。只需要在类的生命中指定一个类似下面的标识即可自动实现默认的序列化过程private static final long serialVersionUID = 123124123312L想让一个类实现序列化原创 2017-02-19 10:42:28 · 617 阅读 · 0 评论 -
重载与重写抽象类和接口
重载overLoad,存在于方法名相同,但是参数顺序,参数个数,参数类型至少有一个不同的情况,但是除方法返回值以外的其他都相同的方法不能称之为重载,重载可以存在与同类之间,也可以存在于父类和子类之间。重写override,指的是方法的名字,参数个数参数类型,顺序都相同的方法,并且两个方法分别位于父类和子类,子类中的方法不能缩小父类中方法的访问权限,也不能抛出比父类更多的异常,如果父类的方法前有fi原创 2017-03-06 14:54:50 · 688 阅读 · 0 评论 -
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
如题 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;原创 2017-03-10 13:57:33 · 962 阅读 · 0 评论 -
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
如题: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)public class Solution { /* public class RandomListNode { int label; RandomLis原创 2017-03-10 14:21:50 · 1012 阅读 · 0 评论 -
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
如题,《剑指offer》 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。public class Solution { public int MoreThanHalfNum_Solution(int [] array) {原创 2017-03-10 14:57:03 · 840 阅读 · 0 评论 -
丑数
如题 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。public class Solution { public int GetUglyNumber_Solution(int index) { int sum[] = new int[index]原创 2017-03-14 01:19:52 · 836 阅读 · 0 评论 -
记一次坑爹的ReactNative应用集成推送
公司有个需求,实现纯RN应用的接收推送后的界面跳转,推送使用的是阿里云推送 坑的地方至少有两个。 如何知道应用是否已经启动了呢? 如何将信息发送给RN端呢? 首先第一个问题相对来说还是比较好解决的,用下面的代码就可以实现。 亲测可行 private boolean _isApplicationRunning(Context context) { ActivityManag原创 2017-05-02 18:14:11 · 1228 阅读 · 0 评论 -
无语
running/paused/stopped/killed activity 处于活动状态。用户可以点击屏幕,并且做出响应,处于activity栈顶的状态。 paused activity失去焦点的时候,或者activity被非全屏activity占据,或者activity被透明的activity覆盖。 activity失去了和用户交互的能力,并不是activity被销毁,除非内存紧张。 s原创 2017-06-07 18:38:21 · 365 阅读 · 0 评论 -
ANR&OOM
应用程序的响应性是由activityManager和WindowManager系统服务监视的,超过指定时间就会弹框造成耗时操作原创 2017-06-07 23:38:58 · 251 阅读 · 0 评论 -
HashMap实现原理
HashMap是数组+链表实现的,既然用到hash散列,那么肯定不可避免的会出现冲突问题,HashMap解决冲突的方法是拉链法,因为这里有用到数组,那么当容量不足的时候就需要进行扩容操作了,在HashMap中有个术语叫冲突,当冲突几率越来越高的时候就需要进行扩容操作了,那什么情况就叫冲突几率高呢?就是当我们的数组元素个数超过了数组原先大小*装填因子,默认情况下的装填因子是0.75,扩容有个坏处就是每转载 2017-06-08 10:46:32 · 298 阅读 · 0 评论 -
插件化
动态加载APK资源加载 动态加载资源。 通过反射调用代码加载类加载机制 java当中的字节码添加到虚拟机, dexclassLoader可以加载apk文件中的,用于动态加载和热更新pathclassloader 通过反射进行调用反射在运行时调用这个方法,转载 2017-06-08 11:11:51 · 232 阅读 · 0 评论 -
java 操作给定的二叉树,将其变换为源二叉树的镜像。
操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 解题思路: 1、找到不为空的节点。 2、然后交换左右节点。 3、递归调用此函数。public class Solution { public void Mirror(TreeNode root) { if(root!=null&&root.left!=null||root.right!=null){原创 2017-03-08 11:41:02 · 337 阅读 · 0 评论 -
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)class TreeNode{ int val=0; TreeNode left=null; TreeNode right=null; public TreeNode(int val){ this.val=val; } }原创 2017-03-08 11:01:34 · 941 阅读 · 0 评论 -
理解Window和WindowManager
Window标识一个窗口的概念,Window是一个抽行类,它的具体实现是PhoneWindow。创建一个Window是很简单的事,只需要通过WindowManager即可完成。WindowManager是外界访问Window的入口,Window的具体实现位于WindowManagerService中。WindowManager和WindowManagerService的交互式一个IPC过程。Andr转载 2017-02-19 11:39:07 · 289 阅读 · 0 评论 -
Android四大组件
四大组件的运行状态 Android的四大组件除了BroadcastReceiver意外,其他三大组件都必须在AndroidManifest中注册,对于BroadcastReceiver来说,它既可以在AndroidManifest中注册,也可以通过代码来注册。在调用方式上,Activity、Service和BroadcastReceiver需要借助Intent,而ContetnProvi原创 2017-02-19 12:39:41 · 325 阅读 · 0 评论 -
我眼中的设计模式(3)
继续学习设计模式 参考鸿洋大神的文章 装饰者模式装饰者模式:若要扩展功能,装饰者提供了比集成更有弹性的替代方案,动态地将责任附加到对象上。 先简单描述下装饰者模式发挥作用的地方,当我们设计好了一个类,我们需要给这个类添加一些辅助的功能,并且不希望改变这个类的代码,这时候就是装饰者模式大展雄威的时候了。这里还体现了一个原则:类应该对扩展开放,对修改关闭。首先是装备的超类/** * 装备的接口转载 2017-02-20 15:13:35 · 204 阅读 · 0 评论 -
我眼中的设计模式(4)
继续设计模式, 参考我鸿洋大神的文章鸿洋的文章 工厂模式 这个模式的家族分为: 1。静态工厂模式 2。简单工厂模式 3。工厂方法模式 4。抽象工厂模式 一,静态工厂模式 这个最常见了,项目中的辅助类,TextUtil.isEmpty等,类+静态方法。下面开始详细介绍:略。 二、简单工厂模式 买肉夹馍的店 RoujiaMoStorepublic class RoujiaMoSt转载 2017-02-20 15:39:01 · 478 阅读 · 0 评论 -
我眼中的设计模式(6)
越来越觉得跟着大神学比那些什么大话设计模式看的我好懂多了 继续继续,权当记录了 这里写链接内容 这篇是命令模式 定义:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 这尼玛定义,看得人蛋疼,看不明白要淡定,我稍微简化一下:将请求封装成对象,将动作请求者和动作执行者解耦。好了,直接用例子来说明。 需求:最近智能家电很火热啊,未来尼玛估计转载 2017-02-20 18:28:39 · 207 阅读 · 0 评论 -
文章标题
Android动画原理 Android动画可以分为View动画、帧动画、属性动画,其中View动画又可以分为平移(Translate)、缩放(Scale)、旋转(Rotate)、透明度(Alpha)四种,帧动画可以认为是View动画的一种,实现原理类似于放电影,通过一帧一帧的图片进行播放来达到动画的效果,正是因为这点需要注意他可能会出现OOM异常,属性动画是3.0之后出现的,他也可以实现Vie转载 2017-02-23 10:21:41 · 257 阅读 · 0 评论 -
我眼中的Binder
先来看系统服务: 首先从系统刚刚启动说起,init进程会启动一个叫ServiceManager的进程,该进程启动之后会做三件事:(1)通过open打开设备文件/dev/binder,将该文件中的内容通过mmap映射到本进程空间中;(2)通过IO控制命令BINDER_SET_CONTEXT_MGR将当前进程注册到Binder驱动中,Binder驱动便会为他在内核空间创建一个称为binder_co转载 2017-02-23 11:23:06 · 361 阅读 · 0 评论 -
Android中的线程和线程池
线程在Android中是一个重要的概念,从用途上来说,线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。除了Thread本身以外,在Android中可以扮演线程角色的还有很多,比如AsyncTask和IntentService,同时HandlerThread的表现形式也是一种特殊的线程。尽管AsyncTask、IntentService以及HandlerThre转载 2017-02-23 19:19:26 · 306 阅读 · 0 评论 -
Activity的工作过程
(1)Android作为一个优秀的基于Linux的操作系统,其内部有许多值得我们学习和借鉴的地方。 首先Android系统启动的时候加载的是Linux内核,在Linux内核加载完成之后会创建出来一个init进程,启动init进程后,他fork出一个ServerManager的子进程,该进程主要用于管理我们的系统服务,它内部用一个Server列表,这个列表存储的就是那些已经注册了的系统服务,随后in原创 2017-02-19 18:20:53 · 1019 阅读 · 0 评论 -
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
如题:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 注:链表1和链表2是两个递增排序的链表,合并这两个链表得到升序链表为链表3.首先分析合并两个链表的过程。我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。如下图所示。public class Solution{ publi原创 2017-03-08 10:29:27 · 1743 阅读 · 0 评论 -
intentService
上面我们分析了Handler消息处理机制以及HandlerThread里面所涉及到的一些知识点,知道HandlerThread其实就是为了我们在子线程中减少自己创建Looper以及运转Looper而出现的,那么这次的IntentService其实封装的更巧妙,使用HandlerThread的时候我们还需要创建Handler对象出来,但是使用IntentService连Handler对象也不用我们创建转载 2017-06-09 12:30:58 · 376 阅读 · 0 评论 -
多渠道打包
最近由于要独立开发,所以需要掌握从开发到上线的所有阶段,以前从没接触过打包的问题,现在突然接触感觉手忙脚乱的,特此总结一下。 国内的Android开发由于众所周知的原因,Google play无法在国内打开,所以android的市场群雄争霸,为了方便统计各个安卓市场的下载量,需要为每个应用市场的Android包设定一个可以区分应用市场的标识,这个为Android包设定应用市场标识的过程就是多原创 2017-07-02 00:37:11 · 331 阅读 · 0 评论 -
Android 7.0新签名机制
由于之前的打包机制是采用Python进行打包的,导致打包后的apk在7.0上无法进行安装,特此研究下android7.0的签名机制Android7.0加强了签名的加固,导致在新的签名机制下无法使用修改apk文件的方式进行多渠道打包,首先再说一下打包的流程,整个打包的流程就是将Java代码,资源文件以及第三方库整合成一个Apk文件,并对整合后的文件进行签名和优化对其。 1.资源预编译 为每一个非a原创 2017-07-03 00:10:26 · 2538 阅读 · 0 评论 -
DNS
当你请求www.baidu.com时,为了使用户的主机能够将一个HTTP请求报文发送到Web服务器www.someschool.edu,该用户主机必须获得www.someschool.edu 的IP地址。其做法如下。 同一台用户知己运行着DNS应用的客户端。 浏览器从上述URL中抽取主机名www.someschool.edu,并将这台主机名传给DNS应用的客户端。 DNS客户向DNS服务转载 2017-10-13 16:14:39 · 579 阅读 · 0 评论 -
在DNS数据库中插入记录
假如你刚刚创建了令人兴奋的创业公司,你必须要做的第一件事是在注册登记机构注册域名networkutopia.com。注册登记机构是一个商业实体,它验证该域名的唯一性,将该域名输入DNS数据库,对提供的数据库收取少量费用。1999年前,唯一的注册登记机构是Network Solution,它独家经营对于com、net和org域名的注册。但是现在有许多注册登记机构竞争客户,因特网名字和地址分配机构(IC转载 2017-10-16 14:44:14 · 1681 阅读 · 0 评论 -
接口和抽象类
接口和抽象类很像,它们都具有如下特征。 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。 但接口和抽象类之间的差别非常大,这种差别主要体现在二者的设计目的上。 接口作为系统与外界交互的窗口,接口体现的是一种规范。对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务转载 2017-11-13 17:53:57 · 261 阅读 · 0 评论 -
关于性能优化问题的探究
约60%应用冷启动时间超过2s SDK的不合理使用(基础类型和装箱类型、HashMap和SparseArray) 在系统回调或频繁调用的代码块中创建新的实例 几乎所有的App都存在过度绘制的问题,Activity和Window都设置了背景。 json库的不合理利用,导致Launcher严重卡顿。 进10个应用监听开机广播,导致开机后一段时间Launcher严重卡顿 应用内存占用不合理(适转载 2017-11-21 11:33:13 · 217 阅读 · 0 评论 -
线程和进程
几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。 一般而言,进程包含如下三个特征。 独立性:进程是系统中独立存在的实体,它可以拥有独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其转载 2017-11-21 12:00:03 · 194 阅读 · 0 评论 -
对象与垃圾回收
Java的垃圾回收是Java语言的重要功能之一。当程序创建对象、数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区。对象就保存在这块内存区中,当这块内存不在被任何内存引用的时,这块内存就变成垃圾,等待垃圾回收机制进行回收。垃圾回收机制具有如下特征。 垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源。 程序无法精确控制垃圾回收机制运行,垃圾回收会在合适的时候进行。当对转载 2017-11-16 13:53:11 · 255 阅读 · 0 评论 -
JAVA线程池
java8改进的线程池 从java5开始新增了一个Executors工厂类来产生线程池,该工厂类包含如下静态工厂方法来创建线程池。 newCachedThreadPool(): 创建一个具有缓存功能的线程池,系统根据需要创建线程,这些线程将会被缓存在线程池中。 newFixedThreadPool():创建一个可重用的,具有固定线程数的线程池。 newSingleThreadExecutor转载 2017-11-22 16:28:01 · 203 阅读 · 0 评论 -
java类加载
当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤称为类加载或类初始化。如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤称为类加载和类初始化。1.类加载 类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对转载 2017-11-23 18:35:05 · 320 阅读 · 0 评论 -
我眼中的HTTPS
目录前言什么是HTTPShttps的通信过程Charlest等抓包工具的使用无法抓包的原因及解决办法原因解决办法1解决办法2采用双向验证的应用前言笔者由于项目中经常用到抓包工具,在抓包的时候Https的请求总是抓取不到,于是就研究了下https。这种网络基础方面的知识不记下来太容易遗忘了,所以写篇文章,总结下学到的以及用到的,文章如果写得有不对...原创 2018-04-16 13:56:36 · 1403 阅读 · 2 评论 -
star法则
Situation: 简短的项目背景。 比如项目规模,开发的软件的功能、目标用户。 Task:自己完成的任务。这个要写详细,要让面试官对自己的工作一目了然。在用词上要注意区分参与和负责;如果只是加入某一个开发团队写了几行代码就用负责,那就很危险了。面试官看到简历上应聘者负责了某个项目,他可能就会问项目的总体框架设计、核心算法、团队合作等问题。这些问题对于只是简单“参与”的人来说,是很难回答的,...转载 2018-05-02 22:05:07 · 3395 阅读 · 0 评论 -
电子邮件的工作过程
已发送方Alice发电子邮件给接收发Bob为例,对每个组成部分进行描述。 用户代理允许用户阅读、回复、转发、保存和撰写报文。微软的Outlook和Apple Mail是电子邮件用户代理的例子。当Alice完成邮件撰写时,她的邮件代理向其邮件服务器发送邮件,此时邮件放在邮件服务器的外出报文列中。 邮件服务器形成了电子邮件体系结构的核心。每个接收方(如Bob)在其中的某个邮件服务器上有一个邮箱。B转载 2017-10-12 18:39:46 · 3353 阅读 · 0 评论 -
文件传输协议:FTP
在一个典型的FTP会话中,用户坐在一台主机(本地主机)前面,向一台远程主机传输(或接收来自远程主机的)文件。为使用户能访问它的远程账户,用户必须提供一个用户标识和口令。在提供了这种授权信息后,用户就能从本地文件系统向远程主机文件系统传送文件,反之亦然。 HTTP和FTP都是文件传输协议,并且有很多共同的特点,例如,他们都运行在TCP上。然而,这两个应用层协议也有一些重要的区别,其中最显著的就是F转载 2017-10-12 16:28:45 · 836 阅读 · 0 评论 -
运算符优先级
有一次写程序 判断了 (!a&b) 这样如果想先计算a&b是需要加括号的原创 2017-07-05 17:37:22 · 225 阅读 · 0 评论 -
Java异常处理机制
异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等,异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。。Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。在java中,所有的异常都有一个共同的祖先Throwable(可抛出)。它有两转载 2017-07-06 15:33:21 · 234 阅读 · 0 评论