编程基础
RickyXE
这个作者很懒,什么都没留下…
展开
-
JNI学习:在Java中保存Native对象引用
在学习Android Framework源码时,发现部分类中声明了这个变量:private int mPtr; // used by native code那么native层是怎么使用这个变量的呢?以Framework中的MessageQueue为例,它的Native模块源码为/frameworks/base/core/jni/android_os_MessageQueue.cpp查看其中的代码,可以发现这几个调用:// Java 层的MessageQueue构造函数中,会调用Native中的这原创 2020-05-29 15:51:47 · 1303 阅读 · 0 评论 -
Kotlin中的构造函数
假设有个Person类,含有两个属性name和age先看一个Java版本public class PersonJava { private final String mName; private final int mAge; public PersonJava(String name) { this.mName = name; this.mAg原创 2017-11-14 17:03:02 · 11998 阅读 · 0 评论 -
Java获得范型类型class
Java很多框架或库中都会提供具有范型的回调接口或抽象类。当我们在使用时,代码类似于:MyClient.getInstance().handleEvent(new MyCallback<SomeEntity>() { @Override public void onSuccess(SomeEntity entity) {原创 2017-09-14 12:50:44 · 2266 阅读 · 0 评论 -
Python访问https报错CERTIFICATE_VERIFY_FAILED
在Mac上安装了Python 3.6版本,使用urllib库访问网页却返回了ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)这样的错误。这是由于MacOS版本的python 3.6版本没有使用系统的openssl进行证书验证。在/Applications/Python\ 3.6/原创 2017-08-23 11:03:54 · 8895 阅读 · 3 评论 -
Javascript中的闭包及应用
闭包是JavaScript比较有意思的特性,也是比较难搞懂的一个概念。一个比较典型的例子就是打印循环计数—— 首先我们写一个小循环,直接打印循环变量ifunction testA() { for(var i = 0; i < 10; i++) { console.log("current: " + i); }};这个程序的输出很简单current: 0curre原创 2017-02-07 00:23:27 · 443 阅读 · 0 评论 -
将异步API改成同步调用
有时候为了满足需求,我们需要在自己的类中进行线程管理/开启线程,并回调我们自己封装好的回调方法。例如:public void someTask() { new Thread() { @Override public void run() { int n = yourObject.someApi(); onGetR原创 2017-01-16 01:02:13 · 8130 阅读 · 0 评论 -
Java线程中的wait(),notify()与sleep()
在Java中可以通过wait()与notify()或notifyAll()实现线程协作。简要总结有如下几点: 1.wait()让线程进入等待状态,并释放锁(而sleep等待的同时并不释放锁) 2.notify()通知wait的线程尝试获取对象锁,在此线程任务执行完后,wait的线程就会重新获得锁,继续运行。 3.wait与notify均是Object的方法,调用这两个方法需要在synchron原创 2016-09-28 00:33:08 · 700 阅读 · 0 评论 -
Java中的ReentrantLock
Java中的ReentrantLock基本功能与synchronized代码块相当,但是提供了一些高级特性。首先来看一下ReentrantLock的基本使用:public class LockTest { ReentrantLock mLock = new ReentrantLock(); int num = 0; Runnable mRunnableOne = new Runna原创 2016-10-05 18:50:38 · 447 阅读 · 0 评论 -
冒泡排序
冒泡排序的思路很简单——从头至尾遍历数组元素,若前一项大于(或小于)后一项,则交换相邻两项。单次遍历整个数组可将某一个元素排列到正确位置,因此需要遍历元素数量n次。在代码中体现也就是内外两层循环,内层循环负责遍历中两两元素的交换操作,外层负责遍历次数控制。首先看版本1:/** * 冒泡排序效率最低写法,没有任何优化步骤 * @param arrayToSort */public static原创 2016-07-17 16:10:38 · 375 阅读 · 0 评论 -
快速排序
快速排序的思路是选定一个标志元素,将比这个元素小的所有元素放在一边,比其大的放在另外一边。然后发分别对两个子数组进行同样的操作,直到子数组元素数为1时,整体数组就排好序了。原创 2016-08-04 00:22:58 · 292 阅读 · 0 评论 -
归并排序
归并排序的步骤就是分组->合并,这两步均是递归进行,直到所操作的子组仅有一个元素为止。例如一个数组:6, 3, 1, 9, 2, 7, 4, 5首先分成两组:[6, 3, 1, 9] [2, 7, 4, 5]对于左边,再次分组:[6, 3] [1, 9]再对左边分组:[6] [3]因为各自仅包含一个元素了,这一个元素组成的字数组就是有序的了。接下来向上递归合并:[6] [3] -> [3, 6][原创 2016-08-06 14:31:00 · 433 阅读 · 0 评论 -
Android.mk学习笔记
LOCAL_PATH := $(call my-dir)这条语句出现在Android.mk最开始。由于我们将所有源码等文件都存在了当前目录或子目录,因此调用my-dir这个函数来告知编译器所编译的模块在mk所在当前目录下。LOCAL_MODULE这个参数是模块的名称,要求全局唯一并且不能带空格。 可以简单试验一下,找到任意一个模块的目录,例如device/generic/goldfish,这是虚拟原创 2016-08-02 19:05:19 · 2438 阅读 · 0 评论 -
Shell脚本$系列参数意义
参数 意义 $0 当前运行程序名称 $1 当前程序第一个参数 $n 当前程序第n个参数 $* 当前程序所有参数 $# 当前程序参数个数 $$ 当前程序PID例如:#!/bin/bashecho $0echo $1echo $2echo $3echo $*echo $#echo $$运行及输出: $ ./test.sh -arg1原创 2016-05-19 13:45:04 · 572 阅读 · 0 评论 -
vim常用配置
vim常用配置原创 2016-03-21 10:48:25 · 470 阅读 · 0 评论 -
Java中使用正则表达式
在Java中使用正则表达式非常方便,使用 Pattern与Matcher两个类就可以满足需求。Pattern 用来存储所使用的正则表达式Matcher 用来对目标字符串执行正则表达式的匹配例如,我们有一个字符串: “In winter the nights are long and cold.”现在我们想要匹配”long and cold”:String testString = "I原创 2015-11-26 16:17:05 · 585 阅读 · 0 评论 -
Java中获取日期及相应字段
Java中获取时间日期主要涉及到这几个类:Date —— 基本的时间对象SimpleDateFormat —— 根据Date对象返回所需要的时间格式Calendar —— 获取具体的日期字段 获取某一格式的时间 例如我们想得到 “2015-11-19”,或 “2015-11-19 12:30:00”原创 2015-11-19 17:21:03 · 754 阅读 · 0 评论 -
Java中的枚举与values()方法
Java枚举中的values()方法在编写Java程序时经常会用到枚举类型,今天我们就来看一下枚举中常用到的values()方法。首先,我们在Eclipse中编写一个简单的类:public class EnumTest { private enum Directions { NORTH, SOUTH, EAST, WEST }}在这里,我们定义原创 2015-09-24 11:10:47 · 39586 阅读 · 10 评论 -
关于Java回调函数
做Android开发,很长一段时间都不明白回调函数是什么意思,每天对着类似button.setOnClickListener这样的语句,感到很莫名其妙。后来看了看网上各种大牛的解释,也算是明白了。在这里,我想抛开概念性的东西,主要写一下自己的理解。原创 2015-01-01 22:19:51 · 548 阅读 · 0 评论