🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥
🎈支持我:可点赞👍、可收藏⭐️、可留言📝
救援模式是需要学习的一个重点地方🔑。为啥?因为如果连重置密码都不会操作,那就准备好包袱💼,寻求好下一家公司安顿自己吧🤦♂️😂。在7与8的系统中,重置密码的大体操作都一样。本文2种方法都会包含。
文章目录 📜21.1 重置root密码📑CentOS 7的处理方法🔖1.重启主机或者启动系统🔖2.合适位置输入`rd.break`🔖3.`ctrl+x`进入紧急模式🔖4.重新挂载根🔖5.切换根🔖6.修改密码🔖7.重打标签并退出重启 📑CentOS 8的处理方法🔖1.重启主机或者启动系统🔖2.合适位置输入`rd.break`🔖3.`ctrl+x`进入紧急模式🔖4.重新挂载根🔖5.切换根🔖6.修改密码🔖7.重打标签并退出重启 📜21.2 选择错误启动目标导致系统无法正常运行📑处理方法 📜21.3 文件系统问题 💡总结 首先,介绍一下如何重置密码,必须掌握的技能,这还是 RHCSA认证必考内容。
📜21.1 重置root密码 📑CentOS 7的处理方法 🔖1.重启主机或者启动系统 重启主机,进入内核选择界面的时候,按任意键停止倒数(除ENTER,我一般习惯按上下按键),之后按e
🔖2.合适位置输入rd.break 在linux16开头的行的结尾输入rd.break
🔖3.ctrl+x进入紧急模式 修改完后按ctrl+x进入紧急模式:
🔖4.重新挂载根 现在的根为只读状态,需要挂载为读写状态以便进行修改
mount -o remount,rw /sysroot 🔖5.切换根 使用chroot命令用来将指定的路径换为根目录进入到sh-4.2,即为你真正的系统
# chroot命令用来将指定的路径换为根目录 chroot /sysroot # 如果你装了中文系统,建议输入以下命令切换为英文语言环境 LANG=en_US.UTF-8 🔖6.修改密码 需要输入两次密码进行确认
结尾看到successfully即为修改成功
# 修改密码 passwd root # 也可以用明文的形式进行修改 echo "password" | passwd --stdin root 🔖7.重打标签并退出重启 如果系统的 selinux 开启着,则需要执行命令: touch /.autorelabel 以更新系统信息
否则重启之后密码修改不会生效, 先退出当前根, reboot 重启系统
参考:
MATLAB中调用C++程序的几种方式 - 知乎 (zhihu.com)
此文主要是个人记录使用。
我采用VS编译cpp文件,生成mexw64文件供matlab使用,下面记录vs编译过程:
目录
版本信息
安装教程
环境变量设置
VS中PCL的配置
使用 PCL的简单demo
PCL简介:点云库全称是Point Cloud Library(PCL),是一个独立的、大规模的、开放的2D/3D图像和点云处理项目。PCL根据BSD许可条款发布的,是可以免费用于商用和研究使用。
PCL相关网站:
PCL官网、项目GitHub
项目开发需要用到PCL,下面记录一下我的PCL安装和配置过程。
参考博文:pcl1.8.0+vs2013环境配置(详细)_BOO2018的博客-CSDN博客
1. 版本信息 win10系统
PCL:我安装的是PCL 1.12.0,需要下载两个文件:
下载地址: Releases · PointCloudLibrary/pcl (github.com)
VS2019社区版(笔者在VS2022上也可以按照此教程进行配置)
2. 安装教程 step1:
直接运行PCL-1.12.0-rc1-AllInOne-msvc2019-win64.exe,常规的安装过程不赘述。
注意:1、添加PCL到系统PATH。2、建议安装到非系统盘。3、安装路径全英文。
step2: 安装完成后,将pcl-1.12.0-rc1-pdb-msvc2019-win64.zip解压,将.pdb文件拷贝到pcl\bin目录下。
至此PCL的安装就完成了。
3. 环境变量设置 参考:PCL出现“无法找到 pcl_commond.dll 文件,程序无法执行”的问题。_枫林星落的博客-CSDN博客
在系统环境变量中添加
我的PCL安装路径是D:\Program Files\PCL 1.12.0
所以我需要添加的环境变量是:
D:\Program Files\PCL 1.12.0\bin
D:\Program Files\PCL 1.12.0\3rdParty\FLANN\bin
D:\Program Files\PCL 1.12.0\3rdParty\Qhull\bin
D:\Program Files\PCL 1.12.0\3rdParty\VTK\bin
D:\Program Files\PCL 1.12.0\3rdParty\Boost\lib
C:\Program Files\OpenNI2\Redist(因为我的OpenNI2装在别的地方了)
4. VS中PCL的配置 step1:
VS中新建一个C++控制台程序,一点基操,如果项目正在开发就用旧的项目。右击解决方案,点击属性,或者从工具栏的视图-属性页进入。
选择此项目的配置:Debug还是Release,活动平台要选x64。这一点决定了后面导入依赖项的种类。
step2:
添加包含目录:VC++目录 -> 包含目录 -> 点击右列,出现一个下拉列表,点击后出现编辑,点击进入。
问题一:CreateProcess error=206, 文件名或扩展名太长 版本:
idea:2021.3.3
gradel:4.10.3
scala:2.12.12
git
场景描述:
在运行main方法时报错,报错内容如下: 问题原因:
引起这个错误的主要原因是java启动时带的启动参数超过了window的最大长度限制导致的,而Linux却不对这个做限制,所以一般踩坑的都是win开发环境的用户。 解决方案:
Run—Edit Configuration中找到Shorten command line这个选项,如果你找不到,尝试从Modify options选项中调出:
none:这是默认选项,idea不会缩短命令行。如果命令行超出了OS限制,这个想法将无法运行您的应用程序,但是工具提示将建议配置缩短器。JAR manifest:idea 通过临时的classpath.jar传递长的类路径。原始类路径在MANIFEST.MF中定义为classpath.jar中的类路径属性。classpath file:idea 将一个长类路径写入文本文件中。 选择JAR manifest选项。
问题二:No tests found for given includes 版本:
idea:2021.3.3
gradel:4.10.3
scala:2.12.12
git
场景描述:
使用idea运行时候发生报错:No tests found for given includes,报错内容如下: 问题原因:
这是由于点击单元测试使用了idea的按钮时候,idea默认使用了gradle的测试运行期,如果gradle的编译脚本没有进行相关配置,则会发生上述报错。 解决方案:
方案一:
gradle编译脚本添加test编译器配置,如下所示
test {
useJUnitPlatform()
}
方案二:
使用idea自带的测试运行期,具体配置如下所示:
问题三:Error running ReadDDL.create table. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun 版本:
一、软件准备VMware 二、镜像centos下载 注:可以在官网下载,也可以在网盘下载。 找到安装好的VMware并打开,创建一个新的虚拟机
点击下一步
虚拟机的硬件兼容性,默认用的是虚拟机给出的版本
这里是安装的系统映像的选择,也可以选择稍后安装操作系统。
可以选择虚拟机安装的位置,单击下一步
处理器的个数,我选择的两个处理器。
虚拟机的内存默认是1GB,这里可以根据自身的情况来选择虚拟机内存,我的物理机内存16GB,所以用的虚拟机内存是4GB。 这里的网络类型可以根据VMware给出默认选项,后期我们需要那种类型,可以修改选项的。
可以选择默认选项。
这个可以根据VMware的默认选项。
这里需要给虚拟机一个新的虚拟硬盘 这里给虚拟硬盘的大小,必须要大于系统映像的内存。
这里用的将虚拟磁盘分成多个文件可以自由移动系统文件。
这里是我们给虚拟机硬件配置的参数,可以查看是否跟自己配置的相同。然后单击完成
虚拟机会重启,回车
等待系统的配置
可以选择系统呈现的语言,可以选择中文。
选择中文,单击继续,我们到达这个界面,可以配置我们的内容。
如果想要桌面,就要修改软件选择修改为cnome桌面
选择conme桌面,单击完成
选择的安装位置,要给虚拟硬盘分配空间存放系统配置文件。
选择我要自动分配,点击硬盘。然后点击完成
点击自动创建
点击/这个选项,然后单击完成
点击接受并修改
点击网络和主机名
修改主机名和打开以太网,以太网默认是关闭的
我们设置root密码,最好跟创建用户的密码一致。(以免忘记密码)
点击root密码,进行配置密码
点击创建用户配置用户信息,勾选用户为管理员
配置完成之后等待系统配置完善。
点击重启
重启之后,有个许可认证,勾选我同意。
点击完成配置
这就安装好了一个虚拟机
文章目录 Python 内的正则使用基础正则修饰符的使用python 里的反向引用、捕获 需求:单次匹配字符串`re.match()` 函数`re.fullmatch()` 函数`re.search()` 函数 需求:全文搜索替换字符串`re.sub()` 函数 需求:全文搜索匹配字符串`re.findall()` 与 `re.finditer()` 函数 需求:以匹配的字符分割字符串`re.split()` 函数 有误请指出,正在改动中…
2022/09/22 增加 re.findall() 与 re.finditer() 区别解释。
Python 内的正则使用基础 正则修饰符的使用 python 里的参数用 flag 表示正则修饰符的参数。
使用多个修饰符设置正则表达式的匹配模式:re.I | re.M。
修饰符描述re.I使匹配对大小写不敏感re.L做本地化识别(locale-aware)匹配re.M多行匹配,影响 ^ 和 $re.S使 . 匹配包括换行在内的所有字符re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 python 里的反向引用、捕获 反向引用:反斜杠加数字 \N。(?<name>exp):匹配 exp,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp)。
但是在Python中,为 (?P<name>exp)。 后续可使用 group(1) 或 group(name) 获取元表达式的匹配内容。 注意:反向引用需要前缀 r,否则会被 Python 误认为是进制数:比如 \1 实际意义变成 \x01。
需求:单次匹配字符串 re.match() 函数 Python 中的 match() ,需要这个字符串以这个正则开头,【检验字符串开头有没有正确】。如果字符串开头有所不同就匹配失败,返回 none。(就是许多文章说的 “检测 RE 是不是在 string 的开始位置匹配”)
该代码为Xilinx SDK Zynq平台下的裸机程序,使用该程序可以实现通过串口敲指令读写寄存器操作,方便调试使用。
menu.h
//******************************************************************************/ #ifndef XHDMI_MENU_H_ #define XHDMI_MENU_H_ /**< Prevent circular inclusions * by using protection macros */ #include "xil_types.h" void MenuProcess(); u8 CharisNum(u8 data); u32 CalcChar(u8* bufptr); u8 char_2_hex(u8 src); #endif /* End of protection macro */ menu.c
#include "menu.h" #include "xparameters.h" #include "xil_printf.h" #include "xuartps.h" #include "xil_io.h" #include "xpseudo_asm.h" void MenuProcess() { u8 Data; u8 IsValid = TRUE; int i; u8 Addr[8]; u8 Dat[8]; u32 addr_c; u32 data_c; // Check if the uart has any data if (XUartPs_IsReceiveData(STDIN_BASEADDRESS)) { // Read data from uart Data = XUartPs_RecvByte(STDIN_BASEADDRESS); //XUartPs_SendByte(STDOUT_BASEADDRESS, Data); switch(Data){ case 'W' : case 'w' :{ xil_printf("
文章目录 1.数组的基础理论2.二分查找3 移除元素 1.数组的基础理论 数组是在内存中空间连续的一块区域存储的某种数据类型的集合。
Q:java中二维数组在内存的空间地址是连续的么?
测试下
public static void test_arr() { int[][] arr = {{1, 2, 3}, {3, 4, 5}, {6, 7, 8}, {9,9,9}}; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[3]); } 输出结果如下:
[I@7852e922 [I@4e25154f [I@70dea4e [I@5c647e05 上面的地址经过了处理,不过它们都没有规律,显然不连续。实际上,java的二位数组可能是这样的。
从这个角度,我们可以认为java中实际上不存在二维数组,因为二维数组不过是由一维数组链接而成的,并没有在地址空间上连续。
2.二分查找 分析:
这个题目要求对数组元素有序,同时给出了二分查找的两个条件,适用二分查找。
(1)数组是有序的
(2)数组元素不重复(一旦重复,则返回的结果可能是多个)
题解:
class Solution { public int search(int[] nums, int target) { // 注意第一次调用right为nums.length-1,而不是nums.length return BinarySearch(nums, target, 0, nums.length-1); } public int BinarySearch(int [] nums,int target, int left, int right) { if(left > right) { return -1; } int mid = (left + right)/2; if(nums[mid] == target) { return mid; } else if(nums[mid] < target) { return BinarySearch(nums, target, mid + 1, right); } else if(nums[mid] > target) { return BinarySearch(nums, target, left, mid-1); } return -1; } 上面的代码有两个return -1,不优雅,优化下。
1. android studio默认缓存路径 Android studio缓存路径默认设置在C盘的C:\Users\{用户名}\,这样很容易导致占用C盘过多的空间, 可以把android studio的缓存路径设置到别的盘符下,释放C盘的空间,android studio主要包括.android,android studiox.x和.gradle这3个文件夹
.android文件夹是存放android虚拟机相关的文件夹
.AndroidStudiox.x存放android studio相关的配置
.gradle是存储gradle相关的配置和本地缓存
2.下面将分别介绍如何修改这些缓存文件夹的路径 2.1 修改.android文件夹 1.添加ANDROID_SDK_HOME环境变量,设置自己自定义目录:M:\cache
2.修改新路径(M:\cache\.android\avd)下的xxx.ini文件内的路径信息,修改完成需要重启生效。
# 原来目录下配置信息 avd.ini.encoding=UTF-8 path=C:\Users\{用户名}\.android\avd\Pixel_XL_API_27.avd # 主要修改这个 path.rel=avd\Pixel_XL_API_27.avd target=android-27 #修改后的配置信息 avd.ini.encoding=UTF-8 path=M:\cache\.android\avd\Pixel_XL_API_27.avd path.rel=avd\Pixel_XL_API_27.avd target=android-27 2.2 修改 .AndroidStudio*.*文件夹 进入android studio安装目录的bin文件夹,打开idea.properties文件,找到idea.config.path,idea.system.path,idea.plugins.path,idea.log.path修改这4个配置项。把${user.home}替换为自己的路径:M:\cache\,并把前面的#去掉。
# 默认配置 #--------------------------------------------------------------------- # Uncomment this option if you want to customize path to IDE config folder. Make sure you're using forward slashes. #--------------------------------------------------------------------- # idea.config.path=${user.home}/.AndroidStudio/config #--------------------------------------------------------------------- # Uncomment this option if you want to customize path to IDE system folder.
基于480Mbps 高速USB转8路串口芯片CH348,可以为各类主机扩展出8个独立的串口。使用厂商提供的VCP串口驱动程序,可支持Windows、Linux、Android、macOS等操作系统。使用单个CH348芯片即可实现USB一拖八串口转接产品,高速USB收发器和控制器、高速全双工串口控制器、以及每个UART内置独立的大容量收发FIFO,可轻松满足各类串口波特率下的连续稳定通信。
芯片提供的串口默认为TTL电平,可直接设计TTL串口产品,也可以外加RS232/RS485/RS422等电平转换芯片实现其他接口类型的USB转多串口产品。
CH348主芯片提供2种封装,LQFP48的CH348Q和LQFP100的CH348L,因RS485串口产品大部分应用场合仅需要提供串口TXD发送和RXD接收通道,因此设计时选择任何一款均可满足,若产品有5线串口和9线串口要求,则需要选择大封装全MODEM信号的CH348L芯片。
CH348芯片提供了RS485收发使能控制引脚TNOW,其中CH348L芯片提供了8个通道的TNOW信号,CH348Q提供了4个通道的TNOW信号。
产品特点
支持各种常规串口波特率及最高6Mbps波特率,在高波特率下通讯连续、高效、稳定;多系统兼容,支持Windows/Linux/macOS/Android等操作系统,兼容各类串口软件;各串口均内置独立收发FIFO,独立工作,互不影响;支持全MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS,可兼做GPIO用于MCU下载,IO控制等;支持串口CTS和RTS硬件自动流控,高速连续通讯无丢包;内置Unique ID,模块插入任意USB口,串口号均可保持固定,无需手动查找串口,使用更便捷;芯片内置EEPROM,支持配置芯片VID、PID、最大电流值、厂商和产品信息字符串等参数。可实现定制化的厂商信息; CH348L实现的8路RS485串口产品参考设计
RS485 调试常见问题Q&A
Q:串口端经常收到0x00误码值?
A:接收使能状态下,一般485的A和B信号端为高阻态,发送和接收切换过程中A和B信号保持,没有恢复到空闲态。导致RO端采样出错。此时,在A端接一个上拉电阻,B端接一个下拉电阻,阻值需根据手册和实际应用计算。
Q:A和B端是否需要并联终端匹配电阻?
A:根据手册来定,目前很多芯片内置120欧匹配电阻,并不是必须选项。
Q:级联设备数量怎么计算?
A:需根据手册标注的接收输入阻抗来确定,一般也会直接标注出允许的最大收发器数量。
java实现office文件的在线预览 要实现office文件的在线预览,需要将office文件转换为pdf文件,然后打开
首先需要安装openOfice去官网先将openOffice 下载下来Apache OpenOffice - Official Download在java中导入依赖,导入依赖可能会导致报错,是因为本地maven仓库没有此依赖 所以需要去下载jar包,将jar放入本地maven资源仓库,在这里我提供了所需的jar包,有需要的可以去下载链接:https://pan.baidu.com/s/1gRlN6KHlL3nMz5fB7l-EIQ 提取码:zxcv下载号好之解压到Maven仓库的"com\artofsolving\"这个路径下( 如果没有这个路径就创建 ) 完成上面这步操作之后就可以配置Maven依赖了
<dependency> <groupId>com.artofsolving</groupId> <artifactId>jodconverter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>jurt</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>ridl</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>juh</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>unoil</artifactId> <version>3.0.1</version> </dependency> 我将openoffice 的转换写成了一个工具类放在下面,有需要可以直接使用
/** * Created with IntelliJ IDEA. * * @Auther: 李子叔叔 * @Date: 2021/01/20/18:39 * @Description: */ public class OppenOffice { // 将word格式的文件转换为pdf格式 //startFile为源文件地址 //overFile为转换之后的文件地址 public static boolean WordToPDF(String startFile, String overFile) throws IOException { // 源文件目录 File inputFile = new File(startFile); System.
问题:
早上打开word本来准备填一下群众意见调查表,结果突然发现白色编辑区域移动光标失效,虽然说可以手动点击定位,一滚动鼠标即消失,但是看不到光标之前定位体验非常不好。
在网上去搜,大部分是word2007老版本的word,说去掉Powerdesigner插件(office 2016版本操作为点击左上角文件->更多->选项->加载项->)就可以了,然而我word版本是2016,并且并没有这个插件。
解决方案(解决问题,但是有些许尴尬,如果有新的解决方案,麻烦说一下,谢谢啦)
1、打开windows控制面板->右上角“查看方式”选择为大图标->
2、点击“鼠标”按钮 3、指针-》方案里面选择Windows黑色(系统方案),再次打开word解决问题。
Windows10神州网信政府版初始安装完成后,在有些界面上呈现“*某些设置已隐藏或由你的组织管理”,这就意味着有很多属性并不能由使用者修改,这对用户来说很不不方便。
下面是经常用到的一些属性修改。
1、修改屏幕保护属性
⑴ 按Win键+R键调出运行框,输入"gpedit.msc"进入组策略编辑器。
⑵ 依次选择“用户配置”一〉"管理模板"一〉"控制面板"一〉"个性化",将涉及屏幕保护的选项都设置为“未配置”即可修改屏幕保护的属性了。
2、去掉登录界面必须按"Ctrl+Alt+Del"
⑴ 按Win键+R键调出运行框,输入"gpedit.msc"进入组策略编辑器。
⑵ 依次选择“计算机配置"一〉"Windows配置"一〉"安全设置"一〉"本地策略"一〉"安全选项",选择“交互式登录(无须按Ctrl + Alt + Del)”设置为“已启用”。
⑶ 选择“计算机配置"一〉"管理模板"一〉"控制面板"一〉"个性化",选择"不显示锁屏"设置为“启用”。
3、密码策略的修改
⑴ 按Win键+R键调出运行框,输入"gpedit.msc"进入组策略编辑器。
⑵ 依次选择“计算机配置"一〉"Windows配置"一〉"安全设置"一〉"账号策略"一〉"密码策略",可以根据自己的需要来设置密码策略。
4、开启摄像头和麦克风
⑴ 按Win键+R键调出运行框,输入"gpedit.msc"进入组策略编辑器。
⑵ 依次选择“计算机配置"一〉"管理模板"一〉"Windows组件"一〉"应用隐私"。
⑶ 打开"允许Widows应用访问相机",选择"已启用"和"强制允许"。
⑷ 打开"允许Widows应用访问麦克风",选择"已启用"和"强制允许"。
如果还是不行,卸载摄像头或者麦克风,再次安装。
或者下载神州网信政府版的CMGEMicCameraTool_all_edition压缩包,直接运行可以解开摄像头和麦克风的限制。
下载地址:下载中心 – 神州网信CMIT 5、安装.Net Framework 3.5
⑴ 下载.Net Framework3.5安装包,下载地址:
https://support.cmgos.com/download/microsoft-windows-netfx3-ondemand-package.cab
⑵ 建立一个文件夹,将前面下载好的安装包拷入。〖我的目录是:F:\TOOLS。〗
⑶ 按Win键+R键调出运行框,输入"regedit"进入注册表编辑器,找到路径HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU,修改UseWUServer的值为0;
⑷ 打开Windows服务,在列表中找到Windows Update,如果没有运行则启动,如果启动可以先停止再启动;
⑸ 在C:\Windows\System32下找到cmd.exe,以管理员身份运行,输入安装命令:
dism.exe /online /enable-feature /featurename:NetFX3 /Source:F:\TOOLS ⑹ 按Win键+R键调出运行框,输入"regedit"进入注册表编辑器,找到路径HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU,修改UseWUServer的值为1,并重启Windows Update服务。
6、彻底去除UAC控制
在Windows10神州网信版中,经常会出现用户账号控制通知界面,很烦,你选择不通知后,依然在浏览器的应用中还是会出现,这个是与LUA(有限用户访问)有关,也要加以关闭。
可以写一个后缀为.reg的文件,加入以下内容后直接以管理员身份运行即可:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] "
并发编程并不是 Java 特有的语言特性,它是一个通用且早已成熟的领域。Java 只是根据自身情况做了实现罢了。并发编程可以总结为三个核心问题:分工、同步、互斥。分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共享资源。 例如: Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典型的同步方式,而可重入锁则是一种互斥手段。当你理解或学习并发编程的时候,如果能够站在较高层面,系统且有体系地思考问题,那就会容易很多。本文是JUC第一讲:并发包深入理解
juc并发包,用过哪些? 参考 并发编程的艺术 方腾飞 先来一道面试题书籍推荐关于java并发包concurrentHashmap1.1、不同版本的并发hashmap区别 美团1.2、属性1.3、concurrentHashmap组成1.4、put操作1.5、get(key)1.6、扩容时要注意的?1.7、为什么使用ConcurrentHashMap1.8、ConcurrentHashMap使用案例 1、JUC基础知识点1.2、创建线程的三个方法是什么? 阿里1.3、Java 怎么获取多线程的返回值? 2、线程池 Executor/ThreadPoolExecute3、阻塞队列 blockingqueue3.1、实现类:(共6种) 4、locks 同步锁(多线程的锁机制) ****5、CopyOnWriteArrayList6、copyonwriteArrayset7、Atomic类 (多线程的原子性操作提供的工具类)8、volatile关键字 详解可以看多线程部分9、cas乐观锁:(非阻塞算法) java中的并发工具类 10/11/12/1310、闭锁countdownlatch (等待多线程完成)实现了join的功能10.1、概念:10.2、可以实现的需求10.3、分析CountDownLatch的实现原理10.5、什么是AQS?******10.6、AQS与锁(如LOCK)的对比10.7、CountDownLatch中的方法? 11、cyclicBarrier(同步屏障)11.1、cyclicBarrier是什么?11.2、cyclicBarrier底层原理?11.3、cyclicBarrier的应用场景11.4、cyclicBarrier和countDownLatch的区别 12、Semaphore详解(控制并发线程数)13、Exchanger详解(线程间交换数据)14、公平锁和非公平锁15、并发队列-非阻塞队列Action1:获取单例对象需要保证线程安全,其中的方法也要保证线程安全。Action2:创建线程或线程池时请指定有意义的线程名称,方便出错时排查Action3、线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。Action4、线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor 的方式,这样的处理方式更加明确线程池的运行规则,规避资源耗尽的风险。Action5、`SimpleDateFormat` 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static,必须加锁,或者使用 DateUtils工具类。Action6、高并发时,同步调用应该去考量锁的性能损耗,能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。Action7、对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。Action8、并发修改同一记录时,避免更新丢失,需要加锁。要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,使用 version作为更新依据Action9、多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其他任务便会自动终止运行,使用 `ScheduledExecutorService` 则没有这个问题。Action10、使用CountDownLatch 进行异步转同步操作,每个线程退出前必须调用countDown方法,线程执行代码注意catch异常,确保 countDown 方法被执行到,避免主线程无法执行至 await 方法,直到超时才返回结果。Action11、避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed 导致性能下降Action12、在并发场景下,通过双重检查锁(double-checked locking) 实现延迟初始化的优化问题隐患,推荐解决方案中较为简单的一种,将目标属性声明为volatile型 (比如修改 helper 的属性声明为 `private volatile Helper helper = null;`)Action13、volatile 解决多线程内存不可见问题。对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。Action14、HashMap在容量不够进行 resize 时,由于高并发可能出现死链,导致 CPU 飙升,在开发过程中可以使用其他数据结构或加锁来规避此风险Action15、ThreadLocal 无法解决共享对象的更新问题,ThreadLocal对象建议使用 static 修饰。Action16、必须回收自定义的 ThreadLocal 变量,尤其在线程池场景下,线程经常会被复用,如果不清理自定义的 ThreadLocal 变量,可能会影响后续业务逻辑和造成内存泄露等问题。尽量在代理中使用 try-finally 块进行回收Action17、在使用阻塞等待获取锁的方式中, 必须在 try 代码块之外, 并且在加锁方法与 try 代码块之间没有任何可能抛出异常的方法调用, 避免加锁成功后, 在 finally 中无法解锁。Action18、资金相关的金融敏感信息, 使用悲观锁策略。 先来一道面试题 面试题1:如何使线程按序交替?
目录
一,开启碰撞监听
二,开启碰撞回调
三,注册回调函数
测试
其他
之前做的是2.x版本的,最近切到了3.6,记录一下
2D 碰撞回调 · Cocos Creator版本3.6本文只监听,不产生实际碰撞 一,开启碰撞监听 项目-项目设置-功能剪裁
Box2D 物理模块需要先在 Rigidbody 中 开启碰撞监听,才会有相应的回调产生。本文只监听,不产生实际碰撞,选择了内置2D,没有添加Rigidbody2D组件
二,开启碰撞回调 节点添加BoxCollider2D组件
Builtin 物理模块只需要有碰撞体组件就可以产生碰撞回调。(本文) Sensor指明碰撞组件是否为传感器类型,传感器类型的碰撞组件会产生碰撞回调,但是不会发生物理碰撞效果PS:脚本挂在勾选了此项的节点这里Box2D开启方法为,在 Rigidbody2D 的 属性检查器 勾选 EnabledContactListener 属性(需要添加Rigidbody2D组件) 三,注册回调函数 注册方式:
通过指定的 collider 注册通过 2D 物理系统注册一个全局的回调函数 Builtin 2D 物理模块只会发送 BEGIN_CONTACT 和 END_CONTACT 回调消息
创建脚本Player.ts
import { _decorator, Component, Node, BoxCollider2D, Contact2DType, PhysicsSystem2D, Collider2D, IPhysics2DContact } from 'cc'; const { ccclass, property } = _decorator; @ccclass('Player') export class Player extends Component { start() { // 注册单个碰撞体的回调函数 let collider = this.
新手学python用什么软件 几款常用的Python软件工具。1、Upterm它是一个全平台的终端,可以说是终端里的IDE,有着强大的自动补全功能。
之前的名字叫BlackWindow,有人跟他说这个名字不利于社区推广,改名叫Upterm之后现在已经17000+Star了。2、Ptpython一个交互式的Python解释器。
支持语法高亮、提示甚至是vim和emacs的键入模式。3、Anaconda它能帮你安装好许多麻烦的东西,包括:Python环境、pip包管理工具、常用的库、配置好环境路径等等。
这些事情小白自己一个个去做的话,容易遇到各种问题,带来挫败感。如果你想用Python搞数据方面的事情,就安装它就好了,它甚至开发了一套JIT的解释器 Numba。
所以Anaconda有了JIT之后,对线上科学计算效率要求比较高的东西也可以搞了。
4、CodeSandbox虽然这个不算是Python开发工具,但如果后端工程师想写前端的话,这个在线编辑器太方便了,简直是节省了后端工程师的生命啊!
不用安装npm的几千个包了,它已经在云端完成了,采让你直接就可以上手写代码、看效果。对于React、Vue这些主流前端框架都支持。
5、PycharmPycharm是程序员常常使用的开发工具,简单、易用,并且能够设置不同的主题模式,根据自己的喜好来设置代码风格。6、IPython如何进行交互式编程?没错,就是通过IPython。
IPython相对于Python自带的Shell要好用的多,并且能够支持代码缩进、Tab键补全代码等功能。如果进行交互式编程,这是不可缺少的工具。
7、Python Tutor这个工具可能对初学者比较有用,而对于中高级程序员则用处较少。这个工具的特色是能够清楚的理解每一行代码是如何在计算机中执行的,中高级程序员一般通过分步调试可以实现类似的功能。
这个工具对于最初接触Python、最初来学习编程的同学还是非常有用的,初学者不妨体验看看。
8、IDLEIDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境。要使用IDLE必须安装python and Tkinter。
特性:自动缩进,彩色编码,命令历史(Alt+p,Alt+n)和单词自动(Alt+/)完成。用IDLE执行Tkinter程序,不要在程序中包括mainloop。
IDLE本身就是Tkinter应用程序,它会自动调用mainloop。再调用一次mainloop会与IDLE的事件循环冲突,造成运行时错误。
9、BlackAdderBlackAdder支持windows and linux环境。用它创建的程序可在任何一种平台上运行,负责维护它的是。
他们发布了该软件的个人版,只提供有限的支持;以及专业版,需要许可,面向商业软件开发者。
10、Komodo EditOpen Komodo是Komodo edit的开源发布 ,一个免费的动态语言的多语言编辑器,基于屡获殊荣的Komodo IDE。
既支持Perl、PHP、Python、Ruby、Tcl等服务端语言,也支持CSS、HTML、JavaScript、XML等。
在使用Komodo Edit编写代码时,通过其提供的自动完成、调用提示、语法纠正、代码片断等功能可以充分提高你的编码效率,助你写出高质量的代码。
相信大家看完以上推荐的十款Python软件工具,一定对“学Python需要安装什么软件”这个问题有了答案。那么赶紧用起来吧,相信安装了以上的软件工具,大家学Python的效率会有很大的改善。
谷歌人工智能写作项目:小发猫
新手学python用什么软件 新手学python用的软件如下:1. Sublime TextSublime Text是一款非常流行的代码编辑器,支持Python代码编辑,同时兼容所有平台,并且丰富的插件扩展了语法和编辑功能,迅捷小巧,具有良好的兼容性,很受编程人士的喜爱!
2. VimVim和Vi是一种模型编辑器,它将文本查看从文本编辑中分离,VIM在原始VI之上做了诸多改进,包括可扩展模型和就地代码构建,VIMScripts可用于各种Python开发任务!
3. AtomAtom被称为“21世纪可破解的文本编辑器”,可以兼容所有平台,拥有时尚的界面、文件系统浏览器和扩展插件市场,使用Electron构建,其运行时安装的扩展插件可支持Python语言!
4. GNU EmacsGNU Emacs是一款终身免费且兼容任何平台的代码编辑器,使用强大的Lisp编程语言进行定制,并为Python开发提供各种定制脚本,是一款可扩展、可定制、自动记录、实时显示的编辑器,一直萦绕在UNIX周围python和java先学哪个。
5. Visual Studio CodeVisual Studio Code是一款兼容Linux、Mac OS X和Windows平台的全功能代码编辑器,可扩展并且可以对几乎所有任务进行配置,对于Python的支持可以在Visual Studio Code中安装插件,只需快速点击按钮即可成功安装,且可自动识别Python安装和库。
Python编程需要用什么软件 Python编程需要用以下几个软件:1、Pycharm:PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。
2、IDLE:Idle是一个纯Python下使用Tkinter编写的相当基本的IDE。3、Ipython:ipython是一个python的交互式shell,比默认的pythonshell好用得多。
如需学习Python编程推荐选择达内教育,秉承“名师出高徒、高徒拿高薪”的教学理念,是达内公司确保教学质量的重要环节。作为美国上市职业教育公司,诚信经营,拒绝虚假宣传是该机构集团的经营理念。
该机构在学员报名之前完全公开所有授课讲师的授课安排及背景资料,并与学员签订《指定授课讲师承诺书》,确保学员利益。想了解更多有关Python的相关信息,推荐咨询达内教育。
达内与阿里、Adobe、红帽、ORACLE、微软、美国计算机行业协会(CompTIA)、百度等国际知名厂商建立了项目合作关系。
共同制定行业培训标准,为达内学员提供高端技术、所学课程受国际厂商认可,让达内学员更具国际化就业竞争力。
python一般用什么软件 《Python 3.
目录 1.贡献2.方法2.1.Open Vocabulary Object Detector2.2.通过Detector Training实现对齐2.3.通过Regional Prompt Learning对齐2.4.PromptDet:通过自训练对齐 3.实验 1.贡献 这项工作的目标是建立一个可扩展的pipeline,使用零手动注释将目标检测器扩展到新的类别。为了实现这一点,做出了以下四个贡献:
为了实现泛化,我们提出了一个两阶段的开放词汇表对象检测器,其中类不可知的对象proposal区域通过预先训练的视觉-语言模型中的文本编码器进行分类;为了将视觉潜在空间(RPN box proposal)与预先训练的文本编码器的视觉潜在空间配对,我们提出了区域提示学习(regional prompt)的思想,以使文本嵌入空间与regional visual object特征对齐;为了扩大学习过程,以检测更广泛的对象,我们通过一个新的自训练框架来利用可用的在线资源,该框架允许在大量未经处理的网络图像上训练我们提出的检测器。最后,为了评估我们提出的检测器PromptDet,我们对具有挑战性的LVIS和MS-COCO数据集进行了广泛的实验。 PromptDet的性能优于现有方法,并且只需较少的额外训练图像和零手动注释。
图1:提出的PromptDet是一个框架,用于扩展目标检测器中的词汇表,并且无需人工注释。该图描述了模型在LVIS验证集上生成的检测示例,蓝色和绿色框分别表示基本类别和新类别的目标对象。尽管没有为新类别提供GroundTruth,PromptDet仍然能够以高精度可靠地定位和识别这些目标。 相关工作:Zero-shot learning
Zero-shot learning旨在将已经学到的知识从看得见的目标类别迁移到新的类别。在目标检测领域,早期的工作利用视觉属性:比如类别的层次结构,类别的相似度,目标对象的局部part,从而将看得见的类别泛化到看不见的类别;其他研究方向学习将视觉样本和语义描述符映射到联合嵌入空间,并计算嵌入空间中图像和文本之间的相似性。
个人对zero-shot learning的理解
我认为分类任务的尽头其实是:类别的名称只是一个描述,我们要学会区分新类别和过去见过的类别,同时要能区分新类别中的各个不同的类别。zero-shot learning应当属于分类任务的最终目的。
设想第一个发现秃鹰(Bald eagle)的研究者,他可以简单地给这个物种命名Bald eagle,这群秃鹰的特征是相似的:翼展6-7英尺,深褐色或白色的尾巴,白色的头,明亮的黄色眼睛。尽管研究者事先并不知道什么是“秃鹰”,但是他能确定这是与以前发现的物种不同的动物。
一般来说,目前zero-shot learning 方法会遵循三种学习范式之一:
从属性中学习。一个类别可以伴随一个结构化的描述,例如,“白色的头“和“黄色的嘴“描述一个秃鹰。这允许算法将输入分解为描述类的元素,即使它没有看到该类的任何显式示例;从文字描述中学习。一个类别可以附带一个文本的自然语言描述,就像一本词典或者一个百科全书的单词入口。这允许模型在仅给定类别描述的情况下解释输入并将其映射到类别。独立学习。类别被嵌入到一个连续的空间中,zero-shot 分类器可以区分embedding的位置以确定输出。由于不需要每个类别显式的属性或文本描述,这种方法更符合 zero-shot learning 的目标,但是可能表现得比较差。 2.方法 在本文中,我们的目标是扩展标准的 2 stage 目标检测器的词汇表,以最少的手动操作定位和识别新类别对象。本节的组织方式如下,我们首先介绍构建开放词汇表检测器的基本模块,该检测器可以检测封闭集合之外的任意类别的对象;在第2.2节中,我们通过继承CLIP的文本编码器作为分类器生成器,描述了将视觉主干与冻结语言模型配对的基本思想;在第2.3节中,为了鼓励以目标对象为中心的视觉表示和文本表示之间的一致性,我们引入了区域提示学习(RPL,regional prompt learning);在第2.4节中,我们介绍了一种迭代学习方案,它可以有效地利用未经处理的web图像,寻找新类别的高质量候选图像。因此,我们提出的开放词汇检测器,称为PromptDet,可以用可扩展的方式对这些候选图像进行自训练。
2.1.Open Vocabulary Object Detector 假设我们有一个目标检测数据集 D t r a i n D_{train} Dtrain,包含一组基本类别的注释 C t r a i n = C b a s e C_{train}=C_{base} Ctrain=Cbase,比如 D t r a i n = { ( I 1 , y 1 ) , .
在Mysq历史版本地址里找到自己需要的版本,
这里选择的是5.6.46,
这里下载下来的实际上是已经为我们编译好了的最终文件,不用我们去进行任何的处理。
解压缩下载文件:
tar -xzvf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz mv mysql-5.6.46-linux-glibc2.12-x86_64 mysql-5.6.46 接下来首先添加mysql用户
groupadd mysql useradd -g mysql mysql 更改目录权限:
chown -R mysql:mysql /usr/local/mysql-5.6.46 编辑配置文件my.cnf:
cp /usr/local/mysql-5.6.46/support-files/my-default.cnf /etc/my.cnf vim /etc/my.cnf 配置详情:
[client] port = 3306 socket =/usr/local/mysql-5.6.46/mysql.sock default-character-set=utf8 [mysqld] port = 3306 basedir=/usr/local/mysql-5.6.46 datadir=/usr/local/mysql-5.6.46/data socket = /usr/local/mysql-5.6.46/mysql.sock skip-external-locking key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M 将Mysql加入系统环境变量:
本文讲述3种方法,分别是:1. 将图片名写入txt文件;2. 根据txt文件中的图片名提取特定图像;3. 将图片插入word
将图片名写入txt文件(可将训练集、测试集中图片名分别记录在txt文件中) import os import random imgpath = 'C:/Users/123/Desktop/111/1/' txtsavepath = 'C:/Users/123/Desktop/111/5/' imgtxt = open('C:/Users/123/Desktop/111/5/test.txt', 'w') for img in os.listdir(imgpath ): name = img[0:-4] + '\n' imgtxt.write(name) imgtxt.close() 根据txt文件中的图片名提取特定图像(可根据txt文件找到测试集所有图片) import csv import shutil import os target_path = 'C:/Users/123/Desktop/111/5/' #保存文件夹地址 original_path = 'C:/Users/123/Desktop/111/1/' #需查找图片的原始地址 with open('C:/Users/123/Desktop/111/5/test.txt',"rt", encoding="utf-8") as csvfile: for row in csvfile: row = row.strip('\n')+'.bmp' if os.path.exists(target_path+row+'.bmp'): print("已存在文件") else: full_path = original_path+row #还没有 shutil.move(full_path,target_path+row) 将图片插入word from docx import Document from docx.
背景: 公司端口管控,22端口及3389端口不能正常使用,远程桌面功能受到限制
一. 隧道的概念 现实中隧道:在地层中开凿的两端有地面出入口的水平通道。
网络中隧道:是一种通过互联网基础设施在网络之间传递数据的方式。
SSH隧道的优点(Tunnel):
安全;点对点(一对一);快捷;完全免费 二. 目标机建立SSH 用OpenSSH 配置 SFTP 服务器 (OpenSSH for Windows)_Antony_WU_SZ的博客-CSDN博客_openssh sftp
三.本机安装并配置putty 1.进入官网 https://putty.org 或者直接去下载页下载putty.exe
Download PuTTY: latest release (0.77)
2.设置目标机IP及端口并填入端口号,并创建一个隧道名称
3.添加隧道入口和隧道出口
4.最后需要保存,否则设置不会生效
5.创建快捷方式, 并设置Target E:\005.Tool\putty.exe -load sshTunnels -l admin -pw xxxxxx 6.点击Open输入账户密码按钮或者启动快捷方式
7. Window+R 输入mstsc启动远程桌面连接,输入账户密码后
8.至此,大功告成。
JS判断对象或数组非空 1. if(obj)成立条件2. 判断不是空数组"[]"3. 判断对象是否为空"{}"4. 判断对象中是否包含指定key5. 遍历一个对象 1. if(obj)成立条件 let a = 0;//false let b = 0.0;//false let c = '';//false let d = ' ';//true let e = null;//false let f = "null";//true let g = undefined;//false let h = "undefined";//true let i = true;//true let j = false;//false let k = [];//true let l = {};//true let arr = [a, b, c, d, e, f, g, h, i, j, k, l]; for (let i = 0; i < arr.
提示:本文采用源码方式安装,原因是操控灵活,可以自定义增删模块;其他的方式想要实现增删模块操作不方便;
Linux系统安装Nginx超详 1. 安装make和g++1.1 安装make1.2 安装g++ 2. 安装Nginx依赖库2.1 执行yum -y install pcre pcre-devel2.2 执行 yum -y install zlib zlib-devel2.3 执行 yum install -y openssl openssl-devel 3. 安装Nginx3.1 下载Nginx安装包3.2 解压(打印内容太多没展示)3.3 进入安装目录3.4 执行自动配置3.5 编译并安装3.6 配置环境变量3.6.1 进入环境变量配置文件3.6.2 追加以下内容3.6.3 使环境变量生效3.6.4 启动Nginx3.6.5 检验Nginx是否启动成功 1. 安装make和g++ 1.1 安装make yum -y install autoconf automake make [root@senyang-computer-name /]# yum -y install autoconf automake make 已加载插件:fastestmirror, refresh-packagekit, security 设置安装进程 Loading mirror speeds from cached hostfile 包 1:make-3.81-20.el6.x86_64 已安装并且是最新版本 解决依赖关系 --> 执行事务检查 ---> Package autoconf.
新装centos时yum配置 镜像修改 镜像修改 编辑 /etc/yum.repos.d/CentOS-Base.repo 文件vi /etc/yum.repos.d/CentOS-Base.repo注释所有的mirrorlist;将baseurl修改为国内的镜像,我修改的是清华大学镜像;
4.1 注意事项
4.1.1 我的centos版本是6.6,即$releasever = 6.6
4.1.2 $basearch = x86_64 # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead.
在制作分割数据集时需要对图像进行标注,但标注过程比较耗时,因此想到通过画图填充的方法制作mask标签,从而节省时间。(注:最好图片格式为png)
对图像进行画图填充调整像素值
填充后的图像存在一个问题,如填充为红色,像素值应为(255,0,0),但实际填充后像素值可能为(240, 0,0),从而造成像素值存在误差,而图像分割实质是根据像素值进行分类,因此结果可能会造成存在多余类别。因此需对像素值进行调整。代码如下: #黑色(0,0,0) #红色(255,0,0) #蓝色(0,0,255) import os from PIL import Image path = 'C:/Users/123/Desktop/1/' savedpath = 'C:/Users/123/Desktop/2/' filelist = os.listdir(path) for item in filelist: im = Image.open(path + item) # 打开图片 pix = im.load() # 导入像素 width = im.size[0] # 获取宽度 height = im.size[1] # 获取长度 for x in range(width): for y in range(height): r, g, b = im.getpixel((x, y)) g = 0 if r <= 50: r = 0 if b <= 50: b = 0 else: b = 255 if r > 50 and b <= 50: r = 255 b = 0 if r > 50 and b > 50: if r > b : r = 255 b = 0 else: r = 0 b = 255 rgb = (r, g, b) im.
最近几天调试N网项目,因为要兼容东方通中间件,分析发现有了bcprov-jdk15on包冲突的问题,针对这类型个人试了一下几点处理方案。其中有不少前辈的处理方案,个人做一个总结归纳。
前面是在tomcat等环境下直接用,最后一种是本人使用的方法,也是个人决定根治的方法。
第一种 直接删除比较低的那个版本的jar包
通常情况下,高一个小版本的jar都会兼容低版本的功能,这是大多数开发者都会准守的规则。直接把较低版本的那个jar包删除即可。
第二种 高版本覆盖合并
直接以搞版本覆盖低版本。通常建议只需要高一个小版本即可。如A项目用1.51,B项目用1.52.那么直接用1.52包替换1.51的包即可。使用相同源的包不会出现冲突。经过反编译处理过的包除外。附带maven仓库地址,可以直接去下载https://mvnrepository.com/
第三种 修改引用包路径处理:
如果是D.jar包当中包含了引用的包,那就考虑反编译出来,然后修改包里面的引用路径。
即: 把org.bouncycastle 改成 shade.bouncycastle等。这样子处理,
网上有很多种方法,如maven-shade-plugin重新构建新jar包等。本人不太擅长用这个方法,
本人用了打包工具jarjar
1.下载jarjar1.3.jar 的工具包。可以用maven,也可以直接去maven仓库下载
<dependency> <groupId>com.googlecode.jarjar</groupId> <artifactId>jarjar</artifactId> <version>1.3</version> </dependency> 2.新建rule.txt 文件,并在其中 保存以下内容。这个shade.bouncycastle 可以自定义引用目录
rule org.bouncycastle.** shade.bouncycastle.@1 3.把这几个文件都放在同一个目录中,注意目录名称不要带汉字。
\ 4.通过cmd,进入这个目录当中,然后运行以下命令
java -jar jarjar-1.3.jar process rule.txt bcprov-jdk15on-1.65.jar shade-bcprov-jdk15on-1.65.jar 5.如此便完成了替换
6.通过反编译工具,我们可以看到已经替换的目录。反编译工具很多,包括jd-gui、jadx、bandizip等等,大家可根据自己的情况使用。
具体问题:
Access to XMLHttpRequest at ‘http://localhost:8082/admin/login’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
运行环境:SpringBoot+Vue+Axios
问题描述:准备利用axios搭建一下前后端进行连接,然后在最后交互的时候发生问题。
截图描述:
解决方法:跨域问题。
在这里可以在网上找一下解决方案:我这里主要用了两种:
(1)加注解
(2)写一个配置文件
package com.blog.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class AccessControlAllowOriginFilter implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry){ registry.addMapping("/*/**") .allowedHeaders("*") .allowedMethods("*") .maxAge(1800) .allowedOrigins("*"); } } 总结;解决跨域问题的方法有很多,可以再前端进行问题解决,因为是最近刚开始做和前端相关的东西,然后不太熟练,如果以后有机会的话,在完善一下此贴!!!
对了贴一个地址:https://blog.csdn.net/weixin_39255905/article/details/124341670
这里面有很多解决跨域问题的,但是有的我试了不行,不过上面的两种方法亲测可使用,不知道是不是因为SpringBoot版本的原因。问题解决,撒花撒花!!!!
Vue:
是一套用于构建用户界面的渐进式框架,自底层向上应用,Vue的核心库只关注视图层,容易入门,可以和第三方库或者已有的项目进行整合,可以做复杂的单页应用。
同时与React、Angular称三大主流框架。
中文官网:v2.cn.vuejs.org
英文官网:v2.vuejs.org
Vue创始人:尤雨溪 特点:
1、结合了angular的指令与react的组件,虚拟dom
2、渐进式JavaScript框架【渐进式:由浅入深,相对难度的项目可以用相对程度的功能】
Vue优点:
1、Vue的API文档的汉化程度较为成熟.
2、 vue作为一款轻量级框架,门槛低,上手快,简单易学。
3、可以进行组件化开发,数据与结构相分离,代码量减少,提升开发效率,易于理解。
4、数据进行双向绑定,使用虚拟DOM。
5、相较于传统页面通过超链接实现页面跳转,vue会使用路由跳转不会刷新页面。
6、vue是单页面应用,页面局部刷新,不用每次跳转都请求数据,加快了访问速度,提升了用户体验。
Vue框架:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <!-- 创建一个Vue可选区域id为vuebox --> <div id="vuebox"> <h1>{{msg}}</h1> <!-- 文本传入h1里边 --> </div> </body> <script src="./js/vue.js"></script> <script> new Vue({//实例化一个Vue对象 el:"#vuebox",//选中区域进行操作 data:{ // 数据存储所放区域 msg:"我在这输入文本", }, }) </script> </html>
安装Laravel 通过Composer安装 composer create-project laravel/laravel example-app cd example-app php artisan serve 通过Laravel安装器 或者,你可以通过 Laravel 安装器作为全局 Composer 依赖:
composer global require laravel/installer laravel new example-app cd example-app php artisan serve 请确保将 Composer 的全局 vendor bin 目录放置在你的系统环境变量 $PATH 中,以便系统可以找到 laravel 的可执行文件。在不同的操作系统中,该目录的路径也不相同;下面列出一些常见的位置:
macOS: $HOME/.composer/vendor/binWindows: %USERPROFILE%\AppData\Roaming\Composer\vendor\binGNU / Linux Distributions: $HOME/.config/composer/vendor/bin or $HOME/.composer/vendor/bin 为方便起见,Laravel 安装程序还可以为你的新项目创建一个 Git 仓库。如需创建 Git 仓库,请在创建新项目时通过 --git 指定:
laravel new example-app --git 此命令将为你的项目初始化一个新的 Git 仓库并自动提交基础的 Laravel 框架。使用 git 命令前请确保你已正确安装并配置 Git。你还可以使用该 --branch 命令来设置初始的分支名称:
文章目录 DMA传统I/O利用DMA的IO 零拷贝mmap + writemmap详解 sendfile真正的零拷贝 为什么需要内核缓存区?大文件传输:异步IO+直接IO总结 DMA 直接内存访问(Direct Memory Access)
什么是DMA?
在进行数据传输的时候,数据搬运的工作全部交给 DMA 控制器,而 CPU 不再参与,可以去干别的事情。
传统I/O 在没有 DMA 技术前,全程数据拷贝都需要CPU来做,严重消耗CPU。
利用DMA的IO 利用DMA之后:
4次数据拷贝,其中DMA和CPU分别拷贝2次(CPU的时间多宝贵啊)2次系统调用导致的4 次用户态与内核态的上下文切换 DMA 控制器进行数据传输的过程:
用户进程调用 read 方法,向操作系统发出 I/O 请求,请求读取数据到自己的用户缓冲区中,进程进入阻塞状态,用户态切换至内核态;
操作系统收到请求后,进一步将 I/O 请求发送 DMA,然后让 CPU 可以执行其他任务;
DMA 进一步将 I/O 请求发送给磁盘;
磁盘收到 DMA 的 I/O 请求,把数据从磁盘读取到磁盘控制器的缓冲区中,当磁盘控制器的缓冲区被读满后,向 DMA 发起中断信号,告知自己缓冲区已满;
DMA 收到磁盘的信号,将磁盘控制器缓冲区中的数据拷贝到内核缓冲区中,此时不占用 CPU,CPU 可以执行其他任务;
当 DMA 读取了足够多的数据,就会发送中断信号给 CPU;
CPU 收到 DMA 的信号,知道数据已经准备好,于是将数据从内核拷贝到用户空间,系统调用返回,内核态切换至用户态;
利用DMA的IO完整流程图:
DMA 的工作方式如下:
1、CPU 需对 DMA 控制器下发指令,告诉它想读取多少数据,读完的数据放在内存;
2、接下来,DMA 控制器会向磁盘控制器发出指令,通知它从磁盘读数据到其内部的缓冲区中,
ls:查看目录下的内容(不包括隐藏文件)前缀为.的为隐藏文件 ls [操作选项]
ls -a/ls --all:查看一切文件(包括隐藏文件)
ls -c:查看一切文件并按生成时间排序(不包括隐藏文件)
ls -A:查看一切文件名,不包括(..) ls -l:长列表格式
ls -h: 查看一切文件名(除了.和..)
ls -n:显示uid、gid
cd:目录跳转 cd 目录名
pwd:打印工作目录 pwd [操作选项]
-L:显示逻辑工作目
-P:显示物理工作目录
cp:拷贝 cp [操作选项] 文件名 目录名
-i:复制文件,若文件存在,询问用户是否继续复制
-r:递归复制 当复制dir目录时用-r复制
-a:pdr的集合 相当于-p -d -r一起的效果
-p:连同文件属性一起拷贝 -----------这个就不用做演示了,字面意思
-d:若源文件为连接文件的属性,则复制连接文件 -----------这个就不用做演示了,字面意思
-s:拷贝为软连接
-l:拷贝为硬链接
-u:源文件比目的文件新才拷贝 -----------这个就不用做演示了,字面意思
mv:移动文件及目录 mv 文件名 目录名 -i:移动时,Linux会叫你确认是否移动
-f:强制移动
-u:版本必须更新才能移动
rm:删除文件及目录 rm 文件名
-i:互动模式,删除时,Linux会叫你是否确认移动
-r:递归删除 -----------------字面意思
-f:强制删除 -----------------字面意思
mkdir:创建目录 mkdir 新建目录名
-p:自动创建父目录 由于没有test目录,那肯定没有test/test以及test/test/test目录,直接mkdir是不能创建的,那么mkdir -p test/test/test就会直接生成当前目录下的test目录以及test/test目录以及test/test/test目录 -m:设置权限 -----------------不知道咋设置
1. 按比例划分分类所需数据集
import os import random import shutil import time def copyFile(fileDir, class_name): image_list = os.listdir(fileDir) # 获取图片的原始路径 image_number = len(image_list) train_number = int(image_number * train_rate) train_sample = random.sample(image_list, train_number) # 从image_list中随机获取0.8比例的图像. test_sample = list(set(image_list) - set(train_sample)) sample = [train_sample, test_sample] # 复制图像到目标文件夹 for k in range(len(save_dir)): if os.path.isdir(save_dir[k] + class_name): for name in sample[k]: shutil.copy(os.path.join(fileDir, name), os.path.join(save_dir[k] + class_name+'/', name)) else: os.makedirs(save_dir[k] + class_name) for name in sample[k]: shutil.
目录 前言数值运算序列(列表、元组)解包函数声明的时候作为函数形参函数调用的时候作为函数实参 前言 由于之前主要用的是C/C++,总把python中的*,**看成与指针相关,其实python中是没有指针的,如果看成指针那么程序一定看不懂。这里查阅了一些资料,对python中的 * 与 **的用法做一个总结。总的来说,python中*与 **的作用一共有四个,分别是数值计算、序列解包、函数声明的时候作为函数形参、函数调用的时候作为函数实参。注意,数值运算与序列解包中没有 **用法
数值运算 这个没啥可说的了,就是乘法:
a = 5 b = 6 c = a * b 序列(列表、元组)解包 先看一个例子吧:
list = [1,2,3,4,5] a,b,*c =list print('a=',a) print('b=',b) print('c=',c) 结果如下:
通过上面的代码,*号的作用也就一目了然了,*号让c能接收列表中剩下的所有的参数,这样在序列解包的时候我们的灵活度就大大提高了,比如我们用3个变量就能接受长度为5的序列中的所有的值。
函数声明的时候作为函数形参 大家应该会经常看到类似这样的函数:def function( * arg,** kwargs): ,这里的* arg与**kwarg都是为了接受不定长参数的。其中*arg是位置参数,用于接受不定长的无名参数,本质是一个元组,**kwargs是关键字参数,本质是一个字典。还有一点arg,kwargs就是一个变量名,换成 *a,**b效果是一样的。接下来看代码:
def function(*args,**kwargs): print(args) print(kwargs) print(args[0]) print(kwargs['b']) my_list = [1,2,3,'a','b'] my_dict = {'a':1,'b':0,'c':2} function(*my_list,**my_dict) 结果如下图所示:
函数调用的时候作为函数实参 如果函数的参数是固定长度的,我们可以通过*arg或者**kwarg一次性传递,而不用分别给每个参数传递值。具体如下:
class test(object): def __init__(self,arg,list,name='nihao'): self.arg = arg self.list = list self.
序言 在经济周期性波动以及消费互联网逐渐进入成熟期等背景下,靠一张PPT说动投资者,靠增长掩盖亏损的时代慢慢过去了,取而代之的是追求确定性,追求生产力的提升,追求单位成本真正的降低。
追求单位成本的降低是目的,而如何实现是手段,能降低单价的方法都是技术生产力的提升。大家都知道技术是第一生产力,而技术生产力提升,宏观上就是能降低单价,从而在M2不断增加的情况下,让人人能享受优质的互联网服务。
互联网服务拼产品、运营、技术。技术如果能让单位服务的运营成本降低,就更能提升服务的吸引力。产品的迭代效率和成本可能冲突,而构建快速的响应能力,并能比竞争对手更加便宜的价格,需要考验组织力了。
在做成本评估时,特别是内部工具时,因为兄弟公司相关数据未公开,缺乏行业标准,从而导致缺铆,无法评估到底做的好,还是不好,到底能发几个月年终奖。而且技术人员基本采用固定薪酬,有时候是大锅饭,而不像销售是底薪加提成,这个就需要团队有很强的自驱力和成本意识。最好的研发人员是把自己当成小作坊的CEO,既是推销人员,又是财务人员,还是研发人员,这样在做相关技术选型和实现时,就可以很好的平衡运营成本和迭代效率,还能兼顾产品的体验。
做资源优化有OWNER意识后,就容易做短期的优化,并兼顾长效机制。
短期优化 短期优化,一般有很多手段。不同服务可能有不同特点,本文将列一些常用优化手段。
①列好大目标,协商到足够的人力支持;列好小目标,方便拆解到个人,也方便管理。有些好做的,有些需要技术探索的,都需要人力来支持。做事主要是分工的不同,每个人在生产力提升上,都能贡献自己的产出。
②成本落实到组织、个人。需要将成本单元划分到组织和个人,这样一方面能激发团队和个人思考的积极性,一方面好摊派指标。真正全策全力,能更好的进行成本优化,也能节省管理成本。
③缩容,下线无效服务项:资源利用率不高的服务直接缩容;无效报表、无效数据等服务项沟通后大胆删除。如何识别服务项是否有效的一个方法是,将相关服务项的成本分摊给使用方,如果对方愿意承担,说明是有效服务项,如果不愿意承担,说明是无效服务项
④降低数据精确度。有些场景,提高1%的精度,需要增加10倍资源,降低1%的精度,可以降低90%的成本,其中可以基于业务诉求,进行取舍。大数据时代,计算非常精确的数据,需要实时上报,大量的存储和计算资源。受到上报环境的影响、计算机本身以离散数据为基础,会导致需要大代价计算绝对精确的值,如现在的日活等核心场景,都不是100%绝对精确。在一些实时监控等场景,每天可能上报十亿甚至百亿数据,而计算uv、分位值又存在较大的计算复杂度,真实业务又不需要数据100%可靠,整体链路就可以采用估算的方式来节省端到端的资源。如抽样上报、延迟上报,采用hll等数据结构计算uv等,相关算法实现可以参考apache 顶级项目:datasketches,来节省资源,而整体的业务效果又基本不受影响。
⑤解决技术债:一般开发可能知道服务的优化项,也可以找团队其他成员把脉,修复常用的技术债
复用链路,节省重复建设成本。利用缓存等经典进行改造服务节省大量计算资源。分区等机制保障数据按需消费,节省IO。
长效机制 成本优化不是一蹴而就的,需要采用长效机制防止短期优化后,成本的反弹,实现基业常青。比较好的做法有成本责任制、人才选拔、资源管理、退场机制、服务平滑升级、云原生、技术探索等。
① 成本责任制,将成本划给对应的组织和个人,并敦促其进行长期优化。一些公司的组织经常变更,需要良好的IT系统支持成本转移。笔者曾经负责过某老牌互联网公司的性能中台建设,当时治理崩溃等性能时,也涉及到很多团队,我们通过一些技术手段,将异常归因到代码提交者和子团队,谁引起的,谁治理;同时有专人负责性能优化。慢慢实现了性能的稳步提升,消费者使用产品时,能有较好的愉悦感。消费者是能感受到谁在认真做产品,谁在为用户体验真正着想。后来在很多互联网公司产品受到字节等新势力冲击时,还能实现日活的稳步增长。
② 人才选拔,和团队利益一致,技术好,owner意识强、自驱力强等的人才更能得到提拔。一些功能实现时,技术思维是将计算机、开源工具当成工具,会常常思考空间复杂度和时间复杂度、模块化、能力复用等,这样既利于维护,也能较好的节省资源。
③团队中找个手紧的人负责资源管理。话说有的人手松,有的人手紧,性格使然,做事方向也不尽相同。同等条件下,个人觉得资源把控时,找那些手紧的人看着,可能效果更好。
④退场机制,需要用技术手段,自动识别长时间无人用的产品和服务,并对其进行下线。部分服务突然没人用,有很多因素,最可能是互联网场景有很强的不确定性。比如最近很多公司陆续停掉了一些产品,就是大胆试错后,发现无法适应环境需要退场,以保障核心航道有足够的资源投入。
⑤服务平滑升级是指在做平台升级时,能做好向前向后兼容,而不盲目造轮子,这样可以在提升自己产出时,节省很多用户的时间,从而不会因为自己产出高了,客户成本变高了,从而整体成本却很高。
⑥云原生可以实现弹性伸缩,很好的规避流量低峰期的资源浪费,流量高峰期又可以自动扩容,满足业务需求,真正做到资源按需使用。
⑦技术探索:在一些关键领域进行技术探索,可能能达到生产力的数量级的提升。比如研究出革命性黑科技,直接将机器成本降低到可以忽略的程度。
1.修改文件vim /etc/my.cnf
在最后一行加入skip-grant-tables 后可以免密登录
2.重启mysql :
systemctl restart mysql 3.登录 mysql -u root
更改密码策略 set global validate_password_policy=LOW;
修改root密码为空
update user set authentication_string='' where user='root';
注销最后一行免密设置;
4.重启mysql :
systemctl restart mysql ;
重新登录 mysql -u root 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密码';
切片
一张图片,剪切为n张
import os.path from PIL import Image import sys import torchvision.transforms as transforms # 图片的切块 def cut_image(image, patch_num): width, height = image.size item_width = int(width / patch_num) item_height = int(height / patch_num) box_list = [] # (left, upper, right, lower) for i in range(0 ,patch_num) : # 两重循环,生成n张图片基于原图的位置 for j in range(0 ,patch_num): # print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width)) box = ( j *item_width , i *item_height ,( j +1 ) *item_width ,( i +1 ) *item_height) box_list.
1. 镜像:
#a:对角镜像,相当于旋转180°
#h:水平镜像
#v:垂直镜像
#镜像 #a:对角镜像,相当于旋转180° #h:水平镜像 #v:垂直镜像 import cv2 import math import numpy as np import os import glob import json import shutil import xml.etree.ElementTree as ET from xml.etree.ElementTree import ElementTree, Element def h_MirrorImg(img_path,img_write_path): img = cv2.imread(img_path) mirror_img = cv2.flip(img, 1) # cv2.imwrite(img_write_path,mirror_img) def v_MirrorImg(img_path,img_write_path): img = cv2.imread(img_path) mirror_img = cv2.flip(img, 0) # cv2.imwrite(img_write_path,mirror_img) def a_MirrorImg(img_path,img_write_path): img = cv2.imread(img_path) mirror_img = cv2.flip(img, -1) # cv2.imwrite(img_write_path,mirror_img) def h_MirrorAnno(anno_path,anno_write_path): tree = ET.
文章目录 前言一、数据模型1.什么是数据模型2.数据模型的基本要素(1)数据结构(2)数据操作(3)数据的约束条件 二、关系数据模型1.关系数据模型的基本概念(1)关系实例(2)关系模式(3)关系数据库 2.关系数据模型的数据结构(1)元组(2)属性(3)域(4)分量例子1:(5)键(6)候选键(7)主键(8)外键例子2 3.关系数据模型的数据操作4.关系数据模型的数据约束5.关系数据模型的优缺点(1)优点(2)缺点 三、关系1.域、笛卡尔积和关系(1)域(2)笛卡尔积基数笛卡儿积例子 (3)关系单元关系与二元关系关系的表示 2.关系的性质3.关系模式和关系的区别4.关系数据库模式5.关系数据库相关(1)关系数据库的型和值(2)关系数据库的物理组织 6.关系完整性(1)空(2)实体完整性规则(3)关系间的引用(4)外键(5)参照完整性规则(6)用户自定义完整性 总结 前言 本文主要讲解了关系型数据库的相关知识,涉及关系数据模型和关系的知识
一、数据模型 1.什么是数据模型 数据模型是一组集成的概念,用于描述和操作组织内的数据、数据间的联系,以及对数据的约束。
数据模型是数据库系统的核心和基础。各种机器上实现的DBMS软件都是基于某种数据模型
2.数据模型的基本要素 数据结构是对系统静态特征的描述,数据操作是对系统动态特性的描述。
(1)数据结构 数据结构是:
1.与数据类型、内容、性质有关的对象,如网状模型中的数据项、记录,关系模型中的域、属性、关系等
2.与数据之间联系有关的对象 ,如网状模型中的系型(Set Type)
(2)数据操作 数据操作是指对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则
数据库主要有检索和更新两大类操作。
(3)数据的约束条件 数据的约束条件是一组完整性规则的集合
数据模型应该反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。此外,数据模型还应提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件
二、关系数据模型 1.关系数据模型的基本概念 (1)关系实例 关系实例是由命名的若干列和行组成的表格。
要强调的是:
一般情况下,关系指代实例。
(2)关系模式 关系模式是对关系的描述。关系模式通常可以简记为:
R ( U ) 或 R ( A 1 , A 2 , … , A n ) R (U) 或 R (A1,A2,…,An) R(U)或R(A1,A2,…,An)
关系模式可以形式化地表示为:
R ( U , D , d o m , F ) R(U,D,dom,F) R(U,D,dom,F)
前言: github 新建一个仓库,从本地代码push到github仓库,之后继续维护。
初次使用Git的设置
step 0 : 本地初次使用git 的设置 1、本地命令行配置
git config --global user.name "用户名" git config --global user.email 自己的邮箱 git config --list ssh-keygen -t rsa -C "与github关联的邮箱" 2、添加ssh and GPG keys:
(1)进入https://github.com/,选择settings选项
(2)进入settings界面后点击选择SSH and GPG keys选项,再点击选择“new SSH key”添加新的SSH Key。
(3)将.ssh文件夹下的id_rsa.pub文件中的内容复制到github中,点击Add SSH Key按钮即可生成,如下
3、验证本地仓库与Github之间传输是否成功
ssh -T git@github.com step 1 : 在github中建立一个repository step 2 : 首次将本地code传到远程端配置 1.到执行目录初始化
git init 2.添加至本地暂存区
git add . 3.提交到本地git仓库
git commit -m "first commit" git branch -M main 4.
文章目录 一、SwipeRefreshLayout简介二、常用方法三、基本使用四、进阶使用 一、SwipeRefreshLayout简介 SwipeRefreshLayout是官方提供的下拉刷新解决控件,具有使用简单,灵活等特点。不足的地方,不可以自定义刷新的头部和加载更多功能。不过通过修改SwipeRefreshLayout可以轻松实现这些功能,本文只介绍使用和对各个方法进行说明。
在实际开发中多对SwipeRefreshLayout二次封装,更改刷新UI。
SuperEasyRefreshLayout是一个非常强大的二次封装控件,不仅美化了刷新UI,而且可以根据需要自定义UI效果的View,且实现了上拉加载更多的功能。
SuperEasyRefreshLayout的使用介绍的地址是:http://blog.csdn.net/fightingxia/article/details/75307875
SuperEasyRefreshLayout的源码在GitHub上的地址是:https://github.com/guozhengXia/SuperEasyRefreshLayout
二、常用方法 方法解释setColorSchemeResources(int…colorReslds)设置下拉进度条的颜色主题,参数可变,并且是资源id,最多设置四种不同的颜色。setProgressBackgroundSchemeResource(int coloRes)设置下拉进度条的背景颜色,默认白色。isRefreshing()判断当前的状态是否是刷新状态。setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener)设置监听,需要重写onRefresh()方法, 顶部下拉时会调用这个方法,在里面实现请求数据的逻辑,设置下拉进度条消失等等。setRefreshing(boolean refreshing)设置刷新状态,true表示正在刷新,false表示取消刷新 三、基本使用 1.首先在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' 1 **> 可能会遇到的错误:
1.无法加载 android.support.v4.widget.SwipeRefreshLayout
解决:android.support.v4.widget.SwipeRefreshLayout改为androidx.swiperefreshlayout.widget.SwipeRefreshLayout**
2.在xml添加引入SwipeRefreshLayout的代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <span class="token operator"><</span>androidx<span class="token punctuation">.</span>swiperefreshlayout<span class="token punctuation">.</span>widget<span class="token punctuation">.</span>SwipeRefreshLayout android<span class="token punctuation">:</span>id<span class="token operator">=</span><span class="token string">"@+id/refreshLayout"</span> android<span class="token punctuation">:</span>layout_width<span class="token operator">=</span><span class="token string">"wrap_content"</span> android<span class="token punctuation">:</span>layout_height<span class="token operator">=</span><span class="token string">"wrap_content"</span> android<span class="token punctuation">:</span>text<span class="
最近几天遇到一个很讨厌的问题,就是鼠标在选中文本或点击搜索框或url地址栏时,形如“I”的光标就会变成白色,与背景融为一体,找光标找到崩溃,导致搬砖的效率极低,后面就开始通过对鼠标的设置尝试解决此问题,坚持不懈地试了很多次才成功解决!
解决方法如下:
1.首先打开控制面板,打开硬件和声音,找到鼠标,即可进行设置。
2.进行以下操作:
只要选择不是系统默认的都可以。
基于ECS搭建云上博客 演示了在 ECS云服务器(CentOS7)的环境下,通过部署 LAMP环境并安装 WordPress 快速搭建个人博客。
背景知识 云服务器ECS 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。
LAMP LAMP是指Linux(操作系统)+Apache(HTTP 服务器)+MySQL(数据库)和PHP(网络编程语言),一般用来建立Web应用平台。与Java/J2EE 架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点。与微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势。因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
WordPress WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQ数据库的服务器上架设WordPress。你可以使用WordPress搭建一个简单的独立博客,也可以把WordPress当作一个内容管理系统(CMS),用来搭建一个小门户网站,总之,现在的WordPress已经强大到几乎可以搭建目前所有常见类型的网站,比如门户、下载站、淘宝客、论坛、多博客等等。
首先根据操作连上公网的云服务器
1)执行如下命令,安装Apache服务及其扩展包。
yum -y install httpd mod_ssl mod_perl mod_auth_mysql 2)执行如下命令,查看Apache是否安装成功。
httpd -v 返回结果如下所示,表示您已成功安装Apache。
执行如下命令,启动Apache服务。 systemctl start httpd.service 在远程桌面,双击打开Firefox ESR浏览器。 在Firefox ESR浏览器的址栏中,访问http://ECS公网地址。 说明 :您需要将ECS公网地址替换为云产品资源列表中的ECS公网地址。
若返回页面如下图所示,说明Apache服务启动成功。
二、执行如下命令,安装MariaDB Server。
yum install -y mariadb-server 返回如下命令,表示您已安装完成MariaDB Server。
执行如下命令,启动MariaDB Server。 systemctl start mariadb 执行如下命令,查看MariaDB Server运行状态。 systemctl status mariadb 返回结果如下,您可以看到active (running)时,表示MariaDB Server启动成功。
执行如下命令,设置数据库root用户的初始密码。(出现Enter Password提示符的时,直接回车) mysqladmin -u root -p password 返回如下结果,由于您是第一次设置数据库密码,因此在出现Enter Password提示符的时,直接回车即可。
dayjs获取当日的0点和23.59.59 其实官网里就有描述,慢慢看文档 时间开始 的章节
具体代码:
dayjs().startOf('date').format('YYYY-MM-DD HH:mm:ss'), dayjs().endOf('date').format('YYYY-MM-DD HH:mm:ss') 官方描述
时间的开始 返回复制的 Day.js 对象,并设置到一个时间的开始。 dayjs().startOf('year') 各个传入的单位对大小写不敏感,支持缩写和复数。 支持的单位列表: 单位 缩写 描述 date D 当天 00:00 day d 当天 00:00 month M 本月1日上午 00:00 quarter Q 本季度第一个月1日上午 00:00,依赖 QuarterOfYear 插件 year y 今年一月1日上午 00:00 week w 本周的第一天上午 00:00 isoWeek 本周的第一天上午 00:00 (根据 ISO 8601) , ( 依赖 IsoWeek 插件 ) hour h 当前时间,0 分、0 秒、0 毫秒 minute m 当前时间,0 秒、0 毫秒 second s 当前时间,0 毫秒 # 时间的结束 返回复制的 Day.
table tbody {
display: block;
max-height: 270px;
overflow-y: auto;
}
table thead,
tbody tr {
display: table;
width: 100%;
table-layout: fixed;
}
根据json文件中的坐标剪切图像
import numpy as np import cv2 import os import json import xml.etree.cElementTree as ET def drawxml(xmlpath,im): tree = ET.ElementTree(file=xmlpath) print("resoluting...") root = tree.getroot() for obj in root: if obj.tag == 'object': objectname = obj[0].text # object name box = [] print('name:' + objectname) for bndbox in obj: for sub in bndbox: box.append(int(sub.text)) # bndbox box = np.array(box) # print(box) cv2.rectangle(im,(box[0],box[1]),(box[2],box[3]),(0,255,0),2) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(im,objectname,(box[0],box[1]),font,0.8,(255,255,255),2,cv2.LINE_AA) return im def drawjson(jsonpath, im): xList=[] yList=[] jsonobj = json.
vue3的 setup中是获取不到this的,为此官方提供了特殊的方法,让我们可以使用this,达到我们获取全局变量的目的。 1. 建立useCurrentInstance.ts import { ComponentInternalInstance, getCurrentInstance } from 'vue'; // 添加断言 export default function useCurrentInstance(){ const { appContext } = getCurrentInstance() as ComponentInternalInstance; const proxy =appContext.config.globalProperties; return { proxy } } 2. main.js中定义我们的全局变量 import { ElMessage } form "elementPlus" app.config.globalProperties.$message = ElMessage; 3. 页面中使用 import useCurrentInstance from "../useCurrentInstance"; const { proxy } = useCurrentInstance(); proxy.$message({type:"warning",message:"请输入密码"})
antd3.x 的Table组件,设置横向滚动,如果没有数据,横向滚动条会展示在暂无数据的上方,现在想要把暂无数据展示在滚动条的上面
原本
效果
解决方法 将antd3.x升级到antd4.x,因为antd4的table组件已经解决了这个bugantd3.x 和 antd4.x 共存,调用antd4的table组件修改样式,实现滚动条在暂无数据下方 这里主要讲第三点 思路:表单无数据的时候,把 ant-table-tbody(表单内容) 撑高,然后通过绝对定位把 ant-table-placeholder (暂无数据的div)脱离文档流,移动上去
上代码
.scrollH .ant-table-tbody{ height: 168px; } .scrollH .ant-table-placeholder{ position: absolute; width: 100%; top: 51px; z-index: 5; } 大功告成👍👍👍
设备:拯救者Y9000P
系统:win11
问题:正版office2019 pro和office2021 pro中,word文档中的鼠标指针在滚动鼠标滚轮后消失。
解决方案:卸载所有office,安装office2021学生与家庭版,并用密钥清理工具清除密钥。其中office2021学生与家庭版是拯救者Y9000P赠送的永久正版,如果不小心卸了可以问客服要安装包。
注意:如果需要visio等额外应用,应该先安装visio等,再安装office2021学生与家庭版。建议visio也安装2021版本。
数据集快速生成方法集合 一、numpy生成随机数据1) rand(d0, d1, ..., dn)2) randn((d0, d1, ..., dn)3) randint(low[, high, size])4) random_integers(low[, high, size])5) random_sample([size]) 二、sklearn生成随机数据2.1 回归模型随机数据3.2 分类模型随机数据3.3 聚类模型随机数据3.4 分组正态分布混合数据 三、seaborn自带数据集(22个)四、pyod.utils.data生成数据集五、vega_datasets自带数据集(17个)六、各平台公开数据集 在学习机器学习算法的过程中,我们经常需要数据来验证算法,调试参数。但是找到一组十分合适某种特定算法类型的数据样本却不那么容易。下面介绍一些我搜集和整理的数据集快速生成方法及案例:
一、numpy生成随机数据 参考资料:
机器学习算法的随机数据生成
numpy比较适合用来生产一些简单的抽样数据。API都在random类中,常见的API有:
1) rand(d0, d1, …, dn) 用来生成d0×d1×…dn维的数组 。数组的值在[0,1)之间
例如: np.random.rand(3,2,2),输出3×2×2的数组
array([[[ 0.49042678, 0.60643763],
[ 0.18370487, 0.10836908]],
[[ 0.38269728, 0.66130293],
[ 0.5775944 , 0.52354981]],
[[ 0.71705929, 0.89453574],
[ 0.36245334, 0.37545211]]])
2) randn((d0, d1, …, dn) 也是用来生成d0xd1x…dn维的数组。不过数组的值服从N(0,1)的标准正态分布。
例如:np.random.randn(3,2),输出如下3x2的数组,这些值是N(0,1)的抽样数据。
array([[-0.5889483 , -0.34054626],
[-2.03094528, -0.21205145],
[-0.20804811, -0.
目录
主要功能介绍:
1、先搭建框架
2、html和css代码
三、jquery代码
原生js的轮播图也写过,如需观看请您移步我的其他文章~
主要功能介绍: 鼠标移动到轮播图中显示左右按钮,轮播图片的定时器停止
鼠标移出轮播图隐藏左右按钮,轮播图片的定时器开始
动态创建下面的小圆点
无缝滚动效果
点击左右按钮能切换图片,点击小圆点也能切换到对应的图片中,定时器切换图片
使用时间阀,只有点击左右按钮图片运动完成之后,点击左右按钮才能再次滚动,防止点击左右按钮次数过多,图片滚动过快的情况
1、先搭建框架 标签如下图所示
2、html和css代码 如下图所示,简单写一下,重要是学习jquery代码 html代码:
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>轮播图</title>
<link rel="stylesheet" href="jquery.min.js">
<link rel="stylesheet" href="index.css">
<script src="jquery.min.js"></script>
<script src="index.js"></script>
</head>
<body>
<div class="focus">
<ul id="slide">
<li>
<img src="images/1.jpg" alt="">
</li>
<li>
<img src="images/2.jpg" alt="">
</li>
<li>
<img src="images/3.jpg" alt="">
</li>
<li>
<img src="images/4.jpg" alt="">
</li>
<li>
<img src="images/5.jpg" alt="">
原文链接:http://t.csdn.cn/fwOOc
博主分出来的145GB的E盘空间,右键属性查看占用空间剩余只剩不到几百MB了,进入E盘后全选所有文档(包括查看隐藏文件和可读文件的前提下),,所有文件占用空间只有50多个G。
在清理垃圾删除部分应用后,磁盘空间也没有太大的变化,博主的E盘也没装啥特别的东西,偶然发现咋硬盘居然只剩这么点空间了!!!
后来博主想要把E盘备份之后,进行格式化,在备份的时候发现,复制E盘确实需要140多个G的空间,由此可以排除,病毒恶意占有磁盘空间的可能性。在一个个文件夹复制查看大小之后(直接查看文件夹大小没有用),才发现Microsoft SQL Server名义上占用了5G,实际占用了100个G的磁盘空间!!!
问题的分析
在询问了一些计算机系的教授和博客之后,怀疑是数据库日志文件的恶意增长导致占用了大量的磁盘空间!!csdn和各大博客上面建议我使用DBCC命令对数据库和数据库日志文件进行压缩,但是对我遇到的情况没有任何的作用!!(各位小伙伴可以查阅博客去试一试这种方法,因为博主失败了,在这就不赘述失败经历了)
问题的解决
废话不多说,直接讲解决方法!
博主安装的是Microsoft SQL Server 2019,在安装的时候有一个SQL Server 2019和一个SQL Server 2019的可视化应用,二者是分开安装的,我们需要找到的是SQL Server 2019的安装路径。
(如图找到SQL Server 2019)
进入第二个文件夹(小伙伴们可以一个一个进行复制,找到恶意占用内存的文件夹,这里只是博主的恶意日志文件所在地)
点击第一个文件夹MSSQL
向下找到Log(日志)文件夹
找到Polybase文件夹
进入dump
将这里面,除去最后一个文本文件以外的所有的日志文件全部删除(需要管理员授权删除),可以看到每一个日志文件都有500mb大(博主的SQL Server又已经开始在恶意增长了!!之前是删干净的)
一下子就空敞了不少呢!!
————————————————
版权声明:本文为CSDN博主「Carmelo_7」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Carmelo_7/article/details/116667368