curl的笔记
1 | curl -X POST http://balabala.com/balabala -d {\"param1\":\"value\"} |
-X
可以指定请求方式,比如POST
或者GET
.
-d
可以指定参数,但是似乎默认的参数格式是"a=sss&b=c"
这种格式
似乎需要额外的参数指定json格式呢
找到了
1 | curl -H "Content-Type:application/json" -X POST http://balabala.com/balabala -d {\"param1\":\"value\"} |
DevOps
Development and Operations
特点?
好处都有啥?
缺点?
采用的技术?
VSCode
很好,vscode很好
vscode很奇怪 不是很好
材料
- md编辑时打开preview关闭很迷
- terminal放到右边时如何回到下方
零样本学习
pycryptodome
什么是pycryptodome
呢
源码
为什么不看一看源码呢
iptables
1 | iptables -t nat -nL |
iptables好像很有趣
gitbook?
#的作用
比如#test可以访问这里
docker的网络模型
导出word的方案
telnet使用
Spring boot中使用redis做缓存
一篇文章: https://www.cnblogs.com/gdpuzxs/p/7222309.html
另一篇: https://www.cnblogs.com/badboyf/p/6995202.html?utm_source=itdadao&utm_medium=referral
中文文案排版指南
Go
方法以及简单的Hello World
1 | package main |
用scratch来制作一个go应用镜像
摘自菜鸟教程。
package main
代表是一个可独立执行的程序。
fmt
是一个IO库。
Println
竟然是大写
{的位置
1 | func main() |
这样写会报错。。。。真的有这个必要吗
for循环
1 | var list = []int32{1, 2, 3} |
变量命名
使用单驼峰命名方式,不是下划线或者双驼峰
调试
1 | go run filename.go |
新问题
在docker里面启动的东西能不能把命令行的日志放到日志文件里啊
试一下吧
docker启动一个redis
1 | docker pull redis |
Arduino
注释
可以使用
舵机
使用Servo
控制舵机
Serial
1 | Serial.begin(); |
(Arduino高亮是不是有bug)
css3动画
真好玩
vue中操作cookie
axios默认不允许请求携带cookie
需要使用
1 | axios.defaults.withCredetials = true; |
接收不到cookie
不要使用mock即可
Redis
Redis在互联网公司一般有以下应用:
String:缓存、限流、计数器、分布式锁、分布式Session
Hash:存储用户信息、用户主页访问量、组合查询
List:微博关注人时间轴列表、简单队列
Set:赞、踩、标签、好友关系
Zset:排行榜
Ant Design
Kite
安装
先翻个墙:
1 | go get -u github.com/gpmgo/gopm |
创建Project
如果使用goland,不要把目录放在GOROOT下面
哈夫曼编码
glsl
点乘是dot
叉乘是cross
圈乘$\otimes$是把对应位置乘起来,可以用matrixCompMult
叉乘
假设有向量$\mathrm{A}=(x_1,y_1,z_1),\mathrm{B}=(x_2,y_2,z_2)$,那么
$$
\mathrm{A}\times\mathrm{B}=(y_1\times{z_2}-y_2\times{z_1},z_1\times{x_2}-z_2\times{x_1},x_1\times{y_2}-x_2\times{y_1})
$$
酷Q docker
测试一下
1 | docker pull coolq/wine-coolq |
访问对应的端口输入密码即可操作
进入/root/cooq-data/conf,编辑CQP.cfg,添加
1 | [Debug] |
把开发好的应用拉下来试试(
接下来开始开发请求模式的机器人
先启动一个docker版flask或者django试试?
使用HardSourcePlugin加快webpack速度
1 | npm install --save hard-source-webpack-plugin |
groovier的做法
整理OneToOne、OneToMany、ManyToOne的关系
OneToOne
假设有两个类A和B,它们互相只能持有一个对方的对象,我们想把这个关系存在A对应的表中。
也就是在数据库中A持有B的id字段,B则不持有A的字段。
而在类中它们则是相互持有的关系,此时应该如何处理呢?
如果我们在A类中写一个B类的属性并使用OneToOne注解,效果是在数据库中
A里面持有了一个B_id,而B没有。
如果两边都写一个OneToOne,则是A中存一个B_id,B中存一个A_id。
都不符合要求。
我们试试JoinColumn,但并不能达到效果。
比如在A中的B属性使用OneToOne,B中的A属性使用OneToOne,并且加上JoinColumn(name=’B_id’)
我们会发现并没有什么效果,只是B里面原来应该是A_id的字段变成了B_id
达到要求的操作应该是
对B使用:
OneToOne(mappedBy = “A中持有的B的属性名称”)
对A使用:
OneToOne
JoinColumn(unique=true)
这时达到的效果是:
B表中没有相关的A的信息,而A表中有B的信息。
具体一点则是:
1 |
|
而在数据库中的字段:
A:
1 | id, b_id |
B:
1 | id |
级联更新和级联删除
我现在有一个需求:
不要那么多save,直接save一个 其他相关的也会save
我们来看看JPA中级联的几个方式
级联里面有Persist和Remove
其实还有好几个
- PERSiST
- REFRESH
- DETACH
- MERGE
- ALL
看看CascadeType源码吧
里面并没有写特别多东西
算了
此外发现Java和Groovy中的一些不同
在Java的注解中
一个列表用的是{}
而在Groovy中使用的是[]
如:
1 | (cascade = {CascadeType.PERSIST, CascadeType.REFRESH}) |
1 | (cascade = [CascadeType.PERSIST, CascadeType.REFRESH]) |
几个同名类的不同
java.persistence.Id
和
org.springframework.data.annotation.Id有什么区别?
点进去看看⑧
java.persistence.Id说这个就是用来指定实体的主键的。
在Java类中它可以修饰的类型如下:
- 基本类型
- 基本类型的封装类型
- String
- java.util.Date
- java.sql.Date
- java.math.BigDecimal
- java.math.BigInteger
但是有一件很神奇的事情是,它还可以修饰方法…emm
也就是只要返回值是这些类就可以?找个时间做个实验吧
而org.springframework.data.annotation.Id的解释少了一些
只说是用来修饰identifier的。
Target多了一个value是ANNOTATION_TYPE
这个是用来干什么的呢
写一个注解的例子
1 | ({METHOD, FIELD}) |
其中Target里面有一个ElementType的数组,可以是:
- TYPE(我猜是类型)
- ANNOTATION_TYPE(注解类型)
- FIELD(Field就是类的属性啦)
- METHOD(方法)
- PARAMETER(参数)
- CONSTRUCTOR(构造器)
- LOCAL_VARIABLE(局部变量)
- PACKAGE
- TYPE_PARAMETER
- TYPE_USE(1.8起 也没搞懂)
- MODULE(java9开始,应该是用在package-info里面)
什么是jls呢
而Retention呢?大概是指这个注解的生存期
RetentionPolicy里面定义的几个enum是
- SOURCE(源码中存在,编译后去除)
- CLASS(记录在class文件中,但在运行时没有,这个是默认选项)
- RUNTIME(运行时也存在,可以通过反射获得)
去源码里面找一些骚操作
集合框架啊
ik分词器是什么呢
elasticsearch的使用
用完感觉也就一般
WordEmbedding
是一个比OneHot更高效的用向量表示单词的方式。
可以指定向量的长度 并由神经网络生成。
向量之间有相似度关系,而不是在OneHot中的只是表示一个编号。
(使用余弦相似度计算)
生成方式是使用下列方式的一种:
- CBOW(Continuous Bag of Words)
- n-gram(skip-gram)
- Glove
Word2Vec中包含了CBOW和n-gram方法。
Word2Vec使用
Hex-Rays Decompiler
IDA Pro
POSIX
KCachegrind
zcov
apktool
我们使用apktool来修改篮球经理2017
然后我们需要一个apk文件,想办法搞一个就ok了。
把它们放在同一个目录下,打开命令行,运行
(需要Java7环境)
1 | java -jar apktool.jar d xxx.apk |
我们可以看到结果会多出一个xxx文件夹。
如果需要重新编译 则使用:
1 | java -jar apktool.jar b xxx |
就会在xxx/dist文件夹下看到重新编译的xxx.apk。
我们需要对它进行签名才能使用,此时我们可以在java的目录下面找到一个keytool.exe,用他生成一个keystore文件
1 | keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore |
具体信息自己填就可以了。
最后我们要对apk进行签名,这次用到的是jarsigner.exe,也在java目录下。
1 | jarsigner -verbose -keystore abc.keystore -signedjar signed.apk xxx/dist/xxx.apk abc.keystore |
接下来就是愉快的修改环节了,开始写smali代码……
测试可以使用各种安卓模拟器。
tidbit: VSCode有smali插件
smali语法
方法
1 | .method public static test()V |
(smali高亮一般啊)
使用.method
和.end method
来标识一个方法的开始和结束。
public static test()
和Java中差不多,但是方法的返回值放在了方法参数括号的后面,并且:
V
表示void
I
表示int
Z
表示boolean
B
表示byte
D
表示double
C
表示char
J
表示long
F
表示float
S
表示short
- 其他类使用
L
, 如:Ljava/lang/String
(需要使用全限定名) - 如果是数组,在前面加
[
构造方法举例如下:
1 | .method public constructor <init>()V |
在构造方法中,<init>
代表构造方法,而下面这个是静态方法块:
1 | .method static constructor <clinit>()V |
此外方法中一定要指定locals的数量。
属性获取
1 | .locals 1 |
new-instance
用于创建一个新变量
1 | new-instance v0, L |
invoke-virtual
调用对象的方法
1 | invoke virtual {p1, v0} xxxxx.ClassName->mathodName(ParamType)ReturnValue; |
第一个参数是调用此方法的对象,第二个开始是参数。
.source
.source表示源java文件,但这并不是一个必要的选项,我们可以去掉这一栏。
android.os.AsyncTask
去除广告
从程序入口找广告加载时间?
svg viewbox
大概是在svg上再抽象出一层,让一个固定大小的svg上总是能显示出图像。
Twine
Twine 是一个轻量的数据结构,用于高效率地表达字符串的连接。
Twine 是一种 rope(串接),它使用二叉树表示一个连接的字符串,结果字符串是二叉树节点由前序遍历拼接而成。只有当需要字符串拼接结果的时候,才进行这种拼接到一个最终的 buffer 中,因此可以避免在多个字符串拼接中产生临时的 string 对象,及避免不必要的高消耗的内存分配操作。
没搞定的问题
- N^2的3-sum
- 双调序列查找数字问题
- 线性时间计算inversion数量
- shuffle链表
- 寻找两个已排序数组的第k大元素,在logn时间内完成
3-way-partition
很棒