自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(221)
  • 收藏
  • 关注

原创 Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)

PS:通过UiDevice的构造方法,得知UiDevice对象持有几个对象……后面这些对象的功能,都是分析的重点……另外UiAutomation对象在UiDevice中使用率颇高,所以我们接下来再学习getUiAutomation()方法的是如何实现并返回一个UiAutomation对象的……getUiAutomatrion()方法分析位于UiDevice类中的getUiAutomation()方法,返回值是UiAutomation对象 UiAutomation getUiAuto.

2024-02-26 19:55:01 1114

原创 flask_apscheduler源码分析

遵循flask框架的标准的库,都称为flask扩展,flask_apscheduler是对apscheduler的扩展,也称为flask的扩展,最近使用flask_apscheduler遇到了一个job死亡的bug。现象:job平时是正常启动的,突然某个时刻全部挂了。。当前分析版本:1.12.4安装方式:pip install Flask-APScheduler源码位置:site-packages目录下flask_apscheduler是个包模块,包括__init__.py,共计6个模块。

2024-01-24 20:08:08 1099

原创 Python requests网络库源码分析(第三篇:通过学习异常模块,了解http协议)

作者定义了exceptions模块,在该模块中定义执行http请求过程中常见的错误,这些错误有助于我们写出健壮的业务程序 它们是:

2024-01-24 11:20:59 948

原创 python 模块搜索路径

当我们import os的时候,Python解释器去哪找os模块呢?如果多处都有os模块,选择哪个os模块呢?python解释器查找模块的过程,如果能熟练掌握的情况,你就再也不怕ImportError这个讨厌的错误,如果大家不理解,建议再读一遍,同时作以下练习,看看模块搜索路径都有,你要找的模块在不在这些目录中呢?import sys。

2024-01-06 20:49:07 394

原创 Java Script基础-数组遍历的7种方式

现在因为需要写Web前端,也超级喜欢上了JS,数组作为最常用的数据结构,5种常用的数组遍历方式,希望大家一起来掌握这就是数组常用的5种遍历方式,你可以根据自己的需求选择适合的方式,为啥提供这么多方式呢?没办法,谁让别的语言也有了呢。

2023-11-04 11:45:55 313

原创 shell编程基础(第15篇:文件操作相关命令)

计算机磁盘中存储的是文件(目录也算文件的一种),常见的文件操作命令有cd、ls、mkdir、rm、等等涉及到文件的增删改查,今天一起学习常见的文件操作命令,come on baby!文件的增删改查,大概总结了一下,并不是所有文件操作的命令集,后续会在做一篇提高篇,我相信这些命令够大家消化一段时间了!

2023-10-31 20:45:18 149

原创 shell编程基础(第14篇:管道符号的妙用)

类Unix系统中,有非常多的命令,如果每个命令都只能独立运行,无法发挥他们的作用,前辈们利用管道,把命令组合在一起使用,管道也是进程间通信的方式之一1、介绍了管道符号的基本使用2、一个命令能否放在管道后面,取决于它是否接受标准输入,比如grep、wc、awk都可以放到管道的后面,因为能接受标准输入,比如ls、mkdir显示不能放到管道的后面,它们不能接受标准输入3、 0代表标准输入、1代表标准输出、2代表标准错误,正常情况下键盘是标准输入、屏幕是标准输出与标准错误。

2023-10-26 10:50:20 190

原创 shell编程基础(第13篇:读取文件内容的3个命令)

一个文件总要看看它的内容是什么,这就是读取文件内容,在类Linux系统中,有很多命令可以读取文件的内容,常用的有cat、head、tail、less、more等等,每个命令有着不同的特点,多数情况下我们要依据文件的内容多少来决定使用哪个命令更合适,接下来一起来了解一下吧,比如文件只有10行文本,那么你用哪个命令都行,假设有1万行文本,就考虑用哪个命令更合适了,学完这篇文章,你会知道该用哪个命令更适合!本篇文章会介绍3个主要命令:他们是cat、head、tail。

2023-10-25 10:33:07 307

原创 ADB原理(第四篇:聊聊adb shell ps与adb shell ps有无双引号的区别)

对于经常使用adb的同学,不可避免的一定会这样用adb,比如我们想在手机里执行ps命令,于是在命令行中写下如下代码:或者两种方式都可以使用,你喜欢用哪个呢?但是你知道双引号的作用吗?1、熟悉双引号""作用,才能理解上面的情况,再强调一遍,双引号会让单词分隔功能失效(空白字符无效),仅支持命令替换、变量名替换、整数计算、转义字符,其他字符,bash解释器都不会再解释,比如 重定向 >,还有 管道 |

2023-10-24 10:51:22 454 2

原创 Android之Monkey源码分析(第十三篇:触摸事件流程分析)

前面讲了一些monkey作者的设计思想(有的我没写完,还没发布,惨),这篇来点实际的,monkey程序是如何发起一个触摸事件的呢?本例子中假设使用的命令是:表示向相机app发出1000个事件,所有事件都是随机的,其中会包括touch事件,那么这些touch事件是怎么构造的呢?1、monkey作者熟悉Android框架,它巧妙的使用了系统预留的系统服务,InputMangerService发出了touch事件。

2023-10-23 11:23:35 282 2

原创 Python 图形界面框架TkInter(第八篇:理解pack布局)

前言tkinter图形用户界面框架,提供了3种布局方式,分别是1、pack2、grid3、place本文介绍pack布局方式,也是我们最常用的布局方式第一次使用pack()import tkintermy_window = tkinter.Tk()my_window.geometry('400x200')hello_world_label = tkinter.Label(my_window, text="Hello World", bg='red')hell

2023-08-14 20:28:41 1206

原创 Android UiAutomator测试框架源码分析导读

竟然有人做这个框架的源码分析,你以为我疯了吧,还真有点,当初想提升能力,又不知道要干啥,就扎进去UiAutomator框架中,想看看自己能否看懂源码?开始看的时候,感受道吃力的感觉了,之后不敢说如履平地,反正可以快速看懂一个对象、一个方法,做起需求来,也是妥妥的,一共写了几十篇文章,我当然建议你边读边看源码了,你最好对UiAutomator的API比较熟悉,比如UiDevice、UiObject、UiObject2等等用的很熟练那种,看起源码来,会爽歪歪。

2023-07-24 20:27:22 702

原创 shell编程基础导读

要么不做,要么做到最好,我的牛已经吹起来了,各位接招吧,本篇把shell编程基础的目录放出来,方便大家寻找知识点与学习,学习应该是最简单的事情了,只要一个一个的知识点都掌握了,那么也就学会了,学习一遍肯定不可以的,要多少遍才能学会呢?这个数字不好评估啊,建议是哪天忘了就要回来看一看,温故而知新,绝对好使……。我想能在CSDN找教程的同学,多数都是新人吧,建议大家从头学到尾,碰见没学会的没关系,可以动手简单的写写。对于老司机则是忘了哪个知识点,随时再来温习一下即可。

2023-07-24 20:04:52 293

原创 shell编程基础(第12篇:命令行参数)

编写命令行程序,为了程序的灵活性,需要使用命令行参数,通过命令行参数与程序进行交互,更能满足实际需求,比如ls -l,-l就是参数命令行参数,编写shell程序中竟然会使用,本文首先列举了基本的一些用法。

2023-07-15 11:09:53 688

原创 shell编程基础(第11篇:重定向)

编写shell脚本程序时,总会使用重定向技术,用来永久保存程序的输出到文件中,或者用来从文件中提取文本到程序中,都支持哪些重定向呢?

2023-07-13 10:22:04 834

原创 Python调用外部程序的9种方式,你都知道吗?

1、官方提供这么多种执行外部程序的方式,我相信与标准的制定有关,每个方式都不完美,但总有适合你的2、它们都会阻塞当前进程3、官方建议使用subprocess下的方式,而不建议使用os下的方式4、subprocess模块的源码非常值得一读5、肯定还有其他调用外部程序的方式,不过这些真的够用了。

2023-02-21 22:52:35 6989

原创 tkinter尤克里里爬格子练习器

tkinter写的乌克丽丽爬格子练习器,一起来练习乌克丽丽吧

2023-01-15 01:04:12 884 1

原创 shell编程基础(第10篇:字符串)

字符串,所有编程语言都有的概念,本质为一组字符组成的序列,在shell编程中更特别,因为字符串是shell中唯一的数据类型,哪怕你看到的是一个数字,它也是字符串(周杰伦说:我是最屌的,没错,我现在就是最屌的, 我要写一本关于shell的书!!)1、字符串拼接,不需要额外的+号,仅需挨着放在一起即为拼接,现在想想其他语言使用+号拼接是不是多此一举?2、常常使用双引号修饰字符串,因为可以双引号中可以使用变量替换、命令替换3、shell编程中只有字符串一种数据类型,你看到每个都是字符串,包括看到的数字。

2022-09-04 23:38:53 1901

原创 shell编程基础(第9篇:循环)

在生活中我们总会做重复的事情,程序中使用循环模拟做重复的事情,任何语言都有循环语句,今天一起学习while

2022-06-30 07:54:58 1576

原创 Shell编程基础(第8篇:分支语句-case in)

当您的if else语句特别长的时候,建议使用case in

2022-06-30 00:14:48 1187

原创 Shell编程基础(第7篇:分支语句-if)

在执行流中,根据条件执行不同的语句,分支语句,在shell编程中,主要是if、case in的使用,我们一起学习一下由于true命令的退出状态码为0,所以包含在then与fi之间的语句会执行由于true与then不在同一行,所以;可以省略,两个格式习惯用哪个,就用哪个都一样由于true的退出状态码为永远为0,所以else与fi之间语句无法执行由于then与true不在同一行,无需使用;隔开由于false命令的退出状态码固定为1,所以if语句中的代码不会执行,转而判断elif中的

2022-06-18 09:12:58 1986

原创 Shell编程基础(第6篇:函数)

哪个语言标准,没有函数呢?我还真没找到,函数反复调用,减少重复代码,我们一起学习shell编程中的函数,包括创建函数、删除函数、函数中定义变量、函数的返回值(退出状态码)、函数中的参数处理、函数调用……两个标准的语法,习惯哪个用哪个!1、直接定义2、function关键字函数调用直接写函数名即为函数调用1、参数接收特殊变量1表示第一个参数、特殊变量2表示第二个参数,第几个参数就用数字x代替2、参数传递空格字符隔开,即为向函数传递参数3、 所有参数$*或者$@(作者喜欢用*与@

2022-06-14 11:29:20 822 1

原创 Shell编程基础(第2篇:数组)

前言 shell脚本也有数组,用于保存多个多个元素,一起学习一下如何创建数组、如何读取数组、以及如何遍历数组创建数组(7个方式)1、元素之间使用空格字符分隔,放在括号里first=(one two three)2、元素之间使用换行符分隔,也放在括号里second=(onetwothree)3、直接通过下标赋值third[0]=onethird[1]=twothird[2]=three4、在每个元素前指定下标位置,下标值顺序可以任意指定fo..

2022-06-12 19:04:33 1846

原创 Shell编程基础(第5篇:6种整数计算的方式)

各个语言都有自己的标准,shell只有一种数据类型:字符串。 当你满心欢喜的写下一个99+1计算的语句……变量result返回的不是你想要的值,而是字符串99+1,在shell编程中,整数计算有独属于自己的标准,今天一起学习shell编程中的6种整数计算的方式,注意:只有整数计算哦,浮点数得采用其它方式!!!!个性吧?!!!输出结果: 先重温一下变量替换,也称为变量值替换!该标准中,规定了美元符号$在shell编程中为特殊字符,Shell解释器会将美元$紧挨着的单词认为是变量名,sh

2022-06-05 15:43:00 1732

原创 Android之HandlerThread源码分析(第五篇:Looper对象的创建与获取,学习如何保证Looper对象创建完毕)

前言在工作线程中创建某个对象,担心对象没有创建完成,就被其它线程访问?ThreadHandler诠释了如何使用工作线程优雅的创建对象,让我们从获取Looper对象的方法开始获取Looper对象 public Looper getLooper() { if (!isAlive()) { return null; } // If the thread has been started, wait u

2022-03-21 22:24:16 3588

原创 Python 图形界面框架TkInter(第七篇:pack方法在哪?)

前言tkinter提供了3种布局管理方式1、pack2、grid3、place 每种布局管理器都非常有用,根据不同的需求,选择其一即可,每个控件都可以使用pack方式,那么你知道为什么会这样吗?我们从源码中看下pack方式!...

2022-03-20 16:56:16 3493

原创 Python之set并集、交集、差集

数学知识点回顾交集合集差集https://jingyan.baidu.com/article/22fe7ced4e36bd7002617fae.html数学知识点回顾

2022-03-10 11:33:42 1774

原创 Shell编程基础(第4篇:退出状态码)

前言退出状态码,表示程序执行结束后的结果,成功 or 失败,按照标准,退出状态码为0表示成功,非0表示失败,bash巧妙的使用退出状态码做了很多事……if只认退出状态码bash中的if,只要命令的退出状态码为0,才会执行if中的代码块,这与大多数语言的标准完全不同,让所有人懵逼了……while只认退出状态码for只认退出状态码return返回的是退出状态码&&也认退出状态码||也认退出状态码bash脚本返回退出状态码1、使用

2022-02-25 00:03:52 3023

原创 Shell编程基础(第3篇:命令替换)

前言命令替换,bash编程的核心技术点之一,通过命令替换我们可以获取任何命令的标准输出,以此做进行更复杂的业务逻辑概念命令替换,也称作子命令替换,可以获取到命令的标准输出2种方式1、反引号temp=`date`echo $temp2、$()temp=$(date)echo $temp两种方式均为命令替换的标准语法,反引号是之前的语法规范,$()则是后来新增加的规范,按照技术至上的原则,我觉得使用哪种方式都可以,但是$()可以有更复杂的用法,继续往下看!

2022-02-17 23:22:13 2940

原创 Python 图形界面框架TkInter(第二篇:Window创建过程分析)

(备注:本文基于Python3.7)前言 本想写tkinter的入门教程,后来看到很多优秀的技术爱好者已经对Tkinter有着非常全面的介绍,我临时决定改变策略,决定分析Tkinter框架的源码,创建一个最简单的TkInter应用,只需要下面的3行代码!import tkinterroot = tkinter.Tk()root.mainloop() Windows系统下的效果,标题栏有个羽毛的图标、还有一个英文标题:tk,这个Window是如何创建出来的?tkinte...

2022-01-17 22:04:39 5820

原创 Python 图形界面框架TkInter(第六篇:源码中学习所有控件修改属性的方法)

前言我们写一个Label对象,总是会为其赋值属性,假设我们写了这样的一个Label,它的背景是红色import tkinterroot_window = tkinter.Tk()root_window.geometry("200x200")my_label = tkinter.Label(root_window, text="hello world", bg="red")my_label.pack()root_window.mainloop()我们创建的Label对象,

2022-01-12 23:10:04 2517 1

原创 Android之Monkey源码分析(第七篇:Monkey程序如何获知App崩溃,然后自己停止运行的逻辑分析)

前言 Monkey程序是用来执行稳定性测试的,被测App如果出现崩溃,Monkey程序会第一时间收集日志,App出现ANR,Monkey程序也会第一时间收集日志,这些都究竟是怎么做到的呢?这就依靠的是ActivityController...

2022-01-12 22:20:20 4265

原创 Python queue模块源码分析(第一篇:queue模块介绍)

前言 通过queue模块中的对象,我们可以创建线程安全的普通队列,优先级队列、堆栈。它们不仅可以用于线程间交换数据(线程间通信),还支持线程间阻塞(线程间同步),我常常喜欢称它们为【线程间通信+同步】的数据结构!今天通过源码学习作者是如何实现的线程间同步,又是如何实现的线程间通信!queue模块介绍 queue模块源码位于Pythonxx/Lib/queue.py文件中,xx取决于你的版本(本文基于Python3.7),属于标准库中的一员,下面是queue模块中的属性情况...

2022-01-11 23:00:14 1998

原创 Python 图形界面框架TkInter(第五篇:通过Label类学习控件类的设计)

前言 在tkinter图形界面框架中,Label对象表示文本控件,写一个最简单的hello world,离不开Label……import tkinterroot_window = tkinter.Tk()hello_world = tkinter.Label(root_window, text="Hello World")hello_world.pack()root_window.mainloop()输出结果:Label类继承结构class Label..

2021-12-22 01:07:13 1202

原创 Android之Monkey源码分析(第X篇:工具类MonkeyUtils的设计思想)

前言 Monkey程序中,作者设计了两个工具类,分别是MonkeyUtils、MoneyPermissionUtil,今天这篇文章介绍作者如何设计工具类MonkeyUtilsMonkeyUtils类设计分析 由于该类定位是工具类,作者做了几件很酷的事情1、将该类设计为Abstract,使其不能创建对象public abstract class MonkeyUtils {}2、构造方法设为私有 private MonkeyUtils() { }...

2021-12-03 22:36:41 2473

原创 Shell编程基础(第1篇:变量)

前言 当我第一次shell脚本编程的时候,定义一个变量,赋值为Hello World,我习惯性的写下这样的代码my_first = hello world然后我去运行,bash提示了一个错误:./third_shell.sh: line 1: my_first: command not found 我懵逼了……,shell脚本是怎么回事?只是定义个变量就直接拉跨了?当时的我没有系统的学习shell编程,一般都是用到的时候查查资料……后来发现这样完全行不通,必须系统的学习shel....

2021-12-02 23:19:45 1303

原创 Java之String源码分析(第一篇:equals方法是如何比较字符串相等的?)

前言 String,表示字符串,我们会经常创建String对象,使用equals()方法用于比较内容是否相等,那么String的equals()方法是如何实现比较字符串相等的呢?进入代码中一探究竟!equals()方法 equals()方法是定义在父类Object中的一个方法,在Object中的默认实现中,equals()方法仍然使用==比较的是对象的引用是否相等,即两个引用是否指向同一个对象!而String重写了equals()方法,规则则改变为比较字符串的内容是否相等!...

2021-11-21 21:34:58 1577

原创 Java之StringBuilder源码分析(第一篇:创建对象)

前言 String、StringBuilder、StringBuffer都是我们常用的字符串类,那么StringBuilder是怎么实现的字符串拼接?又是怎么实现的删除字符?值得我们深入到源码中一探究竟!StringBuilder类结构public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{ ..

2021-11-21 19:39:07 954

原创 Python 图形界面框架TkInter(第四篇:定时器详细使用与代码分析)

前言 经过一段时间后,执行一段代码,各个语言都带有这样的功能,而框架内也有封装好的功能,它们常被称作计时器、定时器、延迟消息等等名称,指的都是一回事!最简单的例子import tkinterroot_window = tkinter.Tk()my_show = tkinter.Label(root_window, text="Hello World")my_show.pack()def change_text(): my_show.configure(text..

2021-11-19 22:54:59 3041

原创 Python 图形界面框架TkInter(第三篇:root window的理解)

前言 我们每次创建Tkinter中的控件时,总是会为其指定一个master对象,或者叫做容器对象,表示控件需要放在哪个哪里,另外此举也会防止控件对象被GC回收!如果你仔细观察,你会发现控件对象的第一个默认值参数master也可以什么都不传,此时的控件同样会放在root_window上,这是为什么呢?让我们从代码中一探究竟!创建Button对象时未指定master的例子import tkinterroot_window = tkinter.Tk()first_btn = tki..

2021-11-18 00:25:35 2656

空空如也

空空如也

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

TA关注的人

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