
学习笔记
文章平均质量分 70
Jtag特工
代码和人工智能老兵
展开
-
ECMAScript中的真值和假值
ECMAScript中的真值和假值看了下很多书上和网上文章中介绍ECMAScript中的布尔值,都是干巴巴地一句话:如果值是null, undefined, 0, 空字符串和false,则值为false,其他值都是true.说得当然是没错,不过不利于初学的同学理解。 其实,借着学习真假值的时候,正好是可以将很多知识串在一起的时候。原创 2016-07-21 02:15:26 · 1021 阅读 · 0 评论 -
ART探险(1) - oatdump看到的世界
自从4.4加入Android大家庭,到5.0被正式扶正,ART对Android世界的影响越来越大。这么好玩儿的东西,我们当然要进去探险一番,看看这其中有哪些有趣的事情。原创 2016-07-20 19:59:10 · 6275 阅读 · 3 评论 -
用代码画流程图和时序图快餐教程(1) - graphviz的dot图
graphviz的dot图原创 2016-06-02 15:23:44 · 6516 阅读 · 1 评论 -
mmap原理及其在ART中的应用(1)
mmap原理及其在ART中的应用原创 2016-07-20 12:24:42 · 4165 阅读 · 1 评论 -
Android Studio的JNI开发快餐教程
生命不息,折腾不止,让我们一起跟随Android Studio继续折腾NDK支持原创 2016-07-19 20:25:43 · 1438 阅读 · 0 评论 -
Android中杀进程的几种方法 (1) - killBackgroundProcesses
killBackgroundProcessesActivityManager中提供了几种方式来杀进程,比如有forceStopPackage、removeTask、killBackgroundProcesses等。 下面我们就来看看它们的背后都做了些什么。原创 2016-07-08 18:25:49 · 25119 阅读 · 0 评论 -
说说Android的广播(5) - 广播的历史
AMS中的历史信息处理完广播之后,BroadcastQueue会记录一段历史用于调试原创 2016-06-08 20:45:23 · 1190 阅读 · 0 评论 -
说说Android的广播(1) - 普通广播,有序广播和粘性广播
对于Activity的启动流程,我们已经有了几个版本的分析了。这里我们分析一个更容易一些的,四大组件中最简单的Broadcast Receiver。关于Broadcast,有几点需要了解。首先是广播的类型,然后是广播的发送方法,最后是广播是如何被接收的。这三者相辅相承的,比如普通广播和有序广播只有在详细了解了广播的接收过程了之后,才能真正明白它的含义。原创 2016-06-08 16:45:12 · 6542 阅读 · 2 评论 -
说说Android的广播(4) - 前台广播为什么比后台广播快?
其实,这种前台广播的设计,就是为了加速广播的性能而设计的。二者在设计思想上就有不同。根据应用层实际的需求,决定使用前台广播还是后台广播,本来就是应用设计时候应该考虑的问题。原创 2016-06-08 16:39:45 · 9199 阅读 · 3 评论 -
说说Android的广播(3) - 什么样的广播是并发的?
什么样的广播是并发的?现在让我们开始破解Android中的一个trick,普通广播都是并发的吗? 带着这个问题,我们来看ActivityManagerService.broadcastIntentLocked中的实现逻辑。原创 2016-06-07 16:56:10 · 1909 阅读 · 1 评论 -
ART世界探险(2) - 从java byte code说起
我们从简单指令开始,从java字节码,到dalvik字节码,到最前沿的Arm64 v8a指令集,一层一层构建ART的世界观〜原创 2016-07-21 21:46:10 · 2860 阅读 · 0 评论 -
C++11时代的标准库快餐教程(3) - 排序
讲完容器之后,我们迅速进入到算法部分。原创 2016-10-21 22:09:01 · 1171 阅读 · 0 评论 -
全民学后端快餐教程(2) - 连接数据库
全民学后端快餐教程(2) - 连接数据库上一节我们介绍了如何像写一个普通Java程序一样去写Web应用,现在我们已经可以通过@Controller注解来获取路由,并且返回字符串给浏览器显示。跟客户端打通了之后,下面最重要的任务就是能够访问数据库。我们就以MySQL数据库被Oracle收购后fork出来的Mariadb为例,说明连接数据库的方法。安装配置Mariadb看了下阿里云ECS最新的...原创 2019-02-01 20:05:14 · 294 阅读 · 0 评论 -
全民学后端快餐教程(1) - 只不过是写个Java程序
全民学后端快餐教程(1) - 只不过是写个Java程序服务端程序本质上也只是个Java程序,它接收客户端的输入,然后将计算处理后的返回值返回给客户端。下面我们就以这个思路开始Java后端之旅吧。引用Spring Boot库处理HTTP请求之类的事情,我们需要库的帮助。所以第一步我们就把Spring Boot引入进来。不需要任何工具,我们使用maven来管理库依赖,这样我们只要写一个pom....原创 2019-01-31 17:37:24 · 342 阅读 · 0 评论 -
Tensorflow快餐教程(13) - 程序员学深度学习快速入门五步法
程序员学深度学习快速入门五步法作为一个程序员,我们可以像学习编程一样学习深度学习模型开发。我们以Keras为例来说明。我们可以用5步 + 4种基本元素 + 9种基本层结构,这5-4-9模型来总结。5步法: 1. 构造网络模型 2. 编译模型 3. 训练模型 4. 评估模型 5. 使用模型进行预测4种基本元素: 1. 网络结构:由10种基本层结构和其他层结构组成 2. ...原创 2018-06-04 21:19:57 · 13268 阅读 · 2 评论 -
《梁宁产品思维30讲》学习笔记
我的《梁宁产品思维30讲》学习笔记原创 2018-05-07 14:06:49 · 6728 阅读 · 1 评论 -
Tensorflow快餐教程(11) - 不懂机器学习就只调API行不行?
高层封装API有同学问,我们学习Tensorflow就是想学习一套可以用的套,像编程一样调用就行了,不想学习机器学习的细节,有没有这样的方式?针对于已经有成熟解决方案的模型,why not呢? 在前面已经快速将CNN, RNN的大致概念和深度学习的简史走马观花过了一遍之后,我们就可以开始尝试使用高层封装的API。模型 - 训练 - 评估 三条语句搞定既然高层封装,我们就采用最...原创 2018-05-18 21:24:29 · 1437 阅读 · 1 评论 -
NumPy快餐教程(2) - 多维数组进阶
NumPy快餐教程(2) - 多维数组进阶上一讲我们介绍了ndarray的形状变化和生成方法,这一节我们继续讨论多维数组的使用方法。访问元素NumPy中使用[]方括号来访问元素。如果是一维数组,就用下标数字,例如a[1],如果是多维数组,就在方括号中使用元组tuple,例如a[(2,3,4)]例:In [1]: import numpy as npIn [2]: a原创 2018-01-04 19:33:56 · 736 阅读 · 0 评论 -
NumPy快餐教程(1) - 如何生成多维数组
NumPy快餐教程(1) - 如何生成多维数组Python现在是最热门的人工智能语言,各种工具的支持如Google的Tensorflow,都是首选支持Python的。 但是,与R语言不同,Python语言设计时,并没有考虑对于矩阵运算,统计计算等功能做专项支持。于是我们需要NumPy库来补足这一能力上的不足。 NumPy是Python的著名扩展库,相当于Python中的MATLAB。原创 2018-01-04 10:51:09 · 1615 阅读 · 0 评论 -
ANTLR快餐教程(1) - 有好多现成例子啊
前面介绍LLVM的第一篇中,我们介绍过,编译器的后端基本都可以通过LLVM来解决。 那么,前端我们如何处理呢?我们选择ANTLR。ANTLR是用Java写的词法和语法分析工具。它比lex/flex/yacc/bison是更现代的工具。 最方便的一点是,ANTLR已经替我们写好了常用语言的语法规则,我们已经拥有了常见语言的分析器,可以在其基础上直接做我们想做的事情。原创 2017-03-08 12:05:26 · 13363 阅读 · 5 评论 -
Io语言快餐(1) - 一切皆是对象,消息和槽的语言
为什么要了解Io这样的语言?如果不是《七周七语言》这样的书来介绍它,估计很少有人关注到它吧。其实目的很简单,作为js代码和js虚拟机的开发人员,学习原型化的语言对于更深入地理解javascript是有难以估量的帮助的。毕竟javascript和Io同源,在原型化思想上都供鉴了Self语言的思想。原创 2017-02-18 15:10:28 · 1417 阅读 · 0 评论 -
用代码画流程图和时序图快餐教程(4) - mermaid时序图
mermaid时序图原创 2016-06-02 21:04:20 · 4824 阅读 · 0 评论 -
用代码画流程图和时序图快餐教程(3) - PlantUML画时序图
用描述性的语言来写UML,尤其是Sequence Diagram,PlantUML应该是很多同学的首选了吧。原创 2016-06-02 18:33:10 · 8155 阅读 · 0 评论 -
七周七并发模型摘要(1) - 多重锁
摘要:只要加两把锁,就有可能造成死锁。 尤其危险的是对于被继承或者实现的方法加锁。转载 2016-02-22 17:18:00 · 1069 阅读 · 0 评论 -
我们也说说Android.mk(2) - 函数进阶教程 - 分支、循环、子程序
按照面向过程程序设计的标准流程,我们讲完了顺序结构,就要讲分支、循环和子程序。下面我们就开始讲用于分支、循环和子程序调用功能的函数。原创 2016-03-30 15:47:01 · 2338 阅读 · 0 评论 -
优快云支持语法高亮的常用语言
优快云支持语法高亮的语言列表原创 2016-03-16 17:28:16 · 3385 阅读 · 3 评论 -
Android 6.0 inflate过程分析
Android中LayoutInflater解析布局xml的全过程原创 2016-01-28 20:37:40 · 2961 阅读 · 1 评论 -
关于Android的浅杀
android.app.ActivityManager类提供了removeTask方法来清理任务。 在API21及之前,removeTask中提供一个参数来指定是否要连同任务所运行的进程一起杀掉。 这个方法的第二个参数就是用来指定是否要连同进程一起杀掉,可以为0或者REMOVE_TASK_KILL_PROCESS。原创 2016-01-28 21:01:12 · 2141 阅读 · 0 评论 -
编程点滴-关于boolean常量在判断中的位置
boolean常量在判断中的位置不同,由于短路规则导致生成代码的不同原创 2016-01-28 20:47:10 · 1250 阅读 · 0 评论 -
Android 5.0之DisplayThread
在Android 5.0中,新增了一个DisplayThread类,源码位置在frameworks/base/services/core/java/com/android/server/DisplayThread.java. 这个类的注释是这么写的,22 * Shared singleton foreground thread for the system. This is原创 2015-04-20 19:30:39 · 2447 阅读 · 0 评论 -
Android数据库代码优化(2) - 从Cursor说起
从Cursor说起 虽然大部分应用都是跟ContentProvider打交道,极少有自己的数据库需要做比如更改表结构,建索引视图之类的机会,但是对于query和操作Cursor来讲,每个同学都是非常熟悉的。我们就从Cursor说起。 先讨论几个在以前的开发过程中,真实出现过的问题。以此展开我们的讨论。 问题1,Cursor要不原创 2015-04-20 00:05:00 · 1109 阅读 · 0 评论 -
Android数据库代码优化(1) - 从Google的数据库guide说起
假如我们没有任何在Android上使用SQLite的经验,现在要开始在工作中用SQLite存储一些数据。OK, 我们去看google的官方培训文档吧,http://developer.android.com/training/basics/data-storage/databases.html差不多有个5分钟到15分钟吧,这篇官方培训文档就看完了,然后就可以在应用中使用了,它提示的几个No原创 2015-04-19 23:40:01 · 761 阅读 · 0 评论 -
patchoat相关代码在Android M版中的变化(1)
在Android M中,PMS也是有变化的,比如原来一些用c语言写的变成c++写的了。我们先从被取消掉的patchoat命令的直接调用说起,一起看看都有些什么变化。原创 2016-03-19 18:37:25 · 1810 阅读 · 0 评论 -
Node.js编程快餐(1) - 按行读取文本文件
Node.js与其它语言一样,提供了对文本文件按照行来读的功能。不过与Ruby,Python等语言不同,Node.js的File System对象并不提供迭代访问功能。 需要借助readline模块来实现此功能。原创 2016-02-23 01:12:22 · 3478 阅读 · 3 评论 -
用代码画流程图和时序图快餐教程(2) - mermaid数据流图速成
mermaid的好处是可以在写markdown文档的同时,就直接可以画图了。原创 2016-06-02 16:43:55 · 9955 阅读 · 0 评论 -
Reality is broken <游戏改变世界> 笔记
Reality is broken <游戏改变世界> 笔记转载 2016-05-07 19:15:13 · 1418 阅读 · 0 评论 -
我们也说说Android.mk(1) - 从函数说起
大家都习惯看从头,从构建目标讲起的,导致每篇文档熟的都是前面的部分。很多教程也都是想办法能够观其大略,从整体上给大家一个思路。比如《深入理解Android内核设计思想》的第4章,比如《Android内核剖析》的第18章,比如《深入解析Android 5.0系统》的第2章。于是我打算反其道而行之,先从调用函数开始讲。原创 2016-03-29 17:59:13 · 1612 阅读 · 0 评论 -
我们也说说Android.mk(5) - 案例教程
前面基础知识已经准备得差不多了,我们开始看几个例子巩固一下原创 2016-04-13 12:04:24 · 778 阅读 · 0 评论 -
我们也说说Android.mk(4) - 计算怎么办?
前面我们把Makefile做为一门语言的主要特性大致做了一个描述。但是,我们在实际的Android.mk当中还是会发现有很多事情光用Makefile的字符串替换搞不定啊,这可如何是好?其实,这就是我们在第一讲的最开始就讲shell函数的原因,因为这要靠shell脚本来解决了。原创 2016-04-13 11:30:43 · 885 阅读 · 0 评论 -
我们也说说Android.mk(3) - 宏
传统上我们一直称这种东西为makefile中的变量,其实本质上就是一个宏,只是做的是字符串替换。我们何如就把它叫做宏呢。原创 2016-03-30 18:46:35 · 2312 阅读 · 0 评论