kotlin academy's trouble

Kotlin puzzlers 话说已经好久没写blog了呢,又是失踪人口回归,我一直觉得不能强迫自己为了写博客而写博客,总是要为了记录点什么才行,这次我就刚好见到kotlin academy发的邮件,瞥了一眼觉得很多易错的题目蛮好(鬼畜)的,就忍不住想写了blog记录一下啦。 原文地址:Kotlin Academy 以下题目的答案和解析都下一题揭晓啦(学自夜雀 逃。 Order of nullable operators (猫王操作符的优先级 重要提示Level:Beginner 1234567fun main(args: Array<String>) { val x: Int? = 2 val y: Int = 3 val sum = x?:0 + y println(sum)} What will it print ? Some possibilities: //这个不用翻译了吧… a. 3 b. 5 c. 2 d. 0 Author: Thomas Nield

Kotlin的柯里化

难得今天休息了一天,就一直在睡觉,突然看到群里有人说到Kotlin的柯里化,正好最近在学习Kotlin,就想要记录一下。想到自己很久没动的博客(懒..不是忙),垂死病中惊坐起,意识到自己不能继续颓废下去了,赶紧爬起来写了这篇博客,也算是新年有个好开始吧。以后尽量把博客捡起来。。。 Koltin是什么语言我也不想多说了,google的推荐让这个东西着实火了一把,我也就怀着好奇心去学了下,因为以前一直写Java(写的时间也不久),确实被Kotlin的扩展函数,重载操作符,空安全给吸引到了,说实话,写了Kotlin,我真的觉得Java在这个时代有点过去式的感觉。。不多说了,看标题就知道我今天要说的是什么了。 ###柯里化 这是一个神奇的东西,Java未曾出现过,起码在java8之前(即使是8我觉得也不是标准的Curry,只是像而已),虽然Kotlin没有这个语法糖,但对于可以FP的Kotlin来说,这都不是事。

Binder随意记录

[TOC] ###为何选择Binder Linux已经拥有管道,system V IPC,socket等IPC手段,却还要依赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。 ####传输性能好Binder的优点之一就是,复杂数据类型传递可以复用内存。 socket:是一个通用接口,导致其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。 管道和消息队列:因为采用存储转发方式,所以至少需要拷贝2次数据,效率低。 共享内存:虽然在传输时没有拷贝数据,但其控制机制复杂。 IPC 数据拷贝次数 共享内存 0 Binder 1 Socket/管道/消息队列 2 ####安全性高传统IPC没有任何安全措施,完全以来上层协议来确保。首先传统IPC的接收方无法获得对方进程可靠的UID/PID(用户ID/进程ID),从而无法鉴别对方身份。

几分钟手写一个双向链表

链表和顺序表 首先,对比一下顺序表和链表 顺序表 优点:尾插效率高,支持随机访问 缺点:中间插入或者删除效率低 应用:ArrayList .. 单链表 优点: 头插,中间插,删除效率高 缺点:不支持随机访问 应用场景:MessageQueue 为什么循序表的中间插入和删除的效率低呢?为什么链表的头插尾插删除效率高呢? 还是看源码,就从ArrayList和LinkedList看看:

搭建nginx

最近萌生搭建一个流媒体服务器的想法,因为自己在写一些音视频的东西,所以就想搞一个玩一玩。本篇在ubuntu16.04下成功。 第一部分:准备工作先在/root/下新建一个目录存放这些文件。 mkdir nginxcd nginx 然后在执行下面三条命令。 下载Nginxwget http://nginx.org/download/nginx-1.12.1.tar.gz 下载OpenSSL(因为Nginx依赖于OpenSSL)wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_0f.tar.gz 下载Rtmpwget https://github.com/arut/nginx-rtmp-module/archive/v1.2.0.tar.gz

C++编程风格笔记

C++编程风格笔记 定义函数时,参数顺序为:输入参数在前,输出参数在后。 C/C++函数参数分为输入参数和输出参数两种,有时输入参数也会输出(值被修改时),输入参数一般传值或常数引用,输出参数或输入/输出常数为非常数指针(non-const pointers)。对参数排序时,将所有输入参数置于输出参数之前。不要仅仅因为是新添加的参数,就将其置于最后,而应该依然置于输出参数之前。 包含文件的名称及次序 将包含次序标准化可增强可读性丶避免隐藏依赖(hidden dependencies, 隐藏依赖主要指包含的文件中编译时),次序如下:C库丶C++库丶其他库的.h丶项目内的.h。 项目内头文件应按照项目源代码目录树结构排序,并且避免使用UNIX文件路径。//.(当前路径) ..(父路径)。//例如,google-awesome-project/src/base/logging.h应像这样被包含: 1#include "base/logging.h"

Mrak message parts that should not be translated

好久没写博客了,最佳一直在看官网的training啊,突然看到一个奇怪的东西,没错就是标题的那个东西,官网是这样子介绍的: Often strings contain contain text that should not be translated into other languages. Common examples might be a piece of code, a placeholder for a value, a special symbol, or a name. As you prepare your strings for translation, look for and mark text that should remain as-is, without translation, so that the translator doesn’t change it. 这几句话大家应该都能看得懂,大概意思就是不让字符串中的代码,占位符,特殊标识或者名字什么的被翻译,而你就要控制他们不被改变。我其实看完有点无语,意思很明显,但是我看不懂啊,于是我把它的示例的string资源打印了一下看看是什么效果(我也是很无聊的):

AppCompatActivity的作用分析

AppCompatActivity的作用分析 对于v7包下的AppCompatActivity,我是比较晚入的android(并不知道是不是坑),所以一开始就用的as创建项目就很奇怪为什么我的activity自动继承了AppCompatActivity,不是应该继承Activity吗?Ecm?我仿佛感觉受到了欺骗,于是就对其进行了研究(就是看源码拉)。(因为当时是边看边解析边写的,所以思路可能有点乱,自己再看一遍源码更好,也是学习的一部分) 一开始我就发现了v4 v7 v13等等的support库,然后发现这些库是用来解决兼容问题的,数字分别对应了android的API版本,即分别适配android版本4,7,13以上的app。看完之后发现google程序员为了适配也是良苦用心啊。

滑动冲突的解决方式

外部拦截法 即指点击事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,如果不需要此事件就不拦截,这样就可以解决滑动冲突的问题,这种方法比较符合点击事件的分发机制。外部拦截法要重写父容器的onInterceptTouchEvent方法,并在内部做相应的拦截。伪代码如下:

使用SVG来实现复杂的自定义View

最近发现可以用SVG来实习非常复杂的自定义View,可以说是非常的厉害了。只要你看到不想做的很复杂的设计图,你就让美工妹子给你来一张SVG吧,还可以趁机和她聊下天。 我们就来画一个可交互的中国台湾地图吧,首先我们来理一下做这种自定义View的步骤。 下载含有中国地图的 SVG 用**此 **网站 将svg资源转换成相应的 Android代码 利用Xml解析SVG的代码 封装成javaBean 最重要的得到Path 重写OnDraw方法 利用Path绘制中国地图 重写OnTouchEvent方法,记录手指触摸位置,判断这个位置是否坐落在某个省份上 对了,地图资源可以在**这里 **下载。开始写代码吧。 项目地址点这里可以看源码。 前两步不需要我如何说了吧,可以把转化后的android代码,放入res/raw目录下,接下来开始第三步:

12