自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

go|Python的个人博客

技术分享与学习笔记

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

原创 入门C语言基础

c 语法入门

2024-10-11 14:57:30 1107

原创 java中常见的加密

java中常见的加密。

2024-09-23 09:20:33 191

原创 java se 快速入门

Java是一种高级编程语言,由Sun Microsystems公司于1995年推出。Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点,被广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运行,只需编译一次,就可以在任何支持Java虚拟机(JVM)的平台上运行。Java还提供了丰富的库和框架,可以加快开发过程,提高开发效率。java 体系java se:java基础-- 如果做java web方向开发和 安卓开发,这个必学。

2024-09-19 18:35:55 1903

原创 Hook 框架 Frida

Hook 框架是一种技术,用于在运行时拦截和修改应用程序的行为。通过 Hook,你可以劫持应用程序的方法调用、修改参数、篡改返回值等,以达到对应用程序的修改、增强或调试的目的Xposed Framework:Xposed 是一个功能强大的开源 Hook 框架,可以在不修改应用程序源代码的情况下,对应用程序进行各种修改。它允许你编写模块来拦截和修改应用程序的方法调用,修改应用程序的行为和逻辑。Frida:Frida 是一个跨平台的动态 Hook 框架,支持安卓和其他操作系统。

2024-08-30 16:00:25 938

原创 App 抓包与反编译工具

系统证书(System Certificates):系统证书是由 Android 系统或设备制造商预装的证书。用户证书和系统证书在安全和身份验证方面扮演不同的角色。在 Android 系统中,有两种类型的证书:用户证书(User Certificates)和系统证书(System Certificates)。Wireshark:Wireshark 是一个开源的网络抓包工具,可以在多个平台上运行,支持多种协议的抓取和分析。安卓7以上的设备,安装完证书后,是用户证书,需要把用户证书移动到成系统证书,才能抓包。

2024-08-28 15:25:22 912

原创 App 逆向环境准备

刷机根据不同的厂商的手机,有不同的方案,这里推荐使用的手机是google 的 Pixel 系列手机(google出品的手机,没那么多麻烦事)。或者小米的手机,小米手机root 起来会麻烦点,可以找人帮刷,就不一一介绍了。ADB 安装很简单,就是把压缩包解压后,配置环境变量即可。小米 https://xiaomirom.com/补充: 小米刷机完,需要打开root 权限管理,刷机去厂商手机官网下载刷机包。

2024-08-28 15:21:10 349

原创 App 逆向环境准备

刷机根据不同的厂商的手机,有不同的方案,这里推荐使用的手机是google 的 Pixel 系列手机(google出品的手机,没那么多麻烦事)。或者小米的手机,小米手机root 起来会麻烦点,可以找人帮刷,就不一一介绍了。ADB 安装很简单,就是把压缩包解压后,配置环境变量即可。小米 https://xiaomirom.com/补充: 小米刷机完,需要打开root 权限管理,刷机去厂商手机官网下载刷机包。

2024-08-27 10:40:54 332

原创 JS逆向高阶补充

eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。Hook函数在 JS 逆向中,我们通常把替换原函数的过程都称为 Hook。案例1: Hook eval案例2: Hook JSON.stringifyJSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串,在某些站点的加密过程中可能会遇

2024-08-16 16:21:06 1167

原创 基于 pymysql 和 DBUtils 实现mysql连接池

备个份,用在celery 定时任务中,未使用orm框架的情况下,使用原生sql去操作mysql 的方案。

2024-07-26 11:23:10 238

原创 摘要&加密算法

MD5是一个非常常见的摘要(hash)逻辑. 其特点就是小巧. 速度快. 极难被破解. 所以, md5依然是国内非常多的互联网公司选择的密码摘要算法.这玩意不可逆. 所以. 摘要算法就不是一个加密逻辑.相同的内容计算出来的摘要是一样的不同的内容(哪怕是一丢丢丢丢丢不一样) 计算出来的结果差别非常大在数学上. 摘要其实计算逻辑就是hash.hash(数据) => 数字1 . 密码 2 . 一致性检测。

2024-07-11 09:55:38 946

原创 centos 7.9 离线环境安装GPU服务环境

直接 执行 localinstall 命令,可能会出现依赖问题报错,可以在本地搭建yum 仓库,把rpm 包都扔到仓库里面再执行 yum install 命令(缺基础环境时,可以吧centos 的iso 镜像挂载到服务器上作为yum仓库)我这里使用的 gcc9 的包,里面是携带好了依赖包的,可以通过解压后直接执行(上面的地址需要自己处理依赖包,缺啥下啥就行)更新内核需要先卸载内核,但是卸载完内核后,若未安装新的内核,重启服务器,那么就重装系统吧。安装完后,找一个gpu镜像,执行。

2024-06-30 23:36:04 1643

原创 Base64 编码详解

比如十进制ASCII码8对应的是后退符号(backspace), 如果被编码的数据中包含这个数值,那么编码出来的结果在很多编程语言里会导致前一个字符被删掉。设计的,当你使用其传输二进制流时(比如视频/图片),二进制流中的数据可能会被协议错误的识别为控制字符等等,因而出现错误。注意, b64处理后的字符串长度. 一定是4的倍数. 如果在网页上看到有些密文的b64长度不是4的倍数. 会报错。早年制定的一些协议都是只支持文本设定的。用Base64编码因为限定了用于编码的字符集,确保编码的结果可打印且无歧义。

2024-06-14 14:44:18 3701

原创 K8s Ingress 详解

在 Ingress 中引入 Secret 资源,然后告诉 Ingress 控制器使用 TLS 加密从客户端到负载均衡器的通道。上面基于URL实现路由方案中,就应用到了 ingress rewrite 方案,下面示例插入自定义的 Nginx 配置。Ingress 灰度发布就是通过两套ingress 配置同一个域名,来实现。注: 同一域名,不同的URL调度到不同的 Service。基于Request Header的流量切分。基于Cookie的流量切分。基于服务权重的流量切分。

2024-05-31 15:59:36 1044

原创 K8s service 底层逻辑

iptables中的四表五链1. 四个表具备某种功能的集合叫做表。filter: 负责做过滤功能呢nat: 网络地址转换mangle: 负责修改数据包内容raw: 负责数据包跟踪2. 五个链在什么位置执行,能把表放在某个地方执行1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle。

2024-05-29 14:11:37 879 1

原创 K8s service 进阶

service通过selector和pod建立关联,K8s会根据service关联到的pOdIP信息组合成一个endpoint。若service定义中没有selector字段,service被创建时,endpoint controller不会自动创建endpoint。我们可以通过配置清单创建Service,而无需使用标签选择器,而后自行创建一个同名的endpoint对象,指定对应的IP。

2024-05-28 15:10:18 1724

原创 K8s deployment 进阶

默认情况下,deployment 的所有上线记录都保存在系统中,以便随时回滚。滚动更新 (RoILingupdate),一次仅更新一批Pod,当更新的Pod就绪后,在更新另一批,直到全部更新完成为止;重建 (Recreate),当更新策略设定为 Recreate,在更新镜像时,它会先杀死正在运行的Pod,等彻底杀死后,重新创建新的RS,然后启动对应的Pod,那么在这个更新过程中,会造成服务一段时问无法提供服务;使用灰度发布的模式,可以及时发现问题,调整问题,以减少影响的速度,保证整体系统的稳定运行。

2024-05-24 15:10:37 573

原创 K8s Pod 资源进阶

如果系统中没有BestEffort类别的容器,接下来就轮到BUrstable类别的容器,如果有多个Burstable类别的容器,就看谁的内存资源占用多,就优先干掉谁。DownwardAPI可以让容器获取Pod的相关元数据信息,比如Pod名称,Pod的IP,Pod的资源限制等,获取后通过env、volume的方式将相关的环境信息注入到容器中,从而让容器通 过这些信息,来设定容器的运行特性。k8s 不允许设置精度小于1m 的CPU 资源。容器的用量少,但与自身的Requests值相比,它的占比要大于B容器。

2024-05-23 20:04:59 1210

原创 K8s 部署prometheus

可以通过添加storageClass 配置来实现 prometheus-prometheus.yaml 文件中的配置来实现持久化。kube-prometheus 是 github 上开源的整合了 prometheus alertmanager granfana 等监控工具的项目,除此之外,还可以选择修改 prometheus、alertmanager、grafana 中的 spec.type 为 NodePort 方便测试访问。默认的镜像基本上都是国外的源,国内访问不到,需要替换一下镜像id。

2024-05-21 19:47:59 773

原创 Helm 包管理器

注: helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上, 否则 helm 将不可用。helm 是 Kubernetes 包管理器(类似于yum apt-get brew 这些工具)Helm 管理名为 chart 的 Kubernetes 包的工具。提供执行所有 Helm 操作的逻辑。Helm 是查找、分享和使用软件构件 Kubernetes 的最优方式。独立的 Helm 库封装了 Helm 逻辑以便不同的客户端可以使用它。

2024-05-21 10:15:54 589

原创 K8s 身份认证和权限

服务账号与用户账号不同,用户账号是集群中通过了身份认证的人类用户。Service Account Controller 在 namespaces 里管理ServiceAccount,并确保每个有效的 namespaces 中都存在一个名为 “default” 的 ServiceAccount。普通账户是假定被外部或独立服务管理的,由管理员分配 keys,用户像使用 Keystone 或 google 账号一样,被存储在包含 usernames 和 passwords 的 list 的文件里。

2024-05-17 14:10:47 851

原创 K8s 高级调度

默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,我们想控制某些Pod到达某些节点上,就要求了解kubernetes对Pod的调度规则,kubernetes提供了四大类调度方式:**自动调度:**运行在哪个节点上完全由Scheduler经过一系列的算法计算得出**定向调度:**NodeName、NodeSelector。

2024-05-16 18:17:16 360

原创 k8s 存储管理

EmptyDir 主要用于一个 Pod 中不同的 Container 共享数据使用的,由于只是在 Pod 内部使用,因此与其他 volume 比较大的区别是,当 Pod 如果被删除了,那么 emptyDir 也会被删除。k8s 中提供了一套自动创建 PV 的机制,就是基于 StorageClass 进行的,通过 StorageClass 可以实现仅仅配置 PVC,然后交由 StorageClass 根据 PVC 的需求动态创建 PV。只有PV的存储空间完成回收,才能供新的PVC绑定和使用。

2024-05-15 17:20:01 1015

原创 k8s 配置管理

由于 configmap 我们创建通常都是基于文件创建,并不会编写 yaml 配置文件,因此修改时我们也是直接修改配置文件,而 replace 是没有 --from-file 参数的,因此无法实现基于源配置文件的替换,此时我们可以利用下方的命令实现。对于 subPath 的方式,我们可以取消 subPath 的使用,将配置文件挂载到一个不存在的目录,避免目录的覆盖,然后再利用软连接的形式,将该文件链接到目标位置。需要先创建 configmap 直接用上述命令创建或者通过yaml文件都行。

2024-05-13 15:52:50 551

原创 加密与CA证书

如此一来,解决了 动态对称秘钥 和 数据加密的问题,因为每个用户的对称秘钥都是随机生成且传输的过程中都使用公钥加密(公钥加密的数据只有私钥能解密),所有黑客无法截获对称秘钥。,这么干还是又bug:如果黑客在上图 【步骤2】劫持,黑客把自己的公钥返回给客客户端,那么客户端会使用黑客的公钥来加密对称秘钥,黑客在【步骤6】截获请求,使用自己的私钥获取对称秘钥,后面过程全都会完蛋…如此一来,就解决了黑客劫持的问题,因为即使黑客劫持后的给浏览器即使返回了证书也无法通过校验,同时浏览器也会提示错误信息。

2024-05-12 13:02:37 990

原创 Playwright

Playwright 是一个用于自动化浏览器操作的开源工具,由 Microsoft 开发和维护。它支持多种浏览器(包括 Chromium、Firefox 和 WebKit)和多种编程语言(如 Python、JavaScript 和 C#),可以用于测试、爬虫、自动化任务等场景。多浏览器支持:支持所有主流浏览器。这使得开发人员可以根据需求选择最适合的浏览器进行自动化操作。(Playwright不支持旧版Microsoft Edge或IE11)

2024-05-08 20:10:26 1167

原创 Service 和 Ingress

Yaml 文件案例metadata:labels:app: nginx-svc # service 自己的标签spec:ports:- name: http # service 端口配置的名称protocol: TCP # 端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCPport: 1080 # service 自己的端口targetPort: 80 # 目标 pod 的端口type: NodePort # 默认是ClusterIP 类型,只能在集群内部使用。

2024-05-08 19:47:50 1990

原创 k8s-pod 控制器

如果实际 Pod 数量比指定的多那就结束掉多余的,如果实际数量比指定的少就新启动一些Pod,当 Pod 失败、被删除或者挂掉后,RC 都会去自动创建新的 Pod 来保证副本数量,所以即使只有一个 Pod,我们也应该使用 RC 来管理我们的 Pod。label 与 selector 配合,可以实现对象的“关联”,“Pod 控制器” 与 Pod 是相关联的 —— “Pod 控制器”依赖于 Pod,可以给 Pod 设置 label,然后给“控制器”设置对应的 selector,这就实现了对象的关联。

2024-04-24 14:02:06 960 2

原创 k8s-Pod

但是需要注意,由于 k8s 默认给 pod 的停止宽限时间为 30s,如果我们停止操作会超过 30s 时,不要光设置 sleep 50,还要将 terminationGracePeriodSeconds: 30 也更新成更长的时间,否则 k8s 最多只会在这个时间的基础上再宽限几秒,不会真正等待 50s。探针是容器内应用的监测机制,根据不同的探针来判断容器应用当前的状态,根据生命周期图可以看出探针目前存在三种类型。可以在根容器上设置Ip地址,其它容器都此Ip(Pod IP),以实现Pod内部的网路通信。

2024-04-11 14:19:35 1114

原创 K8s 命令行工具

默认,是只能在master 节点上使用kubectl 工具,如果想要在 slave 节点上使用,在master 节点上执行下述命令即可。在搭建集群的时候,我们通过yum 下载了kubeadm kubelet kubectl 三个命令行工具,三个工具有着不同的分工。上述介绍,可以看出,三个工具不同的分工,而我们在日常中,需要接触到最多的就是 kubectl 工具。kubectl 工具能够操作资源细分如下, 这里只介绍常用命令,全部命令参考。

2024-04-10 15:30:20 1164

原创 Kubernetes 入门

等功能,相比于其他容器编排工具,如 swarm 、 mesos ,优势在于,能够基于 Google 庞大的生态圈及社区产生的产品。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。Master节点主要负责集群的管理和控制功能,如调度、API服务、存储集群状态等。kubelet:运行在每运行在每个节点上的主要的“节点代理”个节点上的主要的“节点代理”

2024-04-08 10:58:18 987

原创 linux 一些命令[下]

若指定⽤户名称,便会以⾪属该⽤户的第⼀个程序当作基层,然后显示该⽤户的所有程序。ps命令是最基本同时也是⾮常强⼤的进程查看命令,使⽤该命令可以确定有哪些进程正在运⾏和运⾏的状态、进程是否结束、进程有没有僵死、哪些进程占⽤了过多的资源等等,总之⼤部分信息都是可以通过执⾏该命令得到的。init是Linux的进程初始化⼯具,是所有Linux进程的⽗进程,进程ID号是1。pkill命令可以通过进程名终⽌指定的进程,对⽐killall杀死进程可能要执⾏多次,pkill可以杀死进程以及⼦进程。

2024-04-02 14:40:56 497

原创 linux 一些命令[上]

raid 技术,能够提供硬盘的读写效率,已经数据的安全性,但当配置好后,容量的大小,都被限制住了,如果存储的业务非常多,磁盘容量不够用就会出问题,并且raid 的磁盘扩容非常麻烦,并且只能冷扩容。优点:lvm 的文件系统可以跨多个磁盘,分区大小不受磁盘容量限制 可以在系统运行中,直接动态扩容文件系统大小 可以直接增加新的硬盘,到lvm的vg卷组中。硬盘的多个分区,由lvm统一进行管理为卷组,可以弹性的调整卷组的大小,加入新硬盘,可以充分的利用磁盘容量。不同的磁盘分区,相对都是独立的。

2024-03-31 17:59:08 1366

原创 asyncio和 aiohttp

爬虫最重要的模块requests,但它是阻塞式的发起请求,每次请求发起后需阻塞等待其返回响应,不能做其他的事情。本文要介绍的aiohttp可以理解成是和requests对应Python异步网络请求库,它是基于 asyncio 的异步模块,可用于实现异步爬虫,有点就是更快于 requests 的同步爬虫。通过这个案例,可以看到一个问题,那就是 aiohttp的使用,每次都需要写一堆重复代码,并且整个代码结构看起来复杂,作为一个高级开发,必须要会做的就是减少代码重复编写,要将其模块化,封装起来。

2024-03-28 22:48:17 677

原创 Mysql 表设计范式

第一范式(1NF):确保表的每一列都是不可分割的原子项。这通常意味着需要将包含多个数据项的字段拆分为单独的表,并通过关系连接这些表。第二范式(2NF):在第一范式的基础上,确保表中的非主键列完全依赖于主键。如果存在部分依赖,则需要进一步拆分表。第三范式(3NF):在第二范式的基础上,消除表中的传递依赖。这意味着非主键列之间不应该存在依赖关系,而是应该通过主键与其他表关联。通过遵循这些范式,我们可以创建结构清晰、冗余少的数据库表,从而提高数据库的性能和可维护性。

2024-03-17 17:20:03 1018

原创 如何优化查询ORM

N+1查询问题是指当你查询一个对象集合时,对于集合中的每个对象,又单独发起了一个数据库查询来获取其关联对象。具体优化策略取决于你的应用、数据库结构和查询模式。如果查询的数据不经常变动,并且查询很频繁,可以考虑使用查询缓存来存储结果。使用数据库的性能监控工具来跟踪和分析查询的性能,找出性能瓶颈并进行优化。确保数据库中用于查询的字段都有适当的索引。使用ORM提供的关联查询方法来减少查询的复杂度。,避免在遍历用户时单独查询每个用户的帖子。来选择所有字段,只选择你真正需要的字段。使用子查询来优化关联查询。

2024-03-17 10:44:22 406

原创 MVC、MVP、MVVM区别

并不是简单的把Controller 替换成了 Presenter, 而是将View 完全独立处理,仅负责视图相关操作,处理请求进来的数据已经返回处理好的数据, 避免在View 有过多的逻辑处理,而Presenter 则专心复杂和 Model 进行数据获取相关逻辑。相对于传统的MVC架构模式,MVVM更加强调View和Model之间的松散耦合,通过ViewModel进行数据绑定和业务逻辑处理,使得开发人员可以更加专注于业务逻辑和数据的开发,而设计人员可以更加专注于页面设计。数据与模型的双向绑定。

2023-11-06 15:09:03 470

原创 python walrus操作符

walrus操作符 作为一个新特性,目前看来,个人感觉用处不算多,虽然能少量减少代码量,但是不建议过度使用,用来尝鲜还不错。它可以在表达式中同时进行赋值和比较操作,可以使代码更加简洁和易读。需要注意的是,Walrus 操作符虽然方便,但是过度使用会导致代码难以理解和维护,因此需要谨慎使用。在 while 循环中,可以使用 Walrus 操作符来避免重复计算。在列表推导式中,可以使用 Walrus 操作符来避免重复计算。在条件表达式中,可以使用 Walrus 操作符来避免重复计算。变量,并在同一行中检查。

2023-10-30 11:35:34 217

原创 dataclasses 包

使用@dataclass装饰器可以将一个普通的类定义为一个数据类。@dataclassname: strage: intcity: str = "New York" # 默认值为 "New York"nameage和city。其中,city属性的默认值为 “New York”。@dataclassname: strage: intorder: int = field(default=0) # 添加一个用于排序的字段# 创建一些实例# 使用自定义排序规则进行排序。

2023-08-31 15:27:49 355

原创 flask-smorest 库

flask-smorest: 基于Flask/Marshmallow的REST API框架flask-smorest 是一个用于创建于数据库无关的REST API的架库。它使用Flask作为Web服务器,并使用marsmallow对数据进行序列化和反序列化。(类似于drf)

2023-08-30 18:00:29 1497

原创 docker swarm 部署服务网络问题

docker swarm 部署服务时可能会出现,启动服务特别慢的情况,甚至一个service 启动后,容器会长时间处于 preparing 状态,直到 状态切换成 running 状态后,才会启动下一个service。然后查询资料发现如果您发现容器在一段时间后仍然停留在Preparing状态,可能是由于多种因素导致的。

2023-08-23 10:21:18 1797

空空如也

空空如也

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

TA关注的人

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