自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Markus

心之所向,素履以往 生如逆旅,一苇以航

  • 博客(98)
  • 收藏
  • 关注

原创 排序算法之六 快速排序(Quick Sort)

概述快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。算法描...

2019-01-12 16:12:29 387

原创 排序算法之四 希尔排序(Shell Sort)

概述希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序中包含了分而治之的思想,首先将一个输入序列根据增量分成若干个子序列,然后对每个子序列分别进...

2019-01-12 16:04:52 442

原创 排序算法之三 插入排序(Insertion Sort)

概述插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌,对于未排序数据(右手抓到的牌),在已排序序列(左手已经排好的牌)中从后向前扫描,找到相应位置并插入,同时需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述1.从第一个元素开始,即用该元素初始化已排序序列。2.取出下一个元素,在已经排序的元素序列中从后向前扫描。3.如果该元素(已排序)大于新元素,则...

2019-01-12 15:59:02 383 1

原创 排序算法之五 归并排序(Merge Sort)

概述归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn),1945年由冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。通过将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。归并排序效率虽然较高,但所需的空间复杂度为O(n),典型的空间换时间。算法描述把长度为...

2019-01-10 01:42:41 479

原创 排序算法之二 选择排序(Selection Sort)

概述选择排序是一种简单直观的排序算法。是表现最稳定的排序算法之一,无论什么数据进去都是O(n^2)的时间复杂度,所以用到它的时候,数据规模越小越好。选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。算法描述初始时在序列中找到最小...

2019-01-09 22:01:24 396

原创 排序算法之一 冒泡排序(Bubble Sort)

概述冒泡排序是一种极其简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。尽管冒泡排序是最容易了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。算法描述1.比较相邻的元素,如果前一个比后一个大,就把它们两个对调...

2019-01-09 21:46:18 2504

原创 数据结构 堆树(最大堆、最小堆)

一、堆树的定义(1)堆树是一颗完全二叉树;(2)堆树中某个节点的值总是不大于或不小于其孩子节点的值;(3)堆树中每个节点的子树都是堆树。当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆,也称大根堆。当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆,也称小根堆。如下图所示,上边为最大堆,下边为最小堆。二、堆树的操作下面以最大堆为例进行讲解,最小堆同理。2.1...

2019-01-09 15:36:10 5263

原创 数据结构 二叉树

概述二叉树是树的特殊一种,具有如下特点:每个结点最多有两颗子树,结点的度最大为2。左子树和右子树是有顺序的,次序不能颠倒。即使某结点只有一个子树,也要区分左右子树。二叉树的一些术语如下:节点的度:一个节点含有的子树的个数称为该节点的度;叶节点或终端节点:度为零的节点;非终端节点或分支节点:度不为零的节点;父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点...

2019-01-08 15:12:32 275

原创 lua之base64的解码和编码(三种方案实现)

概述由于涉及到java 与 lua 之间传递字节数组,如果直接传递的话会导致json解析失败,所以需要将字节数组加密为字符串,这样可以保证数据的完整传输。在网上找到了多个版本的lua base64的编解码代码,经过逐个测试最终方案3解决了我的问题。方案1:调用decodeBase64解码测试的时候经常返回nil值参考:http://www.cnblogs.com/decode1234/p...

2018-12-22 14:38:18 16160

原创 Ubuntu 串口调试工具cutecom

cutecom是个拥有可视化界面的串口调试助手。1.安装cutecomsudo apt-get install cutecom2.运行cutecomsudo cutecom3. 插入串口后,使用以下命令查看串口驱动信息:dmesg | grep usb在cutecom的Device下拉菜单是没有ttyUSB0的,需要手动输入即可。最后点击Open device即可查看串口数据...

2018-12-07 13:54:14 2088

原创 ubuntu16.04安装android-studio

windows下安装Android studio在前面的博客中有记录,这次记录在ubuntu下安装Android studio,虽然操作系统不同,但不同系统的Android studio实际使用上几乎是一样的。JDK java8 安装使用如下三条命令,安装JDKsudo add-apt-repository ppa:webupd8team/java sudo apt-get update ...

2018-12-07 13:27:45 7250

原创 ubuntu16.04下安装为知笔记

概述一直在用微软的OneNote,这大概是地表最强的笔记软件了。但在Ubuntu上无法使用OneNote,虽然可以在浏览器内使用OneNote的云笔记,但由于众所周知的原因,在国内很不稳定。所以需要找一个跨平台,简单易用的笔记软件来替补OneNote。最终选择为知笔记,这是目前在linux平台上,使用非常广的一款笔记软件。安装方案一:使用软件包安装sudo add-apt-reposito...

2018-12-07 12:32:53 2657 1

原创 Ubuntu挂载Win10下的NTFS硬盘出错的解决方案

概述在Ubuntu下打开Win10的NTFS硬盘总是提示出错了,而且是全部的NTFS盘都出错,其中sdb1错误显示如下:he disk contains an unclean file system (0, 0).Metadata kept in Windows cache, refused to mount.Failed to mount '/dev/sdb1': 不允许的操作The ...

2018-11-20 14:16:11 4227 3

原创 Ubuntu16.04安装网易云音乐

Ubuntu16.04安装网易云音乐下载安装安装完成下载https://music.163.com/#/download点击ubuntu16.04 下载如下安装包:netease-cloud-music_1.1.0_amd64_ubuntu.deb安装sudo dpkg -i netease-cloud-music_1.1.0_amd64_ubuntu.deb可能会出现如下报错...

2018-11-16 13:06:23 940

原创 Android Studio 错误: 编码GBK的不可映射字符

解决方法:在项目下的build.gradle中添加以下代码即可解决tasks.withType(JavaCompile) { options.encoding = "UTF-8"}

2018-10-19 16:19:22 5466

原创 Android Studio 编译提示 aapt.exe finished with non-zero exit value 1的解决方法

今天编译的一个旧项目,该项目是用的Gradle build tools 版本是2.2.0,我当前用的版本是3.2.0,。打开工程正常编译后可以安装APK运行,改动了一些代码后,重新编译提示出现以下错误:aapt.exe finished with non-zero exit value 1首先重新看了下改动的代码,编译器并没有提示错误或者警告,然后怀疑是缓存导致的,那就清除后重新编译下试试看...

2018-10-19 09:51:37 1002

原创 Android(国际化)多语言的实现和切换

Android(国际化)多语言的实现和切换

2018-10-18 14:51:29 9187

原创 Could not get unknown property 'packageForR' for task...问题解决

发现问题:在更新了Android studio 3.2之后,编译一个旧的项目时出现以下报错:Could not get unknown property 'packageForR' for task ':app:processProduct1DebugResources' of type com.android.build.gradle.internal.res.LinkApplication...

2018-09-29 20:48:21 5581

原创 Android Java 代码检索工具Codota

Codota是一个捜索代码的利器。使用AI技术通过在IntelliJ或Android Studio中直接从数百万个程序中更快、更智能进行代码检索,更重要的是,codota不仅仅可以搜索Github, 还可以捜索一些开发者的Blog 和开发网站,功能非常强大。输入相关代码后即可进行查找,而且它还提供了 Android Studio的插件,可以非常方便地进行检索,简直就是一个代码版的GoogleC...

2018-09-29 16:30:55 2911

原创 Android studio 3.2 升级详解及Gradle配置

一直在使用Android studio 2.3.1版本,因为工作开发使用的都是这个版本,所以在经历了N次提示更新后,依旧还是没有升级,直到今天终于忍不住了,因为Android Studio 3.2版本在这个月发布了,增加了很多新特性,具体参见官方介绍吧:https://android-developers.googleblog.com/2018/09/android-studio-32.html...

2018-09-29 15:36:06 27101 3

原创 RecyclerView添加ContextMenu的两种方案详解

RecyclerView+ContextMenu实现的技术难点主要是在RecyclerView中获取被点击item的position,本文一共给出了两种解决方案。

2018-09-18 13:28:58 4143 2

原创 linux 查看文件树结构

tree安装:在linux下使用tree命令可以方便的查看指定目录下的文件树结构,但有些系统并未安装该命令,需要手动安装一下,下面以在Ubuntu的安装为例,其他linux系统类似。在ubuntu下安装: 在接网络的情况下,在命令行中输入以下命令安装tree:sudo apt-get install tree使用方法及参数: tree -d -L 1 注: ...

2018-09-14 08:56:33 7778

原创 windows命令行 查看文件树结构

tree命令在windows的命令行中使用tree命令即可打印该指定目录的文件树状结构图。PS E:\work> tree /?以图形显示驱动器或路径的文件夹结构。TREE [drive:][path] [/F] [/A] /F 显示每个文件夹中文件的名称。 /A 使用 ASCII 字符,而不使用扩展字符。将打印的目录树保存到指定文件中:t...

2018-09-14 08:46:24 12327 5

原创 SQL语句中加中括号[ ]的作用

在操作数据库的时候经常能看到用中括号括住表名或者字段名 例如:CREATE TABLE User ( UserID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, UserName VARCHAR (10) NOT NULL, CreateDate DATETIME NOT NULL, ...

2018-09-11 10:42:14 15320

原创 SQLite关键字

参考:https://www.sqlite.org/lang_keywords.html SQL标准指定了大量关键字,这些关键字不能用作表,索引,列,数据库,用户定义函数,排序规则,虚拟表模块或任何其他命名对象的名称。关键字列表很长,很少有人能记住它们。对于大多数SQL代码,最安全的选择是永远不要使用任何英语单词作为用户定义对象的名称。 如果要使用关键字作为名称,则需要引用它。在SQLite中...

2018-09-11 10:32:59 4275

原创 Android drawable 颜色渐变

Android开发中,渐变色的使用少不了,小到图片背景,大到主题风格,一般为了统一UI直接给切好的背景图,虽然简单粗暴,但不可避免会增加APK的体积,倘若APP的主题风格要变动,那就要替换掉所有相关的图片资源,其实我们也可以用代码来实现颜色渐变:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="...

2018-09-08 18:16:32 6201

原创 Android 动画学习框架

Android 动画框架: 有了框架,不用抹黑前行,可以根据框架进行快速的针对性学习,而且脑海里也容易形成概念,我在学习Android动画的过程总结记录了7篇文章,虽然都是基础学习,但都有示例代码供参考,而且每个示例代码都是可以正常运行的。Android动画(一)ViewAnimation Android动画(二)帧动画AnimationDrawable Android动画(三)...

2018-08-26 18:08:34 299

原创 Markdown 常用转义字符

由于Markdown中支持HTML标签语言,所以在实际使用中会出现诸如”<”, “>”无法正常显示的问题,这是因为使用上述的特殊字符会被认为是HTML语句而不予显示。所以需要转义,用对应的实体编号或者实体名称来代替。 可替换显示的 ASCII 代码 参考: http://www.w3chtml.com/html/ref/ascii.html示例1: 在Markdown表...

2018-08-26 17:41:25 13236

原创 Android 动画(七)AnimatorSet组合动画

概述:ValueAnimator和ObjectAnimator都是针对单个动画的,虽然可以用PropertyValuesHolder实现一个View的多种动画,但是没办法实现多个View同时动画。如果要对多个View做动画,并且单个View上存在多种动画效果,这时候就要用到AnimatorSet类了。AnimatorSet类用来实现复杂的组合动画,但功能上相比于AnimationSet强大多了...

2018-08-26 16:56:23 19024 3

原创 解决Notification不显示的问题 (Android 8.0适配)

把Android Studio工程中的targetSdkVersion 设置为26后,会出现Notification不显示的问题,这是由于Notification 在8.0的系统上采用了通知渠道的策略来管理通知,参考谷歌官方提供的通知渠道示例,进行适配即可解决。具体请参见我另外一篇博客Android Notification(Android 8.0)...

2018-08-26 14:50:22 2390

原创 Android Notification(Android 8.0)

概述:Android O(也就是SDK26版本) 引入了 通知渠道(Notification Channels)以提供统一的系统来帮助用户管理通知,如果是针对 android O 为目标平台时,必须实现一个或者多个通知渠道,以向用户显示通知。若并不以 Android O 为目标平台,当应用运行在 android O 设备上时,其行为将与运行在 Android 7.0 上时相同。 Androi...

2018-08-26 12:15:49 3204

原创 Android 动画(六)PropertyValuesHolder学习

PropertyValuesHolderObjectAnimator只能对单个属性进行操作,如果想实现比较复杂的效果就需要用到PropertyValuesHolder了。1.1、概述PropertyValuesHolder这个类的意义就是,它其中保存了动画过程中所需要操作的属性和对应的值。我们通过ofFloat(Object target, String propertyName,...

2018-08-13 16:42:06 3267

转载 跨平台开发之react-native、weex、kotlin-native、flutter比较

跨平台一直是老生常谈的话题,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平台框架的百花齐放,颇有一股推倒原生开发者的势头。本文将对当下跨平台移动开发的现状、实现原理、框架的选择等进行深度解析。 为什么我们需要跨平台开发? 本质上,跨平台开发是为了增加代码复用,减少开发者对多个平台差异适配的工作量,降低开发成本,提高业务专注的同时,...

2018-08-10 11:56:42 10132 1

原创 Android 动画(五)ObjectAnimator学习

上一篇我总结了ValueAnimator的用法,但ValueAnimator有个缺点,就是只能对数值对动画计算。我们要想对哪个控件操作,需要监听动画过程,在监听中对控件操作。这样使用起来相比补间动画而言就相对比较麻烦。 为了能让动画直接与对应控件相关联,以使我们从监听动画过程中解放出来,谷歌的开发人员在 ValueAnimator 的基础上,又派生了一个类 ObjectAnimator; Andr...

2018-08-08 20:17:12 415

原创 判断Intent是否安全的方法

提前验证是否有APP可以接受一个Intent,这样可以在发送Intent前,避免发送的Intent没有能够接收的APP,导致FC。方法一:Intent intent = getInstallAppIntent(activity, appFile);if (activity.getPackageManager().queryIntentActivities(intent, 0).siz...

2018-08-07 21:19:59 990

原创 ADB配置之WIFI无线调试Android设备

在开发调试Android程序时一般通过adb工具在手机与电脑之间建立连接,之前在调试Android usb通信的时候发现会和调试冲突,遂研究了如何通过wifi进行无线调试,adb本身只是一个工具,而两端间建立通信的方式有多种,USB只是其中一种,强大的adb工具还提供了另外一种方式通过tcpip建立连接。无需手机root,也不用下载终端模拟器。ADB概述:Android Debug B...

2018-08-07 21:10:26 3137

原创 Android UI控件之Spinner

概述Spinner就是一个弹出的下拉选择菜单或者也可以被称为列表选择框继承关系如下: 如果在使用Spinner时已经可以确定列表选择框里的列表项,则完全不需要编写代码,只要为Spinner指定android:entries属性即可让Spinner正常工作;如果程序需要在程序运行时动态决定Spinner的列表项,或者程序需要对Spinner的列表项进行定制,则可使用Adapter提供列...

2018-08-04 11:44:48 589

原创 上传Android应用到Google play

首先你得有google play developer账号 如果没有的话需要翻墙注册一个google play developer账号,需要交纳25美金的(终身开发使用),创建成功之后你就可以创建应用了。 注册地址:google play for developer上传应用需要准备的资源:APP应用手机/平板截图大于两张 每种类型最多8张 512*512图标,1024*500置顶大图 ...

2018-07-28 10:56:26 4401

原创 Ubuntu 设置开机启动命令/脚本

ubuntu 设置rc.local开机启动命令/脚本的方法 一般有两种方法: 一、rc.local脚本rc.local脚本是一个Ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令。该脚本位于/etc/路径下,需要root权限才能修改。 注意:rc.local脚本里面启动的用户默认为root权限。 命令或脚本需要添加在exit 0之前 例如在rc.local中添加...

2018-07-28 10:14:31 14440 1

原创 Android 动画(四)Property Animation(属性动画)

属性动画与视图动画的不同之处引入时间不同:View Animation 是 API Level 1 就引入的。Property Animation 是 API Level 11 引入的,即 Android 3.0 才开始有 Property Animation 相关的 API。 所在包名不同:View Animation 在包 android.view.animation 中。而 Prop...

2018-07-24 21:10:16 429

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除