python线程池使用示例
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455# coding=utf-8import timeimport loggingfrom multiprocessing import Poollogging.basicConfig( level=logging.INFO, format="%(asctime)s [*] %(processName)s %(message)s")def add_test(i): time.sleep(1) return i * idef add(x, y): time.sleep(1) return x + ydef add_wrap(args): return add(*args)def callback(res): logging.info(f"-----res={res}")if __name ...
如何动态给springboot项目传参
问题是这样的
在项目开发中,我们往往需要配置多套不同的配置环境例如:本地开发、测试环境、部署环境。每一个环境的数据源配置可能都不同,因此需要写不同的数据源配置。
针对这种情况,如果使用了配置中心,那么可以通过配置中心来切换不同环境的配置。如果没有使用配置中心,那么我们就需要通过应用启动命令或者启动脚本设置不同环境的参数,以达到满足不同环境配置的需求。
此文的目的是对以前工作中用到的脚本做个记录,方便后续有所需要的时候,直接套用。
preboot.sh脚本
我们都知道SpringBoot可以通过java $JAVA_OPT -jar test.jar --spring.active=dev 来切换不同的配置。java -jar命令本来是可以通过-Dkey=value的形式配置key=value键值对的,但在springboot中,可以通过--key=value来配置键值对。
其中$JVM_OPS是JVM配置项,默认可以不写,但是一般情况下,对GC的优化,内存的分配、堆栈的大小限制等需要进行设置。
下面这段脚本配置了应用扩展参数和JVM的扩展参数,需要在应用启动脚本之前执行。执行后在当 ...
清除照片的EXIF信息
可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。
Exif最初由日本电子工业发展协会在1996年制定,版本为1.0。1998年,升级到2.1,增加了对音频文件的支持。2002年3月,发表了2.2版。
我们用手机或者相机拍照的时候,会把我们拍照的日期、相机制造商、图像方向等信息存储到exif中,这种信息对于常人来说没多大的用处,但是对于黑客来说,用处极大。曾经有人通过某明星发的微博照片,根据照片中的图像信息、光照投影等定位到其住在北京的小区楼层。
下面代码,可以批量删除照片的EXIF信息。
12345678910111213141516171819202122232425262728293031323334353637# _*_ coding:utf-8 _*_from PIL import Imageimport piexifimport osimport timedef clear_exif(path): start = time.time() ...
jsdelivr cdn不能访问的替换方案
事情是这样的
最近一段时间,博客使用的cdn.jsdelivr.net域名在国内无法访问了,找了几种替换方案。butterfly主题的event/config.js中有默认配置,主题配置文件_config.butterfly.yaml中有配置项,可以修改默认配置。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364# CDN# Don't modify the following settings unless you know how they work# 非必要請不要修改CDN: # The CDN provider of internal scripts (主題內部 js 的 cdn 配置) # option: local/jsdelivr # Dev version cannot choose jsdelivr (dev版的主題不能設置為 jsdelivr) internal ...
CentOS部署分布式对象存储服务MinIO
MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。 它是与 Amazon S3 云存储服务兼容的 API。 使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。
0x00 单机部署
使用以下命令在运行 64 位 Intel/AMD 架构的 Linux 主机上运行独立的 MinIO 服务器。将 /data替换为您希望 MinIO 存储数据的驱动器或目录的路径。
123wget https://dl.minio.org.cn/server/minio/release/linux-amd64/miniochmod +x minio./minio server /data --console-address:10000
将/data替换为您希望 MinIO 存储数据的驱动器或目录的路径。
下表列出了支持的架构。 将 wget URL 替换为您的 Linux 主机的架构。
架构
下载地址
64-bit Intel/AMD
https://dl.minio.org.cn/server/minio/releas ...
fastjson autoType漏洞解决方案
0x00 漏洞概述
漏洞等级
高危
漏洞编号
暂无
CVSS评级
暂无
公开状态
暂无
在野利用
暂无
披露链接
https://github.com/alibaba/fastjson/wiki/security_update_20220523
更新时间
20220523
影响版本
Fastjson ≤ 1.2.80
解决方案
当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下: https://github.com/alibaba/fastjson/releases
安全版本
FastJSON 1.2.83
0x01 漏洞详情
漏洞信息
近日,安全部捕获 Fastjson1.2.80 反序列化漏洞情报,攻击者可以利用该漏洞攻击远程服务器, 可能会造成任意命令执行。Fastjson已使用黑白名单用于防御反序列化漏洞,该利用在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大。在默认配置下,当应用或系统使用Fastjson对由用户可控的JSON字符串进行解析时,将可能导致远程代码执行的危害 ...
hexo的butterfly主题添加Google Adsense后审核失败
出现问题
已在hexo的butterfly主题配置文件中添加google adsense的客户号,但是adsense审核提示失败,如何解决?
hexo的配置:
1234567# Google Adsense (谷歌廣告)google_adsense: enable: true auto_ads: true js: https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js client: ca-pub-1711515749423877 enable_page_level_ads: true
通过查看页面元素发现,静态页面中已经生成了adsense的代码:
1234<script async="async" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><script>(adsbygoogle = window.adsbygoo ...
通过一级域名访问网站
部署应用,如果需要对外提供域名访问,少不了配置域名解析。一般,域名从哪个服务商卖就从哪里解析,当然也支持其他DNS解析服务,国内大厂都有自己的域名服务和DNS解析服务。
如题,通过一级域名访问网站的问题,也就是如何通过带www访问网站和不带www访问网站的问题。此处我们需要区分两种情况,一种是有公网ip,一种是没有公网ip,只有cname。
如果我们有自己的服务公网ip地址,我们通过A记录,设置域名解析,假如我们的公网ip为:49.10.12.11。
主机记录
记录类型
记录值
说明
www
A
49.10.12.11
A记录值可以相同,可以出现多个A记录,www表示子域名www可以访问
@
A
49.10.12.11
表示一级域名可以访问
如上两条配置,则可以通过带www和不带www都能访问到服务。这是对于有服务器和公网ip的域名配置而言,如果我们就部署了一个静态博客,托管在三方的服务器上,我们肯定不能添加三方的ip,只能通过三方提供的cname做解析。
主机记录
记录类型
记录值
说明
www
CNAME
cname1
CNAME不允许出现两 ...
记录HttpClient连接池的优化
事情的经过是这样的
公司绝大多数应用都是springboot+tomcat提供web接口的服务,彼此之间使用httpclient调用,一直以来大家相安无事。直到决策引擎将Tomcat替换为netty,秀了一把webflux开始,我们的服务在空闲的时候就出现Connection Reset的问题。
连接池
我们常说的http连接是依托TCP而建立的。HTTP是应用层协议,TCP是传输层协议。TCP就是单纯的建立连接、传输数据。HTTP建立连接是非常繁琐和耗性能的,需要经过TCP的三次挥手和四次握手,如果对于同一个请求地址能省去这个过程,对服务性能将是极大的提升。
为了解决上面这个问题,http1.1中增加了kepp-alive来保证我们每次http请求的时候,不用重新建立连接。为了提升系统的性能,我们采用池化技术。对象池通过复用对象来减少的创建、垃圾回收的开销。连接池通过复用TCP的连接来减少创建和释放连接的时间。线程池通过复用线程来提高系统的并发能力。
连接池一般对外提供获得连接、归还连接的接口给客户端使用,并暴露最小空闲连接数、最大连接数等可配置参数,在内部则实现连接建立、连接心跳保 ...
Zookeeper客户端Curator的事件监听详解
0x00 Curator 事件监听
Curator 事件有两种模式,一种是标准的观察模式,一种是缓存监听模式。标准的监听模式是使用Watcher监听器。缓存监听模式引入了一种本地缓存视图的Cache机制,来实现对Zookeeper服务端事件监听。
Cache事件监听可以理解为一个本地缓存视图与远程Zookeeper视图的对比过程。Cache提供了反复注册的功能。Cache是一种缓存机制,可以借助Cache实现监听。简单来说,Cache在客户端缓存了znode的各种状态,当感知到zk集群的znode状态变化,会触发event事件,注册的监听器会处理这些事件。
Watcher监听器比较简单,只有一种。Cache 事件监听的种类有3种Path Cache,Node Cache,Tree Cache。
0x01 Watcher 标准的事件处理器
在ZooKeeper中,接口类Watcher用于表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型。
Watcher接口定义了事件的回调方法:process(Wa ...