0%


简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

阅读全文 »


完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。
为了解决这些问题,可以定义一些独立的类来封装不同的算法,每一个类封装一个具体的算法,在这里,每一个封装算法的类我们都可以称之为策略(Strategy),为了保证这些策略的一致性,一般会用一个抽象的策略类来做算法的定义,而具体每种算法则对应于一个具体策略类。

阅读全文 »

流程

1.安装JAVA_HOME

2.安装ANDROID_HOME

3.安装夜神模拟器和安装appium和node.js

4.调试环境

4.编写python脚本

1.安装JAVA_HOME环境

这个很重要,特别是我经常用IDEA做开发,平常就很少配置JAVA_HOME环境变量,,变量名为:ANDROID_HOME

2.安装ANDROID_HOME环境

看网上的教程,都是去官网下了个安卓的SDK,我一上官网,就只是提示我下载Android Studio,所以就安装了这个软件,在软件的配置里面找到的安卓的SDK的目录,然后就配置了环境变量

变量名为:ANDROID_HOME

变量值为:C:\..\..\Android\Sdk

然后在Path里添加:

%ANDROID_HOME%\tools

%ANDROID_HOME%\platform-tools

3.安装夜神模拟器和appium

夜神模拟器就下载最新版本的就可以

appium也直接在网上下载安装好就行

4.调试环境

1.把C:\Program Files (x86)\Nox\bin添加到Path环境变量红

2.查看夜神模拟器的adb版本号:nox_adb.exe version

1
2
3
4
5
y9507@DESKTOP-IAE2VRK  C:\Program Files (x86)\Nox\bin
❯ .\nox_adb.exe version
Android Debug Bridge version 1.0.41
Version 30.0.3-6597393
Installed as C:\Program Files (x86)\Nox\bin\nox_adb.exe

2查看adb版本号:adb version,这是安卓的sdk版本号

1
2
3
4
❯ adb version
Android Debug Bridge version 1.0.41
Version 30.0.3-6597393
Installed as C:\Users\xxxx\AppData\Local\Android\Sdk\platform-tools\adb.exe

如果他们不一样,就把安卓的adb.exe拷贝到``C:\Program Files (x86)\Nox\bin里,并改名nox_adb.exe`,再看看版本号是不是就一样的了

3.夜神模拟器连接上安卓sdk

1
2
❯ ./nox_adb.exe connect 127.0.0.1:62001
already connected to 127.0.0.1:62001

4.启动appium,现在先使用默认的设置,点击启动服务器

appium是基于node.js开发的,前提要安装好node.js

1
2
3
4
5
6
7
[Appium] Welcome to Appium v1.17.1
[Appium] Non-default server args:
[Appium] allowInsecure: {
[Appium] }
[Appium] denyInsecure: {
[Appium] }
[Appium] Appium REST http interface listener started on 0.0.0.0:4723

5.查看现在可用的手机设备

1
2
3
❯ adb devices
List of devices attached
127.0.0.1:62001 device

注意看这里的127.0.0.1:62001,这是一个字符串,如果是用真实手机的话,这里显示的是一串连续的字符串

6.sdk连接appium

1
appium -a 127.0.0.1 -p 4723 -U 127.0.0.1:62001

-a 就是appium启动的ip地址

-a 就是appium启动的端口

-U 就是在第五步获取的字符串127.0.0.1:62001,连接这台手机设备

5.编写脚本

安装包

1
pip install Appium-Python-Client

脚本,这里是个简单的抖音的自动点赞功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import time

from appium import webdriver

desired_caps =dict()
# 平台名称,安卓就是Android
desired_caps['platformName']='Android'
# 平台的版本
desired_caps['platformVersion']='5.1'
# 设备的名字,貌似可以随便写
desired_caps['deviceName']='Android'
# 包名
desired_caps['appPackage']='com.ss.android.ugc.aweme'
# 界面名
desired_caps['appActivity']='.splash.SplashActivity'
# 不用每次都重新安装app
desired_caps['noReset'] = True
# 输入中文
desired_caps['unicodekeyboard']=True
desired_caps['resetkeyboard']=True

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
driver.implicitly_wait(30)


while True:
# 滑动
print("开始滑动")
driver.swipe(200,900,300,500,500)
print("滑动完成,休息")
time.sleep(5)

# 进入头像
driver.find_element_by_id("com.ss.android.ugc.aweme:id/en2").click()

# 获取关注人数
comment = False
number = driver.find_element_by_id("com.ss.android.ugc.aweme:id/arh").text
if number.find("w") != -1:
print("关注人数"+str(number))
# 关注
print("开始点击关注")
driver.find_element_by_id("com.ss.android.ugc.aweme:id/el4").click()
print("开始点击完成")
comment=True
else:
print("关注人数没有一万多,不操作了")
break

# 退到首页
driver.find_element_by_id("com.ss.android.ugc.aweme:id/ks").click()

# 是否要留言,关注了就留言
if comment == True:
# 点击评论按钮
driver.find_element_by_id("com.ss.android.ugc.aweme:id/acv").click()
# 点击评论输入框
driver.find_element_by_id("com.ss.android.ugc.aweme:id/acp").click()
# 写下评论
driver.find_element_by_id("com.ss.android.ugc.aweme:id/acp").send_keys("太棒了")
# 发送
driver.find_element_by_id("com.ss.android.ugc.aweme:id/ad_").click()
# 关闭评论窗口
driver.find_element_by_id("com.ss.android.ugc.aweme:id/ks").click()

time.sleep(10)
print("一次循环完成")

driver.quit()

其它APi

ADB

1
2
3
4
5
# 从电脑上安装软件的手机上
adb install ‪C:\迅雷下载\2a5b812be8277ae6f75b0fb736fab49a_72817400.apk

# 通过这个命令,看
adb shell dumpsys window windows | findstr mFocusedApp

Python

1
2
3
4
5
6
7
8
9
# 滑动滑动
driver.swipe(sx,sy,ex,edy,ms)

# 获取当前的包名和界面明
driver.current_package
driver.current_activity

# 隐式等待
driver.implicitly_wait(30)

服务器

Vultr里买了两天新加坡服务器

说Vultr哪里好

  • 就是简洁到,任何一处功能都是可以用上的,没有多余的按钮,连接,
  • 可以用支付宝支付,也可以直接绑定Visa卡
  • 1G 1核心的服务器,一个月只要5美,对比亚马逊,阿里云的香港节点,华为的国外节点都更便宜,在东南亚连接国内的阿里云,命令行都是一个字母一个字母显示出来的
  • SSH连接速度很快,Maven下载jar包,或是Docker下载镜像,或是Jenkins下载插件速度都更快
  • 不需要备案,HTTPS也不需要跟阿里那样,需要服务器运行慢三个月

说Vultr不好

  • 提个工单,感觉那客服比我还不懂,看了系统的ssh登录日志,每时每刻都有不同的IP尝试访问,暴力破解中
  • 阿里云现在报警系统感觉还是非常牛逼的,像SSH暴力破解都是发邮件提示,Vultr不行
  • 买的一台服务器用Docker跑的Mysql,经常莫名其妙的密码不对,或者是那种勒索了数据库,要求我发多少比特币到那邮箱..阿里云的服务器就不会出现这个问题,已经出现过很多次这样的情况,就算设置的Mysql的访问IP,也没有作用

实在忍受不了了,还是换回阿里云的服务器,2G 2核心一年760左右,感觉好贵呀,心疼…..,虽然命令行非常慢,主要是也没有太多操作,安装Docker,Mysql,Redis,Jenkins和jar包的启动脚本

Mysql

阿里,亚马逊的数据库都贵,给一般企业用还差不多,本来也就开发的时候,和前端联调的时候回用上数据库,买包时的,又嫌麻烦,在Vultr上用docker跑的数据库,明明数据库密码是有很高复杂度的,但总是能被人访问,而且限制了IP访问,还是不起作用,我都怀疑,Vultr这家公司的服务器是不是有后门

还有个时区的问题,Mybatis插入数据库的当前时间,和获取那条记录的插入时间对不上,差8个小时,虽然大概知道是个怎么回事,但是绕了些弯路,整体解决下来就是:

  1. 判断插入时间是不是正确的
  2. 修改服务器时间
  3. 修改docker容器的时间
  4. 修改SpringBoot的时间

Nginx

只是使用了一个简单的功能,域名转发,开始使用的Vultr的服务器,在阿里云域名解析,一下子就能成功,之后换成阿里云服务器之后,就一直解析不成功,用IP:PORT访问又是正常的,后来才发现服务器必须得满使用3个月,才可以用域名转发…慢慢等吧

在Vultr服务器上,因为域名是可以转发的,所以可以在Nginx那里配置SSL证书,免费申请的那种,各种百度一顿操作都是正常,可就是访问报错,一步一步找才发现,用docker跑Nginx的时候,并没有开启443端口……..我TM无语了,貌似Docker就这点不好,如果第一次运行容器的时候,把数据卷映射到服务器本地还好,如果没有映射,那凉凉还得重新来过,没想明白,那么强大的功能,为什么不给个,修改正在运行容器的启动命令(这里不考虑docker commit)

换到阿里云服务器,也就是域名不能转发成功,所以证书也自然而然配不上了

做开发的时候,虽然不是很羡慕做管理的人,但是一直觉得做管理是个稍微轻松的活,工资不说,起码比开发高,这些天回国休假的同事都因为疫情来不了公司了,只能我上

这接近一个月的样子,都没有写代码了,每天各部门导出跑,开发提交代码,到测试,到最后上线,层层环节都有各种问题,特别严重的是之前同事开发的代码,都有各种坑,特别还是在线上,然后测试提禅道单,开发去改,发现是一个深坑,产品不知道需求,开发也不知道原来的需求是什么样子的,看代码,又发现逻辑对不上,所以出来Bug也不知道要怎么改

总之呢,这就是现在公司的现状,管理也没有想象中的那样轻松,分发任务,和Bug,开发人员也不够,也到处都是坑,这项目从0开始还好说,现在简直是从负数开始,也好久没有学习了,身心疲惫,轻松的时候,经常玩到4点多才睡觉,现在就是回去洗个澡就躺着就睡着了

今天回国休假的人也回公司了,我也想稍微的偷偷懒,业务什么的,实在是没有太多心思管,也不想管进度,让专门的人来做吧,我就本本分分的负责好技术

今晚下班的时候还不想回去,闲着的时候准备找个分布式的定时任务的源码看看的,看到拦截器那里,已经忘记拦截器和过滤器有什么区别了,不想看Spring了,最后决定,从头开始吧,从Servlet开始

就在这里立下一个Flag,还没有想好重点,就是想着从头来过,立志要做一个架构师的男人

这两个月,时间过的也是很漫长的,公司的代码已经做了两个版本,各种Bug,我都有点无语了,其中有的代码是已经有了一年的历史了,理论上应该是非常稳定的了,可是到现在还时不时的出现问题,我也是很无奈,最无语的就是,有一些边缘的功能,业务也很简单,就是对一两张表做CRUD,经过一年的测试,等到我接受它相关的业务的时候,我去看那些代码,竟然还有的是错的,真的,我不知道是该骂人好,还是要怎么样,测试竟然没有测出一年的bug

这两个月,时间过的也是很短暂的,闲余的时间,我开始在写自己的商业项目,计划是今年内,或者是11月份内,要上线运行,万事开头难,从刚开始的时候,我都不知道要怎么开始,到现在的的,开始有了服务器,项目名称,和专业的设计,设计出来的LOGO,也开始接触第三方公司,一聊天的时候,别人就说,老板怎么怎么样,我顿时就觉得很尴尬,可能在别人眼里,我就是个有钱的老板,可是只有我才知道,我TM就是个穷人,有意无意的我也有说,现在项目还是个人开发的,然后我就不管别人怎么想的,别人提供服务,我给钱,合作的好,就继续合作,合作的不好,别人换个客户,我给钱给另外一个人,在接触第三方的时候,还是顺利的,毕竟给钱了得

没给钱的就很尴尬了,老是被人封IP,我都换了三个IP了,数据库经常被黑掉,那时也是安全没做好,老是有人把我的数据库删掉,添加张表,让我把比特币汇给那人,然后帮我恢复数据,刚开始的时候,都是没有备份的,后来实在是受不了了,就限制了IP访问…..

还有很多坑在里面,跟前端对接口,跟第三方对接口,配置服务器环境,自动化构建部署…..总之有各种各样的问题,都等着我百度,谷歌之后一个一个解决掉

现在项目已经有雏形了,各个环节都已经打通,就差调试,把整个流程跑通,当然业务功能也是最简单的,都是基本功能,参考同行的软件,不必要的功能都不要,麻烦的或者需要学习成本的功能也不要,怀着抖音,微信这样的方向去做,足够简单,又足够强大

当然也需要我足够强大才行,既能做的了架构,又能做开发,既能做运维,也能做客服,项目前期是真的没有什么人,万事开头难

看了几年前的Redis集群安装,那还是3.4的Redis,恍如时光

在Github上下载了一个项目,spring也没有用上,各种都是那人自己手动封装,包括解析xml,牛逼是牛逼,倒是跑起来也是贼麻烦的,一直卡在Redis的集群里,本来想让公司的运维装个Redis集群直接让我用, 结过,弄了两次,代码连接redis一直报错

也不太想麻烦别人了,就自己临时搭一个,还是招这几年前的笔记,哈哈哈,有点怀恋

阅读全文 »

看完公司的基于Netty的游戏框架,框架中用到了多态,函数式编程和事件驱动编程,第一次看到事件驱动的时候,就想到跟观察者模式很像.

事件驱动初上手感觉还很好用,在我自己写的项目里,要写很多爬虫,比如下面爬虫的例子,我只是想关心拼接URL地址,和关心不同的网站怎么解析DOM元素,写一个回调就好

多态,函数式编程和事件驱动编程,这三个还是然让我学到很多,可以用一个框架的基础,比如在Netty中,继承SimpleChannelInboundHandler<TextWebSocketFrame>,实现这里里面的方法,就能接收到请求,很方便.

阅读全文 »

前两写了两篇,都是为SpringCloud+Docker部署做准备,在部署的时候,不同服务器,不同的Docker容器之间的通信,还好没有掉到坑里去,在公司里用了新技术,还是很开心的,小有成就感,之前一直想用上Docker,太忙就忽略了,这次是老大让我搭建一个预发布环境,一直都是重复性的工作,就很枯燥,心想着用新技术吧,这三篇文章,都是在各种爬坑中过来的

阅读全文 »