- 博客(46)
- 资源 (2)
- 收藏
- 关注
原创 随笔——java中的接口、继承和多态
一、多态Java中的多态体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。举个例子,一个Child类,继承与Father类,那么这个Child类的实现类,既可以赋值给一个Child类型的引用,也可以赋值给一个Fatcher类型的引用。所以,多态的表现就是父类的引用指向的是子类对象。多态的前提是必...
2020-02-11 12:09:23
253
原创 iOS 响应式编程
响应式编程,本质上是对数据流或某种变化所作出的反应,但是这个变化什么时候发生是未知的,所以他是一种基于异步、回调的方式在处理问题。如果单从上面一句话,可能理解有点问题。简单点理解,就是变化产生,回调告知。可以简单举个常见的例子。int b = 2;int c = 3;a = b + c;//这时,a的值是5;b = 5;//这时,a的值还是5,并没有因为b的值发生了变...
2019-12-25 14:21:15
245
原创 iOS 函数式编程、链式编程
最近看一本书,提到了关于函数式编程和响应式编程,就特地在网上找资料,整理整理,理解理解其差异,就顺带写了这个。一、函数式编程首先,要去了解了解block,可以看看这篇文章Objective-C中的block。1、解释Functional Programming函数式编程其实是一种编程思想、编程方式,这个编程思想的重点是在函数上的理解,特别是对函数状态的理解,更深的是函数在...
2019-12-25 11:29:11
209
原创 Objective-C中的block
在Objective-C的开发过程中,我们经常用到block,这里就简单总结一下block在Objective-C的几种使用方式。1、简单介绍一下block代码块Block是对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开...
2019-12-24 11:26:22
230
原创 Hash的Md5算法
做项目的时候,经常会遇到用户登录方面的功能。用户登录,就涉及到账号和密码的问题,在后台数据库中,密码不可能存为明码,也就意味着加密,常见的就是对密码做Hash,或者为了安全起见,也会对密码追加salt,再做Hash。MD5这是Hash中最常见的算法之一,也是最容易理解和实现的。md5的固定长度是128位,也就是16个字节。当我们用16进制数进行表示的时候,字符串长度就是32个...
2019-12-11 14:48:08
2327
原创 关于iOS 13中TableView截屏内容不完整问题
项目中有截屏功能,在iOS13之前,截屏的时候,可以将TableView中的内容都可以截取出来,包括在屏幕中不显示的地方。但是自从升级13后,截屏的内容不能完整显示了,只能看到当前屏幕可视区域内的内容了。发现问题就需要解决问题,所以查看了截屏的过程,以及中间tableview的变化。总算找到解决的方案了: //3、tableView内容 CGPoint saved...
2019-12-05 11:35:22
1047
原创 IOS网络请求的简单封装设计
做ios项目已经几年了,最初是借用别人的框架,然后再框架上去修改。后来自己项目开始自己学着去写框架结构,不管是用什么样的框架,里面网络层的设计都是比较固定的,所以针对网络层的部分,我单独把这个地方进行了重构,整理成了现在的模样。现在把我的思路整理一下,希望大家如果有什么好的意见或者建议,可以提出来。共同进步。1、整体思路整体的思路也是沿用MVC的结构。...
2019-01-22 22:01:00
963
原创 无监督学习
1、无监督学习的类型无监督学习常见的两种类型是:数据集变换和聚类。数据集变换,就是创建数据集新的表示算法,与数据的原始原始表示相比,新的表示可能更容易被人或其他机器学习算法所理解。常见的应用有降维,就是对于许多特征表示的高维数据,找到表示该数据的一种新方法,用较少的特征就可以概括其重要特性。另一个应用就是找到“构成”数据的各个组成部分,比如对文本文档...
2019-01-22 14:51:00
737
原创 监督学习(九)——核支持向量机SVM
1、线性模型与非线性特征线性空间在低维空间中非常受限,这是因为线和平面的灵活性很受限。import mglearnfrom sklearn.datasets import make_blobsimport matplotlib.pyplot as pltfrom sklearn.svm import LinearSVCX, y = make_...
2019-01-21 15:41:00
893
原创 监督学习(八)——决策树集成:梯度提升回归树
梯度提升回归树是另一种决策树集成方法,通过合并多个决策树来构建一个更为强大的模型。虽然名字中含有“回归”,但这个模型既可以用于回归也可以用于分类。与随机森林方法不同,梯度提升采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。默认情况下,梯度提升回归树中没有随机化,而是用到了强预剪枝。梯度提升树通常使用深度很小(1到 5 之间)的树,这样模型占用的内存...
2019-01-18 17:51:00
818
原创 监督学习(七)——决策树集成:随机森林
决策树经常会对训练数据进行过拟合,也就是训练数据精度高,而预测结果很低。随机森林就是许多决策树的集合,每一棵决策树跟其他决策树都不同,每棵树都会不同方式的过拟合,那么对这些树的结果取平均值,就可以降低过拟合。随机森林的随机方法有两种:1、通过选择用于构造树的数据点;2、通过选择每次划分测试的特征。一、构造随机森林构造一个随机森林模型,需要先确定用...
2019-01-18 15:02:00
1081
原创 适配器模式
什么是适配器?举个例子,我们有些人买手机,买的是港版,会发现港版的电源插头跟我们的不一样,基本都是三角,而且它的三角还跟国内的不一样,导致我们必须用一个转换头才行。为了让港版电源插头在国内也能使用,就用转换头,这个转换头就是适配器。适配器模式适配器模式,就是连接两种不同种类的对象,使其毫无问题地协同工作。适配器的主要作用是把被适配者的行为传递给管道另...
2019-01-15 22:54:00
105
原创 pandas —— Series
pandas采用了很多Numpy的代码风格,但是最大的不同在于pandas用来处理表格型或者异质类数据。而Numpy则相反,它更适合处理同质型的数值类数组数据。SeriesSeries是一种一维的数组型对象,它包含了一个值序列,并且包含了数据标签,也就是索引。import pandas as pdfrom pandas import Series,...
2019-01-13 22:32:00
168
原创 监督学习(三)——线性模型:OLS
1、用于回归的线性模型线性模型的预测公式一般为:y = w[0]*x[0]+w[1]*x[1]+ ··· +w[p]*x[p]+b上面的公式中,x[0]到x[p]标识的是单个数据的特征,w[0]到w[p]是对应特征的权重,y是预测结果,b是偏移量。如果是单一变量,公式就变为:y = w*x + b就变成一条直线方程,这时候w就是斜率,b是截距。...
2019-01-13 21:35:00
1352
原创 监督学习(二)——K近邻(K-NN)
k-NN 算法可以说是最简单的机器学习算法。构建模型只需要保存训练数据集即可。想要对新数据点做出预测,算法会在训练数据集中找到最近的数据点,也就是它的“最近邻”。1、k近邻分类k近邻算法最简单的方式就是只有一个最近邻,也就是距离预测数据点最近的训练数据点。如果选择任意的k个近邻时,就会使用“投票法”来指定分类标签。简单点理解,就是在测试数据点周围找寻k...
2019-01-13 18:32:00
656
原创 监督学习(一)——几个概念
今天主要介绍几个概念信息,用比较浅显易懂的方式来阐述。1、监督学习用户将成对的输入和预期输出数据提供给算法,算法从中找到一种方法(具体方法不用深究),然后根据给定输入给出预期输出。这就是监督学习的过程。而这个过程中,从输入—输出对中进行学习的机器学习算法叫作监督学习算法。什么时候使用监督学习,可以有一个简单的说明:每当想要根据给定输入预测某个结果,...
2019-01-10 23:51:00
1149
原创 numpy实现随机漫步
随机漫步Random Walk随机漫步是一种数学统计模型,它由一连串轨迹所组成,其中每一次都是随机的,它能用来表示不规则的变动形式,如同一个人乱步所形成的随机记录。在这里用一种简单的模式来实现,从0开始,步进为1或者-1,两种步进的发生的概率相等。1、用random模块实现import randomimport matplotlib.pyplot...
2019-01-06 18:02:00
783
原创 图片相似判断
上一篇是做的视频镜头分割,虽然分割成功了,但是视频中有一些镜头中,包含一些含有logo的视频帧,这部分视频是我不想要的,所以就需要识别含有logo图像的,然后把这些帧标记出来。看了很多其他的实现思路,提到了哈希算法,包括有均值哈希算法、差值哈希算法、感知哈希算法。开始的时候,这三种算法都试过,发现都有问题,准确率很低,这时仔细看了每一帧的logo图,才发...
2018-12-19 22:50:00
1724
原创 视频镜头分割
最近学习视频和图像的处理,刚好要先将视频进行预处理。因为需要针对不同的镜头来做不一样的处理,所以在做进一步处理之前,要将整段视频进行分割处理。先是在网上搜索了一下,找到一篇可以借鉴的文章 《视频镜头分割与关键帧提取》。里面把整个算法思路都说的很清楚,虽然没有具体的代码实现,这个不重要,思路比代码更重要,按照对应的思路,通过python写出了具体的实现代码...
2018-12-15 23:53:00
4524
1
原创 单例模式
单例模式,其实从字面意思很好理解,就是有且只有一个,也就是在程序中有且只有一个实例,任何时候对其的访问,返回的都是同一个实例。这就是面向对象中的常见的单例模式。 单例模式的意图就是使得类的一个对象实例成为系统中的唯一实例。这时候就需要一种只允许生成对象唯一实例的机制,“阻止”所有其他想要生成对象的可能。所以,用静态的类方法来限制实例化的过程,从而达...
2018-09-23 17:48:00
176
原创 在PNG图片中写入隐藏信息
由于最近做项目,遇到一个功能需要做,是往PNG图片里面写入隐藏的数据,然后将图片通过微信的方式分享出去,这时候保存下来的图片,可以从里面读取出写入的隐藏数据。 首先,我们需要了解什么是PNG格式,以及PNG格式的图片数据是如何存储的,我们能将我们的数据写入到什么地方。具体的PNG格式文件的详细信息介绍可以参考以下地址: png的故事:获取图...
2018-09-16 21:23:00
4247
原创 UI设计图的标注工具大比拼
一些标注工具的对比,因为坐的远,有的标注和切图设计也没给清楚,就不用再费劲的问了,自己解决了,今天写一写一些标注工具的对比。
2016-12-15 14:42:55
24813
原创 在Ubuntu上搭建SVN服务器
最近在学习Linux,就用旧电脑装了Ubuntu的系统,同时想把这台电脑做成一台私有服务器,同步代码,所以就尝试了给Ubuntu搭建了SVN。网上有很多教程,都差不多,所以也就大概总结一下。 1、安装apache和SVN sudo apt-get install apache2 sudo apt-get install subversion 2
2015-03-29 23:16:11
538
原创 Linux常用命令
最近在弄Android源码,在旧机器上装了Ubuntu系统,所以顺带学习学习Linux的常用命令。内容会边用边补充。1、man man的含义是manual,手册的意思。当不清楚某个命令是怎么使用的时候,可以通过man command来进行查询,command为对应的命令名称,例如man ls。2、find find命令用于找寻某个文件或者文件夹。
2015-03-23 23:19:40
589
原创 Looper、Handler的关系(三)
Looper、Handler的关系(二)在前一节中讨论了Looper类中的两个主要方法,也分析了Looper、Message和Handler的关系。那么下面将分析Handler这个类。一、先看看Handler类中的几个变量和几个构造函数 final MessageQueue mQueue; final Looper mLooper; final Cal
2015-03-21 20:28:13
481
原创 Looper、Handler的关系(二)
上篇文章只是简单的说明了一下Android中的消息处理机制原理是什么,接下来将详细探讨其中的几个关键类。首先是Looper类。Looper、Handler的关系(一) 首先看看Looper是如何使用的。典型的使用looper的例子是这样的:class LooperThread extends Thread { public Handler mHandler
2015-03-21 14:26:21
693
原创 Looper、Handler的关系(一)
写了很久Android应用了,决定把一些自己看到的东西整理一下。在Android应用中,我们常常通过Handler来处理线程到主进程的消息传递。而这个消息处理的原理简单想想也能够得出来:1、有一个消息队列,可以往这个消息队列中增加消息;2、有一个循环体,在不停的从这个消息队列中获取消息,并将消息交给需要处理的地方。从图中可以看出:1、将要处理的消息加入到消息队列中,在队列中
2015-03-21 11:18:13
753
原创 Java 线程状态
一个线程总共有以下四个状态:1、新建(New) : 当线程被创建的时候,它会短暂的处于这个状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻线程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或者阻塞状态。2、就绪(Runnable): 在这种状态下,只要调度器把时间片段分配给线程,线程就可以运行。也就是说,在任意时刻,线程
2014-12-16 23:34:37
477
转载 Android Application类详解
1:Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Applicati
2014-11-16 22:12:00
791
转载 ViewHolder的简洁写法
通常ViewHolder的写法如下: ViewHolder holder = null; if(convertView == null){ convertView = mInflater.inflate(R.layout.xxx null); holder = new ViewHolder();
2014-08-26 23:22:29
883
转载 性能优化:使用SparseArray代替HashMap<Integer,Object>
HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果。最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performance 警告。 意思就是说用SparseArray来替代,以获取更好性能。老实说,对SparseArray并不熟悉,第一感觉应该是Android提供的一个类。按住Ctrl点击进入SparseA
2014-08-26 22:52:09
550
原创 Activity绑定Service:Binder和Messenger
在android中绑定Service有三种方式: 1、继承Binder; 2、使用Messenger; 3、AIDL 在另外一篇专门说明AIDL中已经详细的说明了AIDL的使用方法,这里就只说明前两种:Binder和Messenger。一、继承BInder 这种方式局限于本地应用使用,不需要跨进程的通信。
2014-03-18 14:57:39
636
原创 关于Android中onMeasure方法
首先,我们来了解Android是如何绘制页面的view的。一、Android中View的绘制过程 Android的页面结构是一个树状结构,所以在绘制的过程是按根节点开始逐级绘制的,在绘制每个节点,也就是每个View的时候,需要完成两个计算:测量Measure和布局Layout。对应的方法就是measure(int widthMeasureSpec, int heightM
2014-03-17 17:55:01
675
原创 闹钟管理器AlarmManager(整理)
在Android中,可以使用闹钟管理器来触发事件,包括广播BroadcastReceiver,服务Service和活动Activity。这些事件可以在特定的时刻或者以固定的时间间隔来触发。 使用闹钟管理器一般有以下几个步骤: 1、获取到闹钟管理器的服务,即AlarmManager; 2、确定设置闹钟的时刻; 3、创建要调用的接收
2014-03-12 16:27:27
1287
原创 关于Service中的耗时操作
由于Service和Broadcast一样,都运行在主线程中,所以在这两个里面我们无法做一些长时间的耗时操作,也就是说,如果我们有一个后台服务,是每隔一段时间请求一次服务器,类似于心跳服务,只是没有心跳服务那么频繁,例如每2个小时执行一次连接服务器操作,这样的话,我们的应用可能已经退出了,而我们仍需要这个服务时开启的,这种情况,我们第一反应是让Service运行在一个独立的进程中,这一点是可以做到
2014-03-09 21:48:55
7206
原创 AsyncTask的一些问题
最近看书《Pro Android 4》的时候,看到书里面对AsyncTask的一个介绍,里面提到了AsyncTask的性质,在不同的系统版本中,其其实不是一个并发的线程任务。为了验证上面的过程,特地在手机上测试了,对应的测试手机系统版本是4.2,。 书中这样介绍,当两个AsyncTask执行的时候,是先执行第一个任务,然后再第一个任务结束后,再开启新的线程来执行第二个。代码和运行
2014-02-27 15:09:52
802
原创 android AIDL
android的AIDL就是Android Interface definition language的缩写,用于在android内部进程间通信。1、首先创建一个以.aidl为文件结尾的文件。里面的forActivity.aidl和forAervice.aidl就是两个aidl文件,两个文件代表的意思为:forAcitivty:由Service进程回调到Activity所在的主进程
2013-12-02 15:18:50
645
原创 Android通讯录数据获取
读取通讯录有两种方式,一种方式是参照上篇文章关于android通讯录的数据库表来获取,另一种就是利用系统自带的一种读取通讯录的方式。先使用后一种简单的方式:这是获取手机通讯录中的信息。可以根据Phone中对应的字段名区分是哪几张表的数据。实际系统在获取这些通讯录的时候,是通过将几张表关联查询得到的。 /** * 获取所有手机里的通讯录 */ priva
2012-11-10 19:25:05
2049
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人