【碎片化知识总结】三月第一周
目录
前言
1、开发中常用的 IDEA 编辑器,如何做到不用每次都重新配置?
2、如何使用 Python 获取视频文件信息?
3、使用 Java 的 try-with-resources 优化代码
4、使用 shell 脚本批量修改服务器某一目录下的文件后缀名称
5、MySQL优化:使用varchar替代char
6、如何升级 ES-7.8.0 的 log4j 版本?
7、spring 自带定时任务的使用
8、Windows 系统如何自定义命令?
9、解决http请求报401,invalid token问题
10、Redis 键过期问题
前言
由于最近比较忙,没有多少时间去写专题的博文,而且在平时工作和学习中,也会产生不少的碎片化知识点或问题。基于目前这些情况,经过一番思考,自己就计划每周进行一次总结梳理,并以博文的形式记录下来,希望提升技术的同时也保持写作能力吧~
目前自己是以 Java 为主的,并且工作需要会使用到许多的流行框架,中间件及工具。另外,自己也对 Python 和其他脚本语言感兴趣,这样的话涉及的技术栈看起来就比较广泛了,就很容易产生多而不精的问题。因此,通过每周的一次碎片化知识总结和梳理,逐步构建起属于自己的知识体系,也可以温故而知新。
那就从三月份开始吧,将平时只躺在笔记里的知识点利用起来!
1、开发中常用的 IDEA 编辑器,如何做到不用每次都重新配置?
工作中可能会遇到 IDEA 需要卸载重装,或者换电脑了去安装 IDEA 等情况,而每次安装 IDEA 就意味着需要重新去做一些配置,比如:设置快捷键、定义字体等格式、设置 maven 仓库位置等。有没有什么方法不用重新配置呢?当然有。
如果自己习惯了以前使用的 IDEA 编辑器设置,此时将之前的设置导出,然后再导入新的 IDEA 就可以避免重新配置 IDEA 的情况,具体操作如下:
<1>. 原 IDEA 编辑器,打开一个项目 => File => Manage IDE Settings => Export Settings...
<2>. 根据需求勾选导出的选项,选择导出路径等,默认为settings.zip文件,如下:
<3>. 重新安装 IDEA 后,选择通过 IDEA 刚开始界面导入settings.zip,也可以先打开某个项目再导入settings.zip。
- 打开idea => Customize => Import Settings => 选择settings.zip。
- 打开idea => 打开项目 => File => Manage IDE Settings => Import Settings => 选择settings.zip。
由此,就可以继续保持之前 IDEA 的设置了。
2、如何使用 Python 获取视频文件信息?
Python 作为一门强大的解释性编程语言,离不开第三方模块的支持。通过 Python 获取视频文件信息,比如视频大小,fps,时长等,需要引入第三方模块 moviepy。
获取视频属性,演示如下:
import os
from moviepy import editorvideo_clip = editor.VideoFileClip(r"超级奶爸.mp4")# 获取宽度和高度
print(video_clip.size)
print(video_clip.w, video_clip.h)# 获取 fps
print(video_clip.fps)# 获取时长,单位是秒
print(video_clip.duration)# 获取大小
size = os.stat(r"超级奶爸.mp4").st_size
print(size)
print(size / 1024 ** 2)
此外,该三方模块还可用于一些像剪切,拼接,插入标题等基本操作、视频合成、视频处理、创建高级特效等,如果感兴趣的话,可以通过 moviepy · PyPI 进行深入了解。
3、使用 Java 的 try-with-resources 优化代码
try-with-resource 是 Java7 引入的异常处理机制,相比于 try-catch-finally 语句而言,有以下优点:
- try-with-resource 声明要求其中定义的变量实现 AutoCloseable 接口,这样系统可自动调用它们的 close 方法,从而替代了 finally 中关闭资源的功能。
- try-with-resource 不会屏蔽原始异常信息,而 try-catch-finally 的话,如果在 finally 语句抛了异常则会淹没掉 try 语句的原始异常信息。
- try-with-resource 代码书写起来更加简洁了,非常推荐!
下面通过实现一个简单的文件复制功能,感受下优化效果。
使用 try-catch-finally:
public static void copy1(String src, String dst) {InputStream in = null;OutputStream out = null;try {in = new FileInputStream(src);out = new FileOutputStream(dst);byte[] buff = new byte[1024];int n;while ((n = in.read(buff)) >= 0) {out.write(buff, 0, n);}} catch (IOException e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}if (out != null) {try {out.close();} catch (IOException e) {e.printStackTrace();}}}
}
使用 try-with-resource:
public static void copy2(String src, String dst) {try (InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(dst)) {byte[] buff = new byte[1024];int n;while ((n = in.read(buff)) >= 0) {out.write(buff, 0, n);}} catch (IOException e) {e.printStackTrace();}
}
感受两种方式的代码,一目了然,使用 try-with-resources 会觉得整个世界清爽多了!!
4、使用 shell 脚本批量修改服务器某一目录下的文件后缀名称
如题描述,实现步骤如下:
<1>. 使用 touch 命令创建一个脚本文件,比如 rename.sh,放在批量修改文件后缀的目录下。
<2>. 使用 vi/vim 命令编辑该脚本:
#!/bin/bashfor i in $(find . -name "*.$1")
doname=$(echo $i | awk -F ".$1" '{print $1}');mv $i $name.$2;
done
<3>. 保存并退出后,赋予执行权限:chmod +x rename.sh。
<4>. 执行脚本,比如把 .txt 改成 .aaa:
./rename.sh txt aaa
5、MySQL优化:使用varchar替代char
有时候设计 MySQL 数据库表的字段类型时,需要考虑的东西有很多,就比如字符串类型的字段,为什么大多数场景下都使用varchar类型呢?
首先,了解下二者的区别:char 是按声明大小存储,不足时补空格,而 varchar 是按数据实际长度存储。这样的话,在节约存储空间方面 varchar 明显优于 char 。其实,到底该使用 varchar 还是 char ?是需要区分场景的!
对于经常被修改的字段,且每次修改的长度都不一样,如果定义成 varchar 类型的话,容易引起"行迁移"现象,这种现象是需要避免发生的!
正常情况下,字段都需要定义成 varchar 类型,如果定义 char 类型的话,由于插入数据时不足会补充空格,而查询操作则需要额外去除掉这些空格才行,不仅浪费存储空间,操作也比较麻烦!
6、如何升级 ES-7.8.0 的 log4j 版本?
背景:因为之前 log4j 出现了严重的漏洞,最近工作中需要排查并替换掉 ES 的 log4j 版本。
操作步骤,如下:
<1>. 升级 jar 包准备,可去 apache 官网下载对应版本。
<2>. 先终止服务器上的 ES 服务,kill -9 进程号。
<3>. 使用 find 命令,查找 ES 安装目录下存在的 log4 j的 jar 包:
[xxw@123456 es]$ find ./elasticsearch-7.8.0/ -name 'log4j*.jar'
./elasticsearch-7.8.0/modules/x-pack-identity-provider/log4j-slf4j-impl-2.11.1.jar
./elasticsearch-7.8.0/modules/x-pack-security/log4j-slf4j-impl-2.11.1.jar
./elasticsearch-7.8.0/modules/x-pack-core/log4j-1.2-api-2.11.1.jar
./elasticsearch-7.8.0/lib/log4j-core-2.11.1.jar
./elasticsearch-7.8.0/lib/log4j-api-2.11.1.jar
<4>. 移动这些jar包到临时的备份目录(出现意外时可回滚这些文件)。
<5>. 将新jar包对应替换:
cp log4j-slf4j-impl-2.17.1.jar ./elasticsearch-7.8.0/modules/x-pack-identity-provider/
cp log4j-slf4j-impl-2.17.1.jar ./elasticsearch-7.8.0/modules/x-pack-security/
cp log4j-1.2-api-2.17.1.jar ./elasticsearch-7.8.0/modules/x-pack-core/
cp log4j-core-2.17.1.jar ./elasticsearch-7.8.0/lib/
cp log4j-api-2.17.1.jar ./elasticsearch-7.8.0/lib/
<6>. 替换之后,使用 find 命令确认是否替换完成:
[xxw@123456 es]$ find ./elasticsearch-7.8.0/ -name 'log4j*.jar'
./elasticsearch-7.8.0/modules/x-pack-identity-provider/log4j-slf4j-impl-2.17.1.jar
./elasticsearch-7.8.0/modules/x-pack-security/log4j-slf4j-impl-2.17.1.jar
./elasticsearch-7.8.0/modules/x-pack-core/log4j-1.2-api-2.17.1.jar
./elasticsearch-7.8.0/lib/log4j-core-2.17.1.jar
./elasticsearch-7.8.0/lib/log4j-api-2.17.1.jar
<7>. 重启 ES 服务,并进行验证 ES 服务是否正常运行。
启动方式有以下2种:
- 窗口启动:./elasticsearch-7.8.0/bin/elasticsearch
- 后台启动:./elasticsearch-7.8.0/bin/elasticsearch -d
查看进程验证:jps 或 ps -ef|grep elasticsearch
发送请求验证:curl http://宿主机IP:配置端口号/
7、spring 自带定时任务的使用
背景:项目使用的是 springboot,需要用到定时任务去执行某项重复操作。由于这个操作的需求简单,没必要引入 xxl-job 中间件(主要是考虑中间件的部署和维护成本高),于是就采用 spring 框架自带的定时任务实现。做法也很简单,主要有两步。
第一步,自定义 Job 类和 task 方法,演示如下:
@Component
@Slf4j
public class OpearJob {/*** 定时任务,每10分钟执行一次*/@Scheduled(cron = "0 0/10 * * * ?")public void processDataTask() {log.info("OpearJob.processDataTask() | 当前Job执行时间:{}", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));// 执行逻辑......}
}
第二步,在启动类添加注解 @EnableScheduling。
8、Windows 系统如何自定义命令?
Windows 是平时办公中经常会使用的操作系统,通过 win + r 快捷键出现的弹框里输入 cmd 命令,就可以召唤出黑窗口。
按照这种方式,是否也可以把桌面上一大堆的应用程序快捷键给干掉,然后通过自定义的命令召唤并打开对应的应用程序呢?当然可以了,只不过要进行一些设置。
<1>. 在任意磁盘分区下新建文件,可命名为 shortcut,这里我选择的是F盘。
<2>. 将文件或软件的快捷方式移动到 shortcut 文件夹下,并改个好记的名字(如微信:wx)。
<3>. 打开高级系统设置-环境变量设置,在系统变量的 Path 下添加 shortcut 路径(本人的是F:\shortcut\)。
<4>. 设置完成后,win+r,如键入wx即可打开微信应用程序了。
通过这一通操作,Windows 桌面就干净多了,程序员应该如此嘛,哈哈哈~~
9、解决http请求报401,invalid token问题
背景:之前使用 postman 调用请求接口一直都是正常的,某天请求时突然出现了 401 结果码,看上去是 token 失效了?然而这个项目并不会使用到 token,首次遇到这种情况就感到很疑惑!
{"code": "401","msg": "invalid token"
}
当时这个问题困扰我了一天多,最终被排查到原因并得以解决。
第一阶段,问度娘。度娘上虽然都是描述 token 失效问题,但大家遇到的情况和我的完全不一样,刚开始尝试了其中的一些方法,均不奏效!!
第二阶段,静下来思考 token 的可能来源。其实,token 是一串服务器返回的随机字符串,用于访问服务器的身份令牌,如果接口请求中携带的 token 过期,则阻止用户访问没有登录的页面。
当前项目的接口请求并不会携带 token,那么这个 token 会不会是某个 jar 包里带进来的呢,为了验证这个想法,需要对项目引入的 jar 包做下排查,排查关键字有 token、auth、shiro 等,确实发现了几个可疑 jar 包,如下:
接着,尝试排除掉这些 jia 包,我通过 IDEA 下载了 maven helper 插件,通过依赖树可找到这些 jar 包,如下:
右键选择 "Exclude",就可以在 pom.xml 排除相关的 jar 包了,如下:
排除 jar 包后,重新编译和启动项目,发送请求就正常了,如下:
就此原因就找到了,是因为引入的工具包里包含了验证 token 的 jar 包!!!
10、Redis 键过期问题
这一部分会涉及到,如何设置、查询、删除过期键等基本操作?过期键删除策略有哪些及 Redis 使用何种策略?持久化功能和复制功能中是如何处理键过期问题的?Redis 未通过 过期键删除策略 删除过期键有可能导致内存满的问题,该怎么解决呢?
10.1 设置、查询、取消过期键
命令如下:
// 设置键在指定时间 秒数 或 毫秒数 之后到期/过期
SET key value ex seconds
EXPIRE key seconds
PEXPIRE key milliseconds
// 设置在指定 时间戳(Unix时间戳格式) 之后键到期/过期
EXPIREAT key seconds-timestamp
PEXPIREAT key milliseconds-timestamp
// 获取键的剩余到期时间(秒数 或 毫秒数)
TTL key
PTTL key
// 取消指定键的过期时间,得永生
PERSIST key
10.2 过期键策略
如果 Redis 数据库的键过期时间到了,会有三种删除策略可供选择,优缺点从内存和 CPU 时间角度考虑:
第一种,定时删除:
概念:创建定时器 timer,键过期时间到来时,立即删除过期的键。
优点:会尽快释放内存。
缺点:在不要求内存但要求 CPU 时间的情况下,创建 timer 并执行删除过期键的操作会占用 CPU 时间,对服务器响应时间和吞吐量造成影响。(如:有大量的命令请求等待服务器处理时,服务器会优先将 CPU 的时间放在处理请求上面,而通过这种策略删除数量比较多的过期键时,明显是不合理的)
第二种,惰性删除:
概念:只有 get 键时才去检查这个键是否过期,过期的话会被删除。
优点:对 CPU 较友好。
缺点:很明显对内存不友好,大量过期无用的键被积压会占用大量内存,对于依赖内存的 Redis 服务器来说是很严重的问题,甚至可能会造成内存泄露。
第三种,定期删除:
概念:可以理解为介于定时删除和惰性删除的一种折中策略。
难点:定期删除策略要控制好执行时长和频率,否则可以会退化成定时删除策略或者惰性策略。
第一、三种是一种主动删除策略,而第二种是被动删除策略,实际上 Redis 服务器使用的是第二、三种键过期删除策略。
定期删除时,Redis 默认每个 100ms 检查,有过期 Key 则删除。需要说明的是,Redis 不是每个 100ms 将所有的 Key 检查一次,而是随机抽取进行检查。如果只采用定期删除策略,会导致很多 Key 到时间没有删除,这样惰性删除派上用场。
10.3 持久化功能和复制功能中是如何处理键过期问题的?
RDB持久化:
- 生成RDB文件:通过SAVE或BGSAVE命令生成RDB文件时,会检查键是否过期,过期的键不会存放到RDB文件中。
- 载入RDB文件:载入该文件时也会检查键是否过期,过期不会被放到RDB文件中。
AOF持久化:
- AOF文件写入:
- 若没有通过 过期删除策略 删除过期的键,该过期键会被写入到 AOF 文件。
- 若过期删除策略删除了过期键,AOF 文件写入时通过del命令显式的记录并放到 AOF 文件中。
- AOF文件重写:
- 检查所有的键是否存在过期,过期的键不会被重写到AOF文件中。
复制:
比如:存在一对主从服务器,在进行交互的时候,过期键的删除是主服务器控制的。
- 主服务器的数据库存在过期键时会被删除,并通过del命令通知所有的从服务器,需要删除哪些过期键。
- 从服务器存在过期键,没有收到主服务器的告知,会无视过期键,将它们等同于正常的键对待,如果有客户端请求从服务器,会正常操作该过期键。
- 从服务器接收到主服务器del命令告知后,才会删除过期键。
10.4 内存淘汰策略
如果 Redis 的过期键删除策略未生效,会导致内存中的数据越来越多,可能出现内存爆满的情况,内存满了之后该怎么办呢?Redis 提供了以下六种内存淘汰策略:
设置过期时间的键空间移除
- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。(不推荐)
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 Key。(依然不推荐)
- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 Key 优先移除。(不推荐)
全局性的键空间移除
- noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。(推荐使用,目前项目在用这种)(最近最少使用算法)
- allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。(应该也没人用吧,你不删最少使用 Key,去随机删)
#在 redis.conf 中开启内存淘汰策略配置:
maxmemory-policy volatile-lru
三月第一周总结梳理,就到这~
相关文章:

【碎片化知识总结】三月第一周
目录 前言 1、开发中常用的 IDEA 编辑器,如何做到不用每次都重新配置? 2、如何使用 Python 获取视频文件信息? 3、使用 Java 的 try-with-resources 优化代码 4、使用 shell 脚本批量修改服务器某一目录下的文件后缀名称 5、MySQL优化&…...
从零开始的JSON库(1):启程
1. JSON 是什么 JSON(JavaScript Object Notation)是一个用于数据交换的文本格式,现时的标准为ECMA-404 。 虽然 JSON 源自于 JavaScript 语言,但它只是一种数据格式,可用于任何编程语言。现时具有类似功能的格式有X…...

【Java】数组
目录 1.数组的定义与初始化 2.遍历数组 3.认识null 4.引用变量 5.返回多个值 6.数组拷贝 7.数组逆序 8.数组填充 9.小练习 //将整形数组转化为字符串 //二分查找优化 //冒泡排序优化 10.二维数组 //遍历二维数组 //不规则的二维数组 1.数组的定义与初始化 int…...

【C++】非类型的模板参数,特化
目录 1.类型模板参数和非类型模板参数 2.特化 3. 模板的分离编译 4.模板的优缺点 1.类型模板参数和非类型模板参数 之前写模板传的都是类型——类型模板参数 现在想定义两个静态数组,数组长度不同,就可以用模板参数传数值而不是传类型 非类型模板…...

核方法(kernel Method)
核方法 核方法定义 一种能够将在原始数据空间中的非线性数据映射到高维线性可分的方法。 核方法的用处 1、低维数据非线性,当其映射到高维空间(feature space)时,可以用线性方法对数据进行处理。 2、线性学习器相对于非线性学…...

消息队列MQ用来做什么的,市场上主流的四大MQ如何选择?RabbitMQ带你HelloWorld!
文章目录MQ用来做什么的MQ会有什么样的麻烦MQ消息队列模式分类MQ消息队列常用协议市场主流四大MQRabbitMQ项目开发RabbitMQ中的组成部分MQ用来做什么的 省流 :系统解耦、异步调用、流量削峰 系统解耦 首先举例下面这个场景,现有ABCDE五个系统ÿ…...

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E
2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) 文章目录A -- A Xor B Problem题目分析codeB -- 吃苹果题目分析codeC -- n皇后问题题目分析codeD -- 分苹果题目分析codeE -- 完型填空题目分析codeA – A…...

一文分析Linux v4l2框架
说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 V4L2(Video for Linux 2):Linux内核中关于视频设备驱动的框架,对上向应用层提供…...

MFC常用控件使用(文本框、编辑框、下拉框、列表控件、树控件)
简介 本文章主要介绍下MFC常用控件的使用,包括静态文本框(Static Text)、编辑框(Edit Control)、下拉框(Combo Box)、列表控件(List Control)、树控件(Tree Control)的使用。 创建项目 我们选择 文件->新建->新建项目,选择MFC程序 选择基于对话…...

13 node 程序后台执行加上 tail 命令, 中断 tail 命令, 同时也中断了 node 程序
前言 呵呵 最近帮朋友解决问题[2022.09.08] 需要启动一个 node 程序, 然后 需要一个 startUp.sh 脚本 然后 反手写了一个过去, 按道理 来说 应该是 后台启动了对应的 node 程序, 然后将 标准输出, 错误输出 输出到 logs/nohup.log 日志文件中, 然后基于 tail 命令 来查看 …...

52癫痫发作预测的有效双自注意力残差网络
Effective dual self-attentional residual networks for epileptic seizure prediction 摘要 癫痫发作预测作为慢性脑疾病中最具挑战性的数据分析任务之一,引起了众多研究者的广泛关注。癫痫发作预测,可以在许多方面大大提高患者的生活质量࿰…...
【计算机网络】Tcp IP 面试题相关
互联网协议群(TCP/IP):多路复用是怎么回事? 1.【问题】IPv4 和 IPv6 有什么区别? IPv4 是用 32 位描述 IP 地址,理论极限约在 40 亿 IP 地址; IPv6 是用 128 位描述 IP 地址,IPv6 可…...

【MySQL】MySQL的存储引擎
目录 概念 分类 操作 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查 询、更新和删除数据。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在 许多不同的数据库管理系统…...

es6动态模块import()
目录 一、语法说明 二、适用场合 三、注意点 四、示例代码 五、效果 一、语法说明 import命令会被 JavaScript 引擎静态分析,先于模块内的其他语句执行(import命令叫做“连接” binding 其实更合适)。 // 报错 if (x 2) {import MyMod…...
【Flask】Jinja2模板(十四)
Jinja2是一个单独的Python包,Flask依赖Jinja2,安装Flask时会自动安装Jinja2。Jinja2可以将数据和模板结合在一起生成动态文本。 一、引入 来看一个最简单的视图函数: app.route(/) def hello_world():return Hello World! 这个…...

Mr. Cappuccino的第49杯咖啡——冒泡APP(升级版)之基于Docker部署Gitlab
冒泡APP(升级版)之基于Docker部署Gitlab基于Docker安装Gitlab登录Gitlab创建Git项目上传代码使用Git命令切换Git地址使用IDE更换Git地址基于Docker安装Gitlab 查看beginor/gitlab-ce镜像版本 下载指定版本的镜像 docker pull beginor/gitlab-ce:11.3.0…...

《机器学习》基础概念之【P问题】与【NP问题】
《机器学习》基础概念之【P问题】与【NP问题】 这里写目录标题《机器学习》基础概念之【P问题】与【NP问题】一、多项式&时间复杂度1.1. 多项式1.2.时间复杂度二、P问题 & NP问题2.1. P问题2.2.NP问题2.3.举例理解NP问题-TSP旅行商推销问题三、NP-hard问题&NP-C问题…...

WinRAR安装教程
文章目录WinRAR安装教程无广告1. 下载2. 安装3. 注册4. 去广告WinRAR安装教程无广告 1. 下载 国内官网:https://www.winrar.com.cn/ 2. 安装 双击,使用默认路径: 点击“安装”。 点击“确定”。 点击“完成”。 3. 注册 链接ÿ…...

C++:vector和list的迭代器区别和常见迭代器失效问题
迭代器常见问题的汇总vector迭代器和list迭代器的使用vector迭代器list迭代器vector迭代器失效问题list迭代器失效问题vector和list的区别vector迭代器和list迭代器的使用 学习C,使用迭代器和了解迭代器失效的原因是每个初学者都需要掌握的,接下来我们就…...
SpringSecurity如何实现前后端分离
前后端分离模式是指由前端控制页面路由,后端接口也不再返回html数据,而是直接返回业务数据,数据一般是JSON格式。Spring Security默认的表单登录方式,在未登录或登录成功时会发起页面重定向,在提交登录数据时ÿ…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...