JNI && NDK && SDK

2018-03-14
阅读 2 分钟
2.3k
作用: 使得Java 与 本地其他类型语言(如C、C++)交互(即在 Java代码 里调用 C、C++等语言的代码 或 C、C++代码调用 Java 代码)

Android加载so文件 源码分析

2018-03-14
阅读 5 分钟
5.3k
Android系统中使用ndk进行编程,有很多的好处(Java的跨平台特性导致其本地交互的能力不够强大,一些和操作系统相关的特性Java无法完成;代码的保护:由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大;可以方便地使用C/C++开源库;便于移植,用C/C++写的库可以方便在其他平台上再次使用;提供程序在某些特定...

Android类加载器源码分析

2018-03-05
阅读 9 分钟
3k
Android中的ClassLoader类型可分为系统ClassLoader和自定义ClassLoader。其中系统ClassLoader包括3种分别是: BootClassLoader,Android系统启动时会使用BootClassLoader来预加载常用类,与Java中的Bootstrap ClassLoader不同的是,它并不是由C/C++代码实现,而是由Java实现的。BootClassLoader是ClassLoader的一个内部...

数据结构---图的相关总结

2018-03-04
阅读 2 分钟
4k
什么是图:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。

Hello-CTF

2018-03-02
阅读 1 分钟
2.6k
题目: Hello-CTF: [链接] 分析过程: 点击题目所给的exe文件: 大致理解题目的意思:找到对应的验证码。 将exe文件用IDA Pro(6.8)打开 shift+fn+f12打开字符串窗口: 点击,进入pass!所在的函数: 分别进入相关函数: 使用fn5将函数转换成C语言模式:发现核心代码: 所以验证码应该是:WelcomeToKanXueCtf2017

各位相加

2018-02-03
阅读 1 分钟
2.4k
给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。

尾部的零

2018-02-03
阅读 1 分钟
2.2k
思路: 这是一个数学问题,十进制尾数得到0的只有$2*5$,将阶乘的每个因素分解质因数,明显得到2的数量多于5的数量,所以,这个问题就变成了有多少个5的问题。可以是5,25,125...为什么这样?比如$26!$:25其实可以分解成2个5相乘,而$26/5$只计算了一个5,因此还要再加$26/25$$.

数字整除数

2018-02-03
阅读 1 分钟
3.8k
一个数字整除数是指一个可以被其中包含的每个数字整除的数.举个例子, 128是一个数字整除数, 因为128 % 1 == 0, 128 % 2 == 0, and128 % 8 == 0.并且, 数字整除数不允许包含数字 0.给出数字取值的上下限, 输出一个包含所有数字整除数的列表, 包括边界。注意事项:$0<=L<=R<=2^{31}-1,R-L<=10^6$

完美平方

2018-02-03
阅读 1 分钟
2.5k
思路: 采用动态规划的思想:一个数x可以表示为一个任意数$a$加上一个平方数$b*b$,也就是$x=a+b*b$;$dp[a]$就是和得到$a$需要的最少平方数;$dp[b*b]$的值是$1$$。

丑数

2018-02-03
阅读 1 分钟
1.5k
写一个程序来检测一个整数是不是丑数。丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7。

x的平方根

2018-02-03
阅读 1 分钟
1.9k
题目: 实现 int sqrt(int x) 函数,计算并返回 x 的平方根。 样例: 样例$sqrt(3) = 1$$sqrt(4) = 2$$sqrt(5) = 2$$sqrt(10) = 3$ 思路: 用二分搜索法来找平方根时间复杂度变为$O(logn)$$ 参考答案: {代码...}

快乐数

2018-02-03
阅读 1 分钟
3.8k
写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。

x的n次幂

2018-02-03
阅读 2 分钟
2.5k
思路: 分治思想。 对于n是奇数时,$x^n = x^{n/2}* x^{n/2}* x $对于n是偶数时,$x^n = x^{n/2}* x^{n/2}$$

最多有多少个点在一条直线上

2018-02-03
阅读 2 分钟
5.9k
思路: 选定一个点,分别计算其他点和它构成的直线的斜率,斜率相同的点肯定在同一条直线上。注意:1.在计算机里使用double表示斜率,是不严谨的也是不正确的,double有精度误差,double是有限的,斜率是无限的;表示斜率最靠谱的方式是用最简分数,即分子分母都无法再约分了。分子分母同时除以他们的最大公约数gcd即可得...

排序总结(C++)

2018-01-28
阅读 13 分钟
1.7k
冒泡排序 基础知识 冒泡排序:比较相邻的元素。如果第一个比第二个大,就交换他们两个。每次最外面的循环,得到一个最小值。 时间复杂度:$O(n^2)$ [链接] 代码实现 {代码...} 快速排序 基础知识 快速排序采用的是分治的思想。 基本思路: 在数据集之中,选择一个元素作为“基准”。 所有小于“基准”的元素,都移到“基准”的...

数据结构---链表(单链表)

2018-01-25
阅读 4 分钟
2.6k
链表由一系列结点组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。当链表的每个结点只包含一个指针域时,此链表称为单链表。

PackageManagerService源码阅读笔记

2018-01-25
阅读 4 分钟
3.1k
PackageManagerService是Android系统的核心服务之一,负责系统中Package的管理,应用程序的安装、卸载、信息查询等。开机时由systemServer启动此服务

vim的常见指令

2018-01-24
阅读 3 分钟
2.6k
平时最常的指令: 跳转文件头:gg(一般模式) 跳转到文件末尾:shift+g(一般模式) 跳转到指定行:行号 + gg(一般模式) 多行复制:将光标移动到将要复制的首行处,按nyy复制n行(一般模式) 括号匹配:% 支持鼠标选择::set mouse=a(复制粘贴:用鼠标选中,然后到需要粘贴的地方小点下鼠标中键) vim的三种模式 一...

dex2oat代码阅读笔记

2018-01-24
阅读 10 分钟
9.8k
源码分析基于的是Android6.0的代码 什么是dex2oat dex2oat是ART虚拟机必备的一个组件,主要用来把安装的apk和动态加载的dex等文件转换成oat文件。 源码位置:art\dex2oat\Dex2oat.cc(只有一个文件) 先看两张图(实在找不到最初的出处,感谢原始作者) dex2oat源码分析 Linus: Read The Fucking Source Code dex2oat.cc...

使用vim阅读源码

2018-01-24
阅读 1 分钟
5.6k
需要安装的插件: ctags或者cscope taglist ctags的安装与使用 功能:函数,变量之间的跳转 安装:sudo apt-get install ctagsctags --version查看是否安装成功 使用:1.切换到源代码最上层目录;2.命令:ctags -R(R表示递归遍历子文件夹),会在当前目录生产一个tags文件;3.使tags文件生效:(比较懒的做法)进入~/.vim...

数据结构---树(待补充)

2018-01-22
阅读 4 分钟
3.4k
基本概念 1. 相关定义 树是由n(n>0)个有限节点组成一个具有层次关系的集合。 每个节点有零个或多个子节点。 没有父节点的节点称为根节点。 每一个非根节点有且只有一个父节点。 除了根节点外,每个子节点可以分为多个不相交的子树。 节点的度:一个节点含有的子树的个数称为该节点的度。 树的度:一棵树中,最大的...

最近公共祖先

2018-01-21
阅读 2 分钟
5.4k
给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。注意事项:假设给出的两个节点都在树中存在。

验证二叉查找树

2018-01-21
阅读 2 分钟
4.1k
给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。节点的右子树中的值要严格大于该节点的值。左右子树也必须是二叉查找树。一个节点的树也是二叉查找树。

等价二叉树

2018-01-21
阅读 1 分钟
2.2k
题目: 检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。 样例: 思路: 采用递归的思路: 如果两棵树都是空,认为是等价的。 如果a.val == b.val,则只需考虑左右子树是不是等价二叉树。 参考答案: {代码...}

翻转二叉树

2018-01-21
阅读 1 分钟
3.5k
题目: 翻转一棵二叉树 样例: 思路: 采用递归的想法:交换根节点的左右子树。对左右子树分别执行递归反转 。 参考答案: {代码...}

二叉树的最大深度

2018-01-21
阅读 1 分钟
3.2k
思路: 如果只有一个根节点,那么树的深度为1. 如果只有根节点和左子树,那么树的深度为为左子树的深度+1,如果只有根节点和右子树,那么树的深度为右子树的深度+1。 如果既有左子树和右子树,那么树的深度为左右子树中深度的较大值+1。

实现 Trie

2018-01-21
阅读 3 分钟
1.7k
insert("lintcode")search("code") // return falsestartsWith("lint") // return truestartsWith("linterror") // return falseinsert("linterror")search("lintcode) // return truestartsWith("linterror") // return true

超级丑数

2018-01-21
阅读 2 分钟
2.7k
写一个程序来找第 n 个超级丑数。超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内。比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] 是前 12 个超级丑数。注意事项:

寻找矩阵中的元素

2018-01-19
阅读 1 分钟
1.9k
题目: 给定一个矩阵,查找矩阵中所有行中都出现的元素。你可以假设只有一个这样的元素。 样例: 给定一个矩阵:[ [2,5,3], [3,2,1], [1,3,5]]返回:3 思路: 用一个map来存储矩阵中每个元素出现的次数,当出现的次数等于行数时 参考答案: {代码...}

排序矩阵中的从小到大第k个数

2018-01-13
阅读 1 分钟
2.2k
题目: 在一个排序矩阵中找从小到大的第 k 个整数。排序矩阵的定义为:每一行递增,每一列也递增。 样例: 样例给出 k = 4 和一个排序矩阵:[ [1 ,5 ,7], [3 ,7 ,8], [4 ,8 ,9],]返回 5。 思路: 将矩阵中每个元素放入一个向量中,然后对向量元素进行排序,然后取出第k大的数。 参考答案: {代码...}