自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 LeetCode Q30 串联所有单词的子串

Q30 串联所有单词的子串题目描述给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符,不必考虑words中单词的顺序,words中可能包含相同的单词。解题思路如果子串是恰好由words中所有单词串联而成,则说明子串和words数组的构成成分一样(即words数组中包含n个单词hello,则子串中也包含n个hello)。通过words中的单词及其出现次数作

2021-10-10 19:46:02 188

原创 LeetCode Q29 两数相除

Q29 两数相除题目描述:不使用乘法、除法以及mod运算符,实现两整数相除,结果截去小数部分。输入保证除数(divisor)不为0,如果结果溢出,则返回Integer.MAX_VALUE思路:作差法求解。将被除数(dividend)与除数(divisor)不断作差,直至被除数小于除数。除法结果用long型数据保存,以避免溢出。每次作差之后被除数翻倍,以提高作差效率,以避免超时。Java代码实现:package com.peng.leetcode;/** * 不使用乘法、除法和mod运

2021-10-10 14:55:36 183

原创 Sourcetree SSH密钥配置

使用 Sourcetree 克隆 Github 上仓库时提示SSH密钥未配置,查了好久才定位到原因(Github SSH密钥未配置),在此处记录下配置过程,以免之后踩坑。创建Git SSH密钥1、启动Git Brash, 执行cd ~/.ssh命令进入.ssh目录,然后执行ls命令检查是否存在SSH密钥2、如果没有.ssh目录或者该目录下没有密钥文件,则执行ssh-keygen -t rsa -C"your email"命令创建SSH密钥Github配置SSH密钥1、登录Github,进入Se

2021-09-06 18:30:54 3664

原创 adb学习笔记

adb简介adb (Android Debug Bridge)——Android调试桥,一种可以使开发者和设备进行通信的命令行工具。adb命令可以用于执行各种设备操作,并提供对Unix shell的访问权限(开发者可以通过Unix shell在设备上运行各种命令)。adb是一种C/S架构的程序,包括以下三个组件:客户端:运行于开发机上,用于发送命令。开发者可以通过发出adb命令来调用客户端。守护程序(adbd):在每台设备上作为后台进程运行,用于在设备上运行命令。服务器:在开发机器上作为后台进程

2021-06-27 23:07:49 345 2

原创 浅析RSA加密算法

1、RSA简介RSA加密算法是目前最广为使用的一种非对称加密算法(又称公开密钥加密算法)。相对于对称加密算法,非对称加密算法是一种加密密钥和解密密钥不同的加密算法,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”的密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK.2、RSA加密算法的原理RSA加密算法的原理是:根据数论,寻求两

2021-06-01 00:34:54 1007

原创 浅析AES加密算法

1、AES简介高级加密标准(Advanced Encryption Standard, 简称AES)是最为常见的一种对称加密算法,其加密过程涉及到4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。其解密过程为别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。上面提到的对称加密算法是一种加密、解密使用相同密钥的加密算法,其特点是算法公开、计算量小、加密速度快、加密效率高。对称加密算法具体

2021-06-01 00:34:25 3519

原创 PHP学习笔记17 —— 面向对象

17.1 面向对象的内容类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。对象 − 是类的实例。成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。成员函数 − 定义在类的内部,可用于访问对象的数据。继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,

2021-05-29 16:41:28 129 1

原创 PHP学习笔记16 —— 命名空间(namespace)

命名空间用于解决以下两类问题:用户代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。为很长的标识符名称创建一个别名,提高源码的可读性。16.1 定义命名空间默认情况下,所有常量、类和函数都放在全局空间下,就和PHP支持命名空间之前一样。命名空间通过关键字namespace来声明。如果一个文件中包含命名空间,它必须在其他所有代码之前声明命名空间。可以在同一个文件中定义不同的命名空间,建议用大括号包裹命名空间。将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能

2021-05-29 16:40:50 168

原创 PHP学习笔记15 —— 魔术常量

PHP提供了大量的预定义常量,不过很多常量都是由不同的扩展库提供的,只有在加载了这些扩展库时才会出现。有8个魔术常量,他们的值随着它们在代码中的位置的改变而改变。15.1 _ LINE_文件中当前行号。<?phpecho '这是第 " ' . __LINE__ . ' " 行';?>15.2 _ FILE_文件完成的路径和文件名。若果用在被包含文件中,则返回被包含文件名。<?phpecho '该文件位于 " ' . __FILE__ . ' " ';?&gt

2021-05-29 16:40:03 126

原创 PHP学习笔记14 —— 函数

PHP的真正威力源于它的函数——PHP提供了超过1000个内建函数。关于内建函数,参考:PHP内建函数自定义函数<?phpfunction add($x,$y) //function关键字、函数名、形参{ $total=$x+$y; return $total; //如果函数有返回值则使用return语句,没有则省略} echo "1 + 16 = " . add(1,16);?>...

2021-05-29 16:39:21 81

原创 PHP学习笔记13 ——循环语句

PHP提供了以下循环语句:whiledo…whileforforeach13.1 while循环<?php$i = 1;while($i < 10) { echo "the number is ".$i." ."; echo "<br>"; $i++;}?>13.2 do…while语句<?php$i=1;do{ $i++; echo "The number is " . $i . "&l

2021-05-29 15:10:22 187

原创 PHP学习笔记12 —— 超级全局变量

PHP中预定义了几个超级全局变量(superglobals),它们在一个脚本的全部作用域中都可用,且你不需要特别说明,就可以在函数及类中使用。PHP超级全局变量列表:$GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION12.1 $GLOBALS$GLOBALS是一个包含了全部变量的全局组合数组,变量的名字就是数组的键。<?php$x = 75;$y = 25;function addt

2021-05-29 15:05:24 327 2

原创 PHP学习笔记11 —— 数组

数组是一种能在单个变量中存储多个值的特殊变量。11.1 数组的创建PHP使用函数array()来创建数组。在PHP中有以下三种数组:数值数组:带有数字ID键的数组。关联数组:带有指定键的数组,每个键关联一个值。多维数组:包含一个或多个数组。11.2 数值数组创建数值数组有两种方式:自动分配ID键、人工分配ID键。<?php// 自动分配ID键 $cars = array("Volvo", "BMW", "Toyota");//人工分配ID键$books[0] = "

2021-05-29 15:04:58 89

原创 PHP学习笔记10 —— 条件语句

在PHP中,提供了下列条件语句:if 语句if…else 语句if…else if…else 语句switch 语句10.1 if 语句语法格式如下:if(条件) { 条件成立时要执行的代码}10.2 if…else 语句语法格式如下:if(条件) { 条件成立时执行的代码} else { 条件不成立时执行的代码}10.3 if…else if…else 语句若干条件之一成立时执行一个代码块。语法格式如下:if(条件1) { 条件1成立时执行的代

2021-05-29 15:04:27 90

原创 PHP学习笔记9 —— 运算符

9.1 算术运算符运算符名称描述x + y加求和x - y减做差x * y乘乘积x / y除求商x % y取模求余数- x取反取反a . b并置连接两个字符串9.2 赋值运算符运算符等同于描述x = yx = y将右侧表达式的值赋给左侧操作数x += yx = x + y加x -= yx = x - y减x *= yx = x * y乘x

2021-05-29 15:03:53 97

原创 PHP学习笔记8 —— 字符串变量

为字符串变量赋值时,需要把文本加上单引号或双引号。8.1 并置运算符PHP中,只有一个字符串的运算符——并置运算符.并置运算符用于把两个字符串连接起来。<?php$txt1 = "Hello, ";$txt2 = "Peng.";$txt3 = $txt1." ".$text2; // 并置运算符可以连续使用多次// 输出: Hello,Peng.?>8.2 strlen()函数strlen()函数可以返回字符串的长度。<?php$len = strle

2021-05-08 22:42:53 113

原创 PHP学习笔记7 —— 常量

常量是一个简单的标识符,它的值被定义后,在脚本中的任何地方都不能改变。常量名由英文字母或、下划线、数字组成(数字不能做首字母),且常量名不需要加$修饰符。注意:常量在整个脚本中都可以使用。7.1 设置PHP常量PHP中使用define()函数来设置常量,其函数语法如下:bool define(string $name, mixed $value [, bool $case_insensitive = false])name :必选参数,常量名称,即标识符。value :必选参数,常量的值

2021-05-08 22:41:56 149

原创 PHP学习笔记6 —— 类型比较

尽管PHP是弱类型语言,但我们仍经常需要对PHP变量进行比较。松散比较:使用==进行比较,只比较值,不比较类型。严格比较:使用===进行比较,既比较值,又比较类型。<?phpif(42 == "42") { echo '1、值相等';} echo PHP_EOL; // 换行符 if(42 === "42") { echo '2、类型相等';} else { echo '3、类型不相等';}/** 输出:* 1、值相等* 3、类型相等*/?

2021-05-08 15:03:35 83

原创 PHP学记笔记5 —— PHP中的数据类型

PHP有以下数据类型:字符串,String整型,Integer浮点型,Float布尔型,Boolean数组,Array对象,Object空值,NULL5.1 String在PHP的字符串类型中,我们可以将文本放在单引号或双引号中。<?php$str1 = "Hello World!";$str2 = 'Hello World!';?>5.2 Integer整数规则:至少含有一个数字。不含空格、逗号、小数点。含正整数和负整数。可以用一下三种格式指定

2021-05-08 15:02:39 79

原创 01背包问题的两种解法

引言“01背包问题”是一个比较基础的算法问题,它可以衍生为其他相对复杂的算法问题,比如“装箱问题”。通过对“01背包问题”的学习与破解,我们可以掌握一些比较常见的算法,配养一定的算法思维以及解题能力。“01背包问题”是学习计算机相关专业的学生必须掌握的经典算法问题之一。1、“01背包问题”的问题雏形01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn。01背包是背包问题中最简单的问题。01背包的约束条件是给定几种物品,每种物品有且

2021-05-07 20:50:55 3947

原创 PHP学习笔记4 —— EOF (heredoc) 使用说明

PHP EOF 是一种在命令行shell 和 程序语言里定义一个字符串的方法。使用概述如下:必须后接分号,否则编译不通过。EOF可以使用任意其他字符代替,只需保证结束标识和开始标识一致。结束标识必须顶格肚子占一行,前后不能衔接任何空白和字符。开始标识可以不带引号或带单/双引号,不带引号和带双引号效果一致;解释内嵌的变量和转义符号;带单引号则不解释内嵌的变量和转义符号。当内容需要内嵌引号(单/双引号)时,不需要加转义符,本身对单双引号转义。<?php$name = "pp";$s

2021-05-07 20:30:03 508

原创 PHP学习笔记3——echo 和 print

PHP中有两个基本的输出方式:echo 和 print,它们之间的区别如下:echo 可以输出一个或多个字符串print 只允许输出一个字符串,返回值总为1echo 的输出速度比 print 快,echo 没有返回值,print 有返回值13.1 echo 语句echo是一个语言结构,使用的时候可以不加括号,也可以加上括号。<?php echo "<h2>PHP很有趣<h2>"; //echo输出的字符串中可包含html标签echo "Hello

2021-05-07 20:29:15 87

原创 PHP学习笔记2——变量

2.1 PHP变量简介PHP变量可以被赋予某个值或者表达式。PHP变量规则:变量以$符号开始,后面紧跟变量名。变量名必须以字母或者下划线开始。变量名只能包含字母、数字和下划线,不能包含空格。变量名区分大小写。<?php$x = 5; //为PHP变量赋予某个值$y = 6;$z = $x + $y; //为PHP变量赋予某个表达式?>2.2 创建PHP变量PHP没有声明变量的命令,变量在第一次赋值时被创建。PHP是一门弱类型语言,即我们在创建变量时不需要生

2021-05-07 20:03:47 96

原创 PHP学习笔记1——PHP语法

1.1 基本的PHP语法PHP脚本以<?php开始,以?> 结束,可以放在文档中的任何位置。<?php //PHP代码?>PHP文件通常包含HTML标签和一些PHP脚本代码,其默认文件扩展名是".php".PHP中每行代码都必须以分号结束。如下是一个简单的PHP文件实例,它可以向浏览器输出文本"Hello World!":<!DOCTYPE html><html> <body> <h1&gt

2021-05-07 20:01:41 60

原创 《疯狂Kotlin讲义》读书笔记6——函数和Lambda表达式

函数和Lambda表达式Kotlin融合了面向过程语言和面向对象语言的特征,相比于Java,它增加了对函数式编程的支持,支持定义函数、调用函数。相比于C语言,Kotlin支持局部函数(Lambda表达式的基础)。6.1 函数入门6.1.1 定义和调用函数定义函数的语法格式如下:fun 函数名 (形参列表) [: 返回值类型] { //函数体}// 函数的声明必须使用fun关键字// 形参列表 “形参名: 参数类型”// 举例:fun max(x: Int, y: Int):

2021-04-28 20:00:30 190

原创 《疯狂Kotlin讲义》读书笔记5——数组和集合

数组和集合Kotlin为数组增加了一个Array类,为元素是基本类型的数组增加了XxxArray类(其中Xxx可以是Byte、Short、Int等基本类型),因此开发者可以用面向对象的语法来使用Kotlin的数组,包括创建数组对象、调用数组对象的属性和方法等。Kotlin的集合体系抛弃了Java中的Queue集合,但增加了可变集合和不可变集合的概念。Kotlin的集合体系由三种集合组成:List、Set、Map上述三种集合性质与Java类似。5.1 数组Kotlin的数组使用Array类代表,

2021-04-25 10:42:09 220

原创 《疯狂Kotlin讲义》读书笔记4——流程控制

流程控制与Java类似,Kotlin同样提供了两种基本的流程控制结构:分支结构和循环结构。Kotlin提供了 if 和 when 两种分支语句,其中 when 语句可以代替Java的switch语句,且功能更强大;Kotlin提供了 while 、do while 、for-in 循环,抛弃了Java原有的普通for循环。Kotlin也提供了 break 和 continue 来控制循环结构。4.1 分支结构4.2.1 if 分支Kotlin中的 if 分支既可以作为语句使用,也可以作为表达式使

2021-04-20 16:24:37 111

原创 《疯狂Kotlin讲义》读书笔记3——运算符和表达式

运算符和表达式Kotlin提供了一系列功能丰富的运算符,包括算数运算符、比较运算符、逻辑运算符、区间运算符、位运算符等。Kotlin基本支持Java的全部运算符(Kotlin不支持三目运算符,但是可以用if表达式代替三目运算符)。3.1 与Java相同的运算符Kotlin不支持三目运算符,且位运算符与Java也略有区别。除此之外,Java支持的运算符Kotlin也基本支持。注意:Kotlin的运算符都是以方法的形式来实现的。各种运算符对应的方法名都是固定的,我们只要为某类型提供特定名称的方法(成员方

2021-04-18 12:56:11 148

原创 《疯狂Kotlin讲义》读书笔记2——Kotlin的基本类型

Kotlin的基本类型和Java一样,Kotlin也是一种强类型语言,即要求:1、所有变量都需要先声明、后使用。2、指定类型的变量只能接受类型与之匹配的值。强类型语言可以在编译过程中发现源代码的错误,从而保证程序更加健壮。2.1 注释Kotlin支持单行注释、多行注释、文档注释,且形式与Java相同。2.2 变量Kotlin中的分隔符、标识符相关规则与Java一致。Kotlin不强制要求每条语句必须以分号结尾。一行内有多条独立语句,则除最后一条语句外,前面的语句都要求以分号结尾。Kot

2021-04-17 10:50:24 217

原创 浅谈View的事件分发机制

View事件分发机制的本质就是就是MotionEvent事件的分发过程,即MotionEvent产生后是怎样在View之间传递及处理的。首先介绍一下什么是MotionEvent.所谓MotionEvent,即用户手指触碰手机屏幕时产生的一系列触摸事件。典型的触摸事件有:ACTION_DOWN:手指刚接触屏幕的一瞬间。ACTION_MOVE:手指在屏幕上滑动。ACTION_UP:手指离开屏幕的一瞬间。ACTION_CANCLE:当前事件序列终止。一个事件序列一般都是以DOWN事件开始,UP事件

2021-03-27 22:09:49 320

原创 Android中IntentService的使用

IntentService继承自Service,可以处理异步请求。IntentService和Service的区别在于,用户可把任务通过startService()方法把任务封装在Intent中交于IntentService处理。IntentService可以处理多个任务,只需要实现在onHandleIntent()方法中实现每个任务的处理逻辑即可(用户通过调用startService来提交任务)。Service默认运行在主线程中的,而IntentService则会自动开启子线程来处理请求。同时,Inte

2021-03-24 09:55:59 333

原创 Android:自定义View之番茄钟

闲来无事回顾了一下之前写的项目,把番茄钟这块整理了出来。效果图如下:关键代码:import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.os.

2021-03-15 21:12:10 1332 7

原创 Android图片裁剪——第三方开源框架Android Image Cropper的使用

因为项目中有裁剪图片这一需求,我在网上找到了Android Image Cropper,一款使用起来非常简单第三方图片裁剪框架,在此记录一下。项目的github地址:Android Image Cropper效果图如下Android Image Cropper有两种使用方法:1、Activity用法(1)在app模块的build.gradle文件中添加依赖api 'com.theartofdev.edmodo:android-image-cropper:2.8.+'(2)在AndroidM

2020-06-08 21:50:25 2903 3

原创 我的算法日志:数据结构之栈

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶(top),相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈(push),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。java代码实现:package c...

2020-04-27 23:53:12 164

原创 我的算法日志:数据结构之链队列

链队列:用链式存储结构来存放队列中的元素,队列中每一个元素对应链表中一个链结点。具体而言,把线性链表第一个链结点定义为头结点head(链头),把链表的最后一个链结点定义为尾节点tail(链尾),并且限定只能在链头进行删除操作(出队),在链尾进行插入操作(入队),这个线性链表就构成了一个链队列。java代码实现:package com.guohao.arithmetics;/** * ...

2020-04-24 07:52:32 132

原创 我的算法日志:数据结构之顺序队列与循环队列

队列是一种操作受限制的线性结构,遵循“先进先出”原则,即遵循FIFO(First In First Out)原则。换而言之,队列只允许在其前端(head)进行删除操作(出队),而在其后端(tail)进行插入操作(入队)。进行插入操作的端称为队尾,进行删除操作的端称为队头。顺序队列顺序队列是基于数组实现的, 即在连续存储单元中存放队列的元素,并设置head指示器指示队头,tail指示队尾。...

2020-04-23 00:32:26 148

原创 我的算法日志:排序算法之快速排序

快速排序(Quicksort)是对冒泡排序的一种改进,由C. A. R.Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。以6、1、7、9、3、8、2、10、3、7这10个数为例,首先要在这个序列...

2020-04-18 22:18:28 177

原创 我的算法日志:排序算法之冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。冒泡排序的基本原理是:每一趟只将一个数归位。若要将n个元素排序,至少需要进行n-1趟操作。以将12、35、99、18、76这5个数按照从小到大的循序进行排序为例:第1趟操作:将最大的数归位,...

2020-04-18 01:01:24 157

原创 算法:桶排序(简易版)

Question: 班上有5个同学参加考试(满分是10分),分别考了5分、3分、5分、2分和8分,请写一段程序将将分数从大到小进行排序。思路:申请一个一维数组来存放得分情况(得1分的有几个人,得2分的有几个人……),然后根据得分情况输出信息。因为满分是10分,所以我们要申请一个容量为11的数组arr。因为第一个人是5分,所以arr[5]=1;第二个人是3分,故arr[3]=1;第三个人是5分,...

2020-04-16 23:55:48 181

原创 Android:简单粗暴的二维码生成与扫描

Android:简单粗暴的二维码生成与扫描之前写项目的时候有需求要生成和扫描二维码,我想弄的简单点,在网上找了好久终于在一个大佬的博客里找到了我所期待的简单粗暴,在这里记录一下。在app目录下的build.gradle文件中添加:implementation 'cn.yipianfengye.android:zxing-library:2.2'在AndroidManifest.x...

2020-04-13 01:34:15 786

DoodleSnake.zip

用java写的一个贪吃蛇小游戏,有两种游戏模式,可以改键,游戏难度可调,用服务器记录游戏得分排行榜,并且通过WebSocket实现客户端与服务器的交互。

2020-01-12

空空如也

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

TA关注的人

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