Java解压压缩包(zip/rar/7z)

一、概述 主要实现解压压缩包,拿到压缩包中每个文件。 二、思路 针对压缩包的操作,首先需要拿到压缩包文件的流,然后利用第三方工具将流实例化,调用next方法迭代,然后分别操作压缩包中的单个文件。 三、代码实现 1.zip实现 jdk支持对zip流的操作,相关依赖在java.util.zip下 // 获取本地zip包 public void unzipByPath() { try { String localPath = "D:\\文件.zip"; File file = new File(localPath); ZipInputStream zin; // 创建ZipInputStream对象 InputStream inputStream = new FileInputStream(file); zin = new ZipInputStream(inputStream, Charset.forName("GBK")); // 实例化对象,指明要解压的文件 ZipEntry entry; while ((entry = zin.getNextEntry()) != null) { System.out.println(zipEntry.getName()); BufferedInputStream bs = new BufferedInputStream(zin); // 将文件信息写到byte数组中 byte[] bytes = new byte[(int) entry.getSize()]; bs.read(bytes, 0, (int) entry.getSize()); if ("zip".equals(entry.getName().substring(entry.getName().lastIndexOf(".") + 1))) { ZipInputStream secondZip = new ZipInputStream(new ByteArrayInputStream(bytes), Charset.

VS Code插件以及相关配置

1、Auto Close Tag 新增标签时,自动闭合标签。 { // 是否自动插入闭合标签,默认为true "auto-close-tag.enableAutoCloseTag": true, // 是否给自动闭合标签,添加“/”,比如<br>会变成<br/>,默认值为true "auto-close-tag.enableAutoCloseSelfClosingTag": true, // 是否在自动闭合标签的正斜杠前插入空格(默认为false) "auto-close-tag.insertSpaceBeforeSelfClosingTag": false, // 哪些语言或者脚本可以使用此插件,默认["*"],此处通配符表示所有语言或脚本 "auto-close-tag.activationOnLanguage": [ "xml", "php", "blade", "ejs", "jinja", "javascript", "javascriptreact", "typescript", "typescriptreact", "plaintext", "markdown", "vue", "liquid", "erb", "lang-cfml", "cfml", "HTML (Eex)" ], // 哪些语言不能使用此插件 "auto-close-tag.disableOnLanguage": [ "php", "python" ], // 禁用哪些标签不能使用此插件 "auto-close-tag.excludedTags": [ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ], // 是否同时启用Visual Studio和升华文本模式。(默认值为false) "

pandas将一列中重复值替换为空值(nan)

将一列中的重复值替换成nan(ffillna的逆运算,但ffillna之前的重复值也会被替换掉) data['A'] = data.A.mask(data.A.diff().eq(0)) # 方法1 data['A'].mask(data['A'].shift(1) == data['A']) # 方法2 diff()使用说明: numpy.diff(a, n=1,axis=-1) a 表示需要进行差分操作的数据 n 代表执行几次差值 axis:默认是-1。 在pandas中: 调用方法: dataframe.diff(periods,axis) dataframe:可以是直接对dataframe结构进行diff,也可以是Series,另外还可以是进行聚合或者其他操作之后的Series periods:表示移动的幅度。它是任意整数,如果是想让数据统一向下移动n个periods,则n为正,如果是想让数据向上移动n个periods,则n为负 axis:表示参考轴。如果axis=0,则是进行行间的移动差分操作,如果axis=1,则进行列间的移动差分操作。 eq()说明: operator.eq() 功能 operator.eq()函数是运算符模块的库函数,用于对两个值执行“等于运算”,如果第一个值等于第二个值,则返回True,否则返回False。

web worker API开启浏览器js多进程

面试使人进步!!! 在大厂佬们的碾压下接触到了目前工作中没有遇到的新api和新思路以及解决方案。 今天就来说说这个新的api web Worker。以下是MDN原话 指的是一种可由脚本创建的后台任务,任务执行中可以向其创建者收发信息。要创建一个 Worker ,只须调用 Worker(URL) 构造函数,函数参数 `URL` 为指定的脚本。Worker 也可以创建新的 Worker,当然,所有 Worker 必须与其创建者同源。 很明显了就是让我们可以开启一个新的进程来处理js。js是采用的是单线程模型,代码从上往下执行如果js任务中间存在较大的数据计算那么势必会阻塞js的运行以及页面的渲染,那么这时候web worker就是一个很好的解决方案,可以将这部分数据计算的代码放到web worker中进行处理等待处理完成后在通过通信的方式告知js线程。下面是一个简单的demo(vite-react) import React, { useEffect, useState } from "react"; export default (): JSX.Element => { const [w, setW] = useState<Worker>() const startWorker = () => { setW(new Worker("http://localhost:3322/front/worker.js")) } function stopWorker() { if (!w) return w.terminate(); // 终止进程运行,下回启动重头开始 } useEffect(() => { if (!w || !!w.onmessage) return w.onmessage = function (event) { // 通过postMessage和onMessage进行线程之间的通信 console.

CentOS 7安装DB2

本文参考:https://blog.csdn.net/xiadeliang1111/article/details/88574912 1. 下载安装包 可以去IBM官网下载最新版本的DB2安装包,嫌麻烦的朋友也可以直接在CSDN找到对应的包,搜索v11.1_linuxx64_expc.tar.gz即可。 (此安装包为2021年9月17日最新版) 2. 安装DB2 ① 安装DB2 以root用户登录操作系统,把安装包放到/home/software目录下解压 tar -zxvf v11.1_linuxx64_expc.tar.gz 解压完成后应该得到一个名为expc的目录,进入这个目录。新系统一般要先安装依赖,然后才能执行安装程序。 cd expc yum install pam.i686 ./db2_install 这里连续两次选择“是”,也可以根据自己的需要改变安装目录。 ② 添加实例用户 安装完成后终端会给出“已成功完成执行”的提示。这时候我们需要创建实例用户和用户组,来运行DB2服务器。 groupadd -g 2000 db2iadm1 groupadd -g 2001 db2fadm1 useradd -m -g db2iadm1 -d /home/db2inst1 db2inst1 useradd -m -g db2fadm1 -d /home/db2fenc1 db2fenc1 passwd db2inst1 设置一下实例用户的密码。 ③ 修改配置文件 修改一下相关文件的权限,并配置license。 cd /opt/ibm/db2/V11.1/adm chmod -R 755 * ./db2licm -a /home/software/expc/db2/license/db2expc_uw.lic cd /opt/ibm/db2/V11.1/instance/ chmod -R 755 * ./db2icrt -p 50000 -u db2fenc1 db2inst1 ④ 使用db2

生信入门(一)——DESeq2差异基因分析

生信(一)——DESeq2差异基因分析 文章目录 生信(一)——DESeq2差异基因分析一、差异基因分析原理二、代码实现1、前提:安装DESeq2包2.代码实现 三、小结 记录学习过程,共勉。 一、差异基因分析原理 详见 二、代码实现 1、前提:安装DESeq2包 2.代码实现 setwd("D:\\RData");#设置编码位置 rt<-read.table("GSE149549_mRNA_Expression_Summary.txt",head=TRUE,row.names = 1) head(rt) #准备 rt<-as.matrix(rt) #将数据转换为矩阵格式 condition<-factor(c(rep("case",2),rep("control",3)),levels = c("case","control")) ## 设置分组信息,建立环境(5个样本,2组处理) condition coldata<-data.frame(row.names=colnames(rt),condition) #剔除无意义数据(不存在的基因read) #nrow(rt) i=1 while(i<=nrow(rt)){ if(mean(rt[i,])<10) rt<-rt[-i,] i<-i+1; }; #nrow(rt) coldata #展示coldata内容 condition #展示环境 #构建dds矩阵 dds<-DESeqDataSetFromMatrix(rt,coldata,design=~condition) #标准化,对原始数据进行normalize dds<-DESeq(dds) dds resultsNames(dds) #使用deseq2包中的result()函数提取deseq2差异分析结果 res=results(dds,contrast = c("condition","case","control")) head(res) summary(res) write.csv(res,file = "results.csv") #分析结果可视化与导出 table(res$padj<0.05) plotMA(res,ylim=c(-2,2)) mcols(res,use.names = TRUE) #提取差异基因 res <- res[order(res$padj),] resdata <-merge(as.data.frame(res),as.data.frame(counts(dds,normalize=TRUE)),by="row.names",sort=FALSE) deseq_res<-data.frame(resdata) up_diff_result<-subset(deseq_res,padj < 0.05 & (log2FoldChange > 1)) #提取上调差异表达基因 down_diff_result<-subset(deseq_res,padj < 0.

stm32程序烧录完不执行不工作

情况: 使用stm32f103vet6,工程在某一次修改后(称为新版本工程),编译无错误,但是烧录后,程序不执行, 电路板有4个led灯,程序设置了初始化时直接点亮4个led灯。 但是,在这一次修改工程后,烧录完灯不亮, 测试: 多次测试, 发现使用老版本的工程仍然可以正常使用,排除硬件故障。 继续测试, 发现老版本和新版本工程的区别,在于使用了stm32cubemx不同的版本配置,老版本工程使用了stm32cubemx6.1.2版本,新版本工程使用了stm32cubemx6.3.0版本, 继续测试,即使是老版本工程,只要是用stm32cubemx6.3.0配置过,也会出现编译无错误,但是烧录后,程序不执行的现象 解决方案: 使用老版本工程,然后绕过stm32cubemx,通过手动配置项目,修改代码,直接编译烧录,发现可以正常运行。 具体原因: 不清楚,可能6.3.0版本cubemx有bug? 修改时间:2021.9.18 :21:34 被另一位同事修改了代码,某个二维数组大小被出于节省内存空间的目的,减小了。导致了内存溢出,新版本工程是我从同事那里拿来直接改的,老版本工程是我自己写的,所以出现了以上情况。 最后: 如果有人遇到这种情况,请留言告知,通过总结大家遇到的情况,也许能找到真正的原因? 修改时间:2021.9.18 :21:34 各位在联合开发的时候,引以为戒吧。。。 更新 用了一个printf(),但是printf没有重定位到串口1。 也出现了烧录不工作。

Socket.io 如何使用 中文文档(基本用法)

socket.io 使用(Vue3+node.js) 介绍 Socket.IO是一个库,支持浏览器和服务器之间的实时、双向和基于事件的通信 如果可能的话,客户端将尝试建立WebSocket连接,如果不可能的话,转而依靠HTTP长轮询 服务端使用 默认情况下,服务端使用的Socket.io提供的 websocket 服务是 ws 提供的 安装 npm install socket.io 服务初始化 const httpServer = require("http").createServer(); // socket.io服务可以作为独立服务,也可以添加到一个已经存在的服务上(HTTP,Express,Koa,Nest) const io = require("socket.io")(httpServer, { // ...配置项 // path, parser, connectTimeout 等服务选项 // wsEngine, cors 跨域配置, cookie, transports, allowRequest 用来决定是否接受请求,继续处理(做校验)等等 低引擎配置选项 }); ​ io.on("connection", (socket) => { // ... }); ​ httpServer.listen(3000); 服务实例 Server Instance 属性: engine 可以用来获取已连接服务的客户端数量 const count = io.engine.clientsCount; // may or may not be similar to the count of Socket instances in the main namespace, depending on your usage // io.

jmeter BeanShell tcp 性能测试, 发送和接受数据详细示例

jmeter 使用 beanshell 发送tcp请求实例 基于可能预测到的很近的未来,会有项目对程序中tcp协议的接口进行性能测试,为了避免到时候两眼一抹黑,在领导的压力下 oh 不,应该是自身积极主动的推进下,进行未雨绸缪的测试活动 tcp sample了解 新建一个tcp sample 配置 tcp 信息 TCPClient classname: 填写TCP报文格式(有三类),默认前缀:org.apache.jmeter.protocol.tcp.sampler. TCPClientImpl:普通文本传输 BinaryTCPClientImpl:十六进制报文(常用) LengthPrefixedBinaryTCPClientImpl:继承BinaryTCPClientImpl类,并在 BinaryTCPClientlmpl前面增加两个字节数据长度。 尝试了TCPClientImpl ,发现无法正常结束tcp接受,所以放弃,所以使用 BinaryTCPClientImpl End of line(EOL) byte value:响应数据的最后2位,转换为10进制的值。取值区间[-128,127], 因为TCP长连接是不会断开的,我们需要从响应数据来判断并告知TCP取样器这次请求已经获得了数据/响应成功 SO_LINGER:该配置项用于控制在关闭连接之前是否要等待缓冲区中的数据发送完成。如果SO_LINGER选项指定了 值,则在得到关闭连接的请求之后还会等待指定的秒数以完成缓冲区中数据的发送,在指定的SO_LINGER秒数完成后, 关闭连接。因此,如果你把该选项设置成0,那么所有连接在收到关闭连接的时候都会立即关闭,避免产生很多处于 TIME_WAIT状态的套接字。 其他字段可以自行百度下 beanshell编辑 发送tcp信息时,由于body长度可能不一样,所以导致业务上最后拼接出来的16进制数据和我预期的不一致,所以此处只能采用代码的方式来拼接 16进制数据。 具体代码 import com.alibaba.fastjson.JSONObject; public static String test(){ // 拼装请求的结构体 JSONObject object = new JSONObject(); object.put("uname", "autopf"); object.put("keytp", "cc"); object.put("apd", "1.00"); object.put("seq", "abc_"+"${__threadNum}"+"${counter}"); // 转成字符串 String dicstr = JSONObject.toJSONString(object); System.out.println("请求体转成字符串结果: "+dicstr); vars.put("tcp_body",dicstr); // 这个Parser类 是我引用了开发的代码, 所以各位大佬,需要根据公司的不同情况,来拼接 Parser sss = new Parser(); //tcp中 command字段,每隔接口command不一样 int cmd = 2; // 将结构体转成 byte格式 byte[] s = dicstr.

nacos权限绕过漏洞(CVE-2021-29441)修复

漏扫出服务器的nacos1.2.1版本存在权限绕过漏洞(CVE-2021-29441)漏洞,给出的建议是升级到最新版本,后面去nacos官网当时最新版本是2.0.3,果断换成了当时最新的再让安全人员漏扫发现还是存在,明明官网已经说2.0.0以上版本已经修复了,怎么还是被扫到呢?通过网上翻看资料得到如下解决办法: 1、修改 nacos的application.properties配置文件,开启服务身份识别功能 ### 开启鉴权 nacos.core.auth.enabled=true ### 关闭使用user-agent判断服务端请求并放行鉴权的功能 nacos.core.auth.enable.userAgentAuthWhite=false ### 配置自定义身份识别的key(不可为空)和value(不可为空) nacos.core.auth.server.identity.key=example nacos.core.auth.server.identity.value=example nacos.core.auth.server.identity.key和nacos.core.auth.server.identity.value根据你的需要,填写你的key和value 修改好后重启nacos,浏览器执行: 'http://your_ip:8848/nacos/v1/auth/users/?pageNo=1&pageSize=9' 在没有开启服务身份识别功能,执行以上是会出数据的: { "totalCount": 1, "pageNumber": 1, "pagesAvailable": 1, "pageItems": [ { "username": "nacos", "password": "$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu" } ] } 添加服务身份识别功能后换在浏览器执行如果出现这个: 以及执行: 'http://127.0.0.1:8848/nacos/v1/auth/users?username=test&password=test' 出现403的说明修改成功 2、Nacos注册及配置中心开启权限认证 修改你的项目中的bootstrap.yml或bootstrap.properties: nacos的discovery和config开启用户密码认证,用户密码就是你的nacos登录的用户名和密码,在此要注意的是,用户名和密码不要带有%、$这些特殊字符,不然你的服务会注册不上到nacos,因为它会转义 以上修改完成以后,亲测再次漏扫,nacos权限绕过漏洞(CVE-2021-29441)不会再出现

如何在 Linux 终端中复制粘贴 [初学者教程]

文章目录 1、在终端中使用键盘快捷键进行复制粘贴2、在终端中复制和粘贴的另一种方法是使用右键单击上下文菜单。3、在Linux终端使用鼠标中键(滚轮)复制粘贴4、为什么 Linux 终端不使用“通用”的 Ctrl+C 和 Ctrl+V5、使用 Ctrl+S 挂起终端 1、在终端中使用键盘快捷键进行复制粘贴 在 Ubuntu 和许多其他 Linux 发行版上,你可以使用 Ctrl+Insert 或 Ctrl+shift+C 复制文本,使用 Shift+Insert 或 Ctrl+shift+V 在终端中粘贴文本。 复制粘贴也适用于外部来源。在其他网站复制命令示例(使用通用 Ctrl+C 键),你可以使用 Ctrl+Shift+V 将此命令粘贴到终端中。 同样,你可以使用 Ctrl+shift+C 从终端复制文本,然后使用常规的 Ctrl+V 快捷方式将其粘贴到文本编辑器或 Web 浏览器中。 基本上,当你与 Linux 终端交互时,你可以使用 Ctrl+Shift+C/V 进行复制粘贴。 2、在终端中复制和粘贴的另一种方法是使用右键单击上下文菜单。 在终端中选择文本,右键单击并选择复制。同样,要粘贴所选文本,请右键单击并选择粘贴。 3、在Linux终端使用鼠标中键(滚轮)复制粘贴 在 Linux 终端中复制粘贴的另一种方法是仅使用鼠标。 你可以选择要复制的文本,然后按鼠标中键(滚轮) 粘贴复制的文本。 注意,在终端中,选中文本后,点击鼠标中键效果是复制粘贴,相当于Ctrl+shift+C后又按了Ctrl+shift+V。在其他地方,同样适用。 Linux 终端中没有用于复制粘贴的通用快捷键。复制粘贴的快捷键的绑定取决于你所使用的终端模拟器(通常称为终端)。 如果你不知道终端只是一个应用程序,你可以安装其他终端,如Guake或 Terminator。不同的终端应用程序可能有自己的复制和粘贴键绑定,如 Alt+C/V 或 Ctrl+Alt+C/V。大多数 Linux 终端使用 Ctrl+Shift+C/V 键,但如果它不适合你,你可以尝试其他组合键或从终端模拟器的首选项配置快捷键。 4、为什么 Linux 终端不使用“通用”的 Ctrl+C 和 Ctrl+V 没有 Linux 终端会用 Ctrl+C 来复制文本。这是因为默认情况下 Ctrl+C 键绑定用于向在前台运行的命令发送中断信号。这通常会停止正在运行的命令。

ElasticSearch学习总结3(.NetCore操作ES)

首先将ElasticSearch服务运行起来。 使用.NetCore操作ElasticSearch数据库实例: 1.创建一个.NetCore控制台程序 2.通过NuGet添加程序集 3.床架TestData类,用于数据操作 using Nest; using System; using System.Collections.Generic; namespace ElasticSearch { public class TestData { /// <summary> /// 插入多条数据 /// </summary> public void IndexMany() { //链接es数据库 var settings = new ConnectionSettings(new Uri(Url.url)).DefaultIndex("people");//people 索引库名称 //创建链接es数据库的管道 var client = new ElasticClient(settings); List<Person> peoples = new List<Person>(); for (int i = 0; i < 10; i++) { Person person = new Person() { Id = i, FirstName = "Fname" + i, LastName = "

【力扣435. 无重叠区间】多种解法:贪心、dp(python3)

目录 题目描述思路题解方法1:贪心方法2:dp 题目描述 https://leetcode-cn.com/problems/non-overlapping-intervals/ 思路题解 方法1:贪心 本题可以转化为求不相交的区间个数。 贪心算法: 1. 按照区间的右端点从小到大排序 2. 每次都选择右端点最小的,不会出现重叠的区间,因为这样可以为后侧留下更多的选择空间 自己做的代码: class Solution: def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int: import functools def cmp(a, b): if b[1] < a[1]: return 1 elif a[1] < b[1]: return -1 else: if b[0] < a[0]: return -1 elif a[0] < b[0]: return 1 else: return 0 nums=sorted(intervals,key=functools.cmp_to_key(cmp)) i=0 ans=0 n=len(nums) tmp=float("-inf") while i<n: while i<n and nums[i][0]<tmp: # print(nums[i]) ans+=1 i+=1 if i<n:tmp=nums[i][1] if i<n-1 and nums[i][1]==nums[i+1][1]: j=i+1 tmp=nums[i][1] while j<n and nums[j][1]==nums[i][1]: # print(nums[j]) ans+=1 j+=1 i=j else: i+=1 return ans 方法2:dp 这道题可以使用动态规划做。本质上,这个题目和打家劫舍是一样的:

__attribute__((at(...)))绝对地址定位并不绝对

用了__attribute__((at(...)))指定绝对地址后,就想当然的一定会把变量地址定位到你希望的位置了吗?大部分情况下是的,但是。。。 定义了如下指向int类型的指针常量(不是常量指针哦): int * const pa1 __attribute__((at(0x00000300))) = (int*)1; int * const pa2 __attribute__((at(0x00000300))); int * const pa3 __attribute__((at(0x00000300))) = (int*)1; 检查一下各指针常量所占的地址: 可以发现,pa2、pa3的地址并不在预想的0x00000300。也就是说,0x00000300地址已分配给pa1,其他的不能再用同样的地址,会从指定地址开始往后找可用的地址。 但是也发现,pa2、pa3并未顺序分配地址。可以看到,有初始化值的,将被先分配地址。 所以,__attribute__((at(...)))绝对地址定位并不绝对。

Python用requests + bs4爬取豆瓣图书网的书名和网址

爬取静态网页豆瓣读书Top250 当我们遇到这种静态网页的时候首先想到可以用导入requests库对网页进行请求,并用bs4来进行解析,然后可以用find方法找到我们想要爬取的对象。 import requests from bs4 import BeautifulSoup import time def douban_book(url): headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.35 Safari/537.36'} res = requests.get(url,headers = headers) soup = BeautifulSoup(res.text,'html.parser') items = soup.find_all('div',class_='pl2')#find返回的是一个tag对象 for i in items: tag = i.find('a') name = ''.join((tag.text).split()) link = tag['href'] print(name,link) url = 'https://book.douban.com/top250?start={}' urls = [url.format(num * 25) for num in range(10)] for item in urls: douban_book(item) time.sleep(1) find()返回符合条件的首个数据 find_all #join() # 用于将序列中的元素以指定的字符连接生成一个新的字符串。join() 方法接收一个序列(列表、元组、字符串等)作为参数,.

关于VS Code无法输入的问题

当程序中有输入语句,然而在运行程序时,却无法输入数据,无论是在终端还是调试控制台里,都不能向程序输入数据,并且没有弹出命令提示符的窗口。 1、检查自己程序的输入语句有无问题 2、打开设置,在设置中搜索terminal:explorer,找到这个选项 这个可以选择使用的终端,一个VS Code自带的,一个是系统的。更换选项后重启应用,若还是不能解决问题,则找到程序的launc.json文件。 找到console那一项,在后面加上下面两个console项中的任意一个就可以了,三个console项只能存在一个,多的注释掉。 F5运行程序,这样问题就解决了,至于喜欢哪种控制方式就看个人的喜好了。

UVM自学笔记:项目之五——完善agent(driver、monitor、sequencr)

目录 1.driver的编写 2.monitor代码编写: 3.slave_module的完善 4.跑一下testcase 1.driver的编写 我们将driver的所有信号都完善,并且在reset_phase执行reset_do()命令,对所有信号进行上电复位的初始化。完善好的driver代码如下: 2.monitor代码编写: 在编写monitor的时候,采用了和编写driver不同的方式,这种方式实现起来相对简单一些,具体思路就是控制好每个时钟上升沿是否检测地址、控制信号以及数据信号,如果检测到了,就将数据打包入m_trans内,然后打印到控制台上。由于比较简单,就不多赘述了。直接上代码 3.slave_module的完善 4.跑一下testcase 20笔trans,10笔读,10笔写。具体的trans如下,来自于driver和monitor(一共20笔) ...................................................3-17 用vcs看一下波形 截至目前,已经完成了agent内的所有组件的编写,接下来我们要将验证平台与DUT相连接,然后完成scoreboard的编写。

.git bojects目录文件为空

这里写自定义目录标题 git error: object file .git/objects/b9/e269f50db2a3415cc8ad5ba40b82b9b6a13d45 is empty 解决方法: 1. find .git/objects/ -type f -empty | xargs rm 2. git fetch -p 3. git fsck --full

分配问题(插板法)

1、有 n 个小球,放入 m 个盒子,每个盒子里至少 1 个,求有多少种情况? 解析: 我们可以把问题转化为:在小球之间插入板子,将其分成 m m m 份 有 n n n 个小球,所以在小球之间有 n − 1 n-1 n−1 个空隙 放入 m m m 个盒子,说明要把小球分成 m m m 份,所以需要在其中 m − 1 m-1 m−1 个空隙中插入板子 所以一共有 C n − 1 m − 1 C_{n-1}^{m-1} Cn−1m−1​ 种情况 2、有 n 个小球,放入 m 个盒子,求有多少种情况? 解析: 题目2和题目1的不同在于每个盒子中的小球数目可以为 0 0 0 我们可以将问题转化为每个盒子至少放 1 1 1 个小球的情况: 可以预先在每个盒子中都放入 1 1 1 个小球,此时就不会有数目为 0 0 0 的情况

Python练习-求两个给定正整数的最大公约数和最小公倍数

题目描述 求两个给定正整数的最大公约数和最小公倍数 题目要求 输入格式:输入在两行中分别输入正整数x和y输出格式:在一行中输出最大公约数和最小公倍数的值例如:输入100 1520 输出20 7600 题目解析 (1)几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数 例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24,60)=12。 (2)几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个自然数,叫做这几个数的最小公倍数 例如:求6和15的最小公倍数。先分解质因数,得6=2×3,15=3×5,6和15的全部公有的质因数是3,6独有质因数是2,15独有的质因数是5,2×3×5=30,30里面包含6的全部质因数2和3,还包含了15的全部质因数3和5,且30是6和15的公倍数中最小的一个,所以[6,15]=30。 思路 (1)最大公约数 假设最大公约数为a,2个数为x和y,则x一定能够整除a,且y也能整除a,如24和60的最大公约数为24 求最大公约数时,最大公约数的范围是[1,最小值],故可以用x和y对从1开始的整数取余,若余数为0,则说明可以整除,保存该约数,直到取到最大约数,即为最大公约数 (2)最小公倍数 假设最小公倍数为b,2个数为x和y,作为x和y的公倍数,则b一定能够整除x和y,如6和15的最小公倍数为30 求最小公倍数时,最小公倍数的范围是[x和y的最大值,正无穷],故从x和y的最大值开始,对x和y取余,当第一个余数为0时,则此时的数即为x和y的最小公倍数 def hcf(x,y): #定义最大公约数 if x>y: smaller = y else: smaller = x #先比较2个数的大小,将较小的数赋值给smaller for i in range(1,smaller + 1): #给定i的范围,从1开始,smaller结束,range函数为左闭右开,故smaller要加1 if((x%i == 0) and (y % i== 0)): #如果x能够整除i 且 y也能整除i hcf = i #将i赋值给hcf return hcf # 循环结束后返回最大的i值,即是公约数 def lcm(x,y): #定义最小公倍数 if x>y: greater =x else: greater =y #先比较2个数的大小,将较大的数赋值给greater while(True): if((greater%x==0) and (greater%y == 0)): #如果greater能够整除x和y lcm =greater # 则将greater赋值给lcm break #跳出循环 greater +=1 # greater=greater+1,重新开始循环 return lcm num1 = int(input("

Oracle sql字段截取后六位

由于在开发过程会遇到截取字段的情况,一般能在sql中处理就处理掉; select casebh,substr(casebh,length(casebh)-5,6) a,substr(casebh,-6) b from log_exchagnge t where serviceid = '1005' 请使用:substr(字段,length(字段)-5,6) 或者 substr(字段,-6)

Elasticsearch:如何在 Django 中使用 Elasticsearch

你是否正在构建需要搜索海量数据集的 Django 应用程序? 你可能正在考虑使用标准关系数据库。 但是你很快就会发现,在处理高级需求时,此解决方案可能会很慢且有问题。 这就是 Elasticsearch 的用武之地。 这是 Django 的 Elasticsearch 教程,可帮助你在项目中充分利用这个方便的搜索引擎。 为什么要使用 Elasticsearch? 在海量数据库上运行搜索引擎的应用程序经常面临这个问题:检索产品信息的时间太长。这反过来又会导致糟糕的用户体验,从而对应用程序作为数字产品的潜力产生负面影响。 大多数情况下,搜索滞后源于开发团队用于构建应用程序的关系数据库,其中数据分散在许多不同的表中。为了检索有意义的信息,系统需要从这些表中获取数据——这可能比某些用户准备等待的时间更长。 在通过数据库查询检索数据和获取搜索结果时,关系数据库的工作速度可能非常缓慢。这就是为什么开发人员一直忙于寻找可以加速数据检索过程的替代方法。 这就是 Elasticsearch 的用武之地。它是一个 NoSQL 分布式数据存储,适用于灵活的面向文档的数据库,以匹配具有实时参与需求的苛刻工作负载应用程序。 如果你对 Elasticsearch 还不是很了解的话,请参阅我之前的文章: Elasticsearch 简介 Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica 更多关于 Elastic Stack 方面的知识,请阅读 “Elastic:菜鸟上手指南”。 在 Django 中使用 Elasticsearch 为了在 Django 中利用 Elasticsearch,我们将使用一些非常有用的包: Elasticsearch DSL - 一个高级库,可帮助编写和运行针对 Elasticsearch 的查询。 它建立在官方低级客户端(elasticsearch-py)之上。Django Elasticsearch DSL – 一个允许轻松集成和配置 Elasticsearch 与 Django 的包。 它是围绕 elasticsearch-dsl-py 构建的薄包装器,因此您可以使用由 elasticsearch-dsl-py 团队开发的所有功能。Django Elasticsearch DSL DRF – 集成了 Elasticsearch DSL 和 Django REST 框架。 它为我们提供了API 来最有效地访问 Elasticsearch。 Haystack 与 Elasticsearch DSL

Ubuntu系统修改主机名和用户名

Ubuntu系统修改主机名和用户名 如果无法进入UBUNTU桌面,进入命令行界面方法如何修改主机名和用户名,参考1. 首先更改主机名字————改为bbb:(1) 修改hostname文件(2) 修改hosts文件 2. 更改用户名————改为ccc(1) 修改sudoer文件(2) 修改shadow 文件(3) 修改开始目录(4) 修改passwd 文件(5) 如果我们还想修改原来用户下文件所属的组:(6) 最后,再次进入/etc/sudoer 文件,将就用户名aaa 删除 如果无法进入UBUNTU桌面,进入命令行界面方法 bios启动时按ESC键以及快捷键,使用上下箭头 进入高级选项->选择recovery mode->root->下方就是命令行输入 链接: link. 如何修改主机名和用户名,参考 链接: link. 很多时候,我们不满意安装时起的用户名与主机名,但是由于已经在这个用户上做了好多配置,所以只能在原来的基础上改用户名和主机名了。 但是改这些文件的时候,一定要小心,因为一不小心就会造成重启后无法登陆的情况。我自己也因为这个,浪费了好多时间: 这里写下我的经验,安全的修改用户名,避免出现修改后无法登陆的情况,希望对大家有所帮助,让各位少走弯路 1. 首先更改主机名字————改为bbb: 这个容易,不会出现什么严重错误: (1) 修改hostname文件 这个文件中的内容是用来显示主机名字的,修改这个文件后,如果立刻重启,我们会看到终端中@后面的主机名将变为bbb (2) 修改hosts文件 改完主机名字,我们需要重启计算机,否则命令执行会有些慢。 2. 更改用户名————改为ccc 通常因为出错导致重启后无法重新登陆都是在这一环节出现,所以这一步务必按照顺序来 (1) 修改sudoer文件 我们为自己要改的名字提前赋予较高的权限,防止修改下面文件的过程中出现权限不足,添加用户ccc,注意不要修改sudoers文件的权限,不然会造成找不到有效的sudoers。(如果不小心搞错了,那就百度一下报错内容,还是可以改好的,在命令行界面,root权限修改) (2) 修改shadow 文件 这个文件中存储与登陆有关的内容格式如下: username: passwd: lastchg: min: max: warn: inactive: expire: flag 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 我们需要将登录名更改: (3) 修改开始目录 用户开始目录中,包含用户相关配置信息,我们要将二者相匹配 (4) 修改passwd 文件 passwd文件内容格式如下: 用户名: 密码 : uid : gid :用户描述:主目录:登陆shell

win10安装的虚拟机无法连接网络

有时候不管在win10(主机)上的虚拟机还是其他系统上的虚拟机,我们装好虚拟机系统之后发现打开连不上网。今天给大家分享一种解决方法: 1.选择虚拟机的【编辑】–>【虚拟网络编辑器】 2.选择【还原默认设置】,注意:有时需要管理员点击【更改设置】重置下,才能点击【还原默认设置】 3.还原默认设置后,打开我们的虚拟机,进入桌面 4.选择网络,设置一下获取IP方式,选择【自动获取】,点击确定 5.稍等片刻,发现网络连接成功 ———————————————— 原文链接:https://blog.csdn.net/MenofGod/article/details/73338102

CSDN如何将插入图片缩小并且居中

CSDN的插入图有时候显示比较大,不方便查看,这时只需要在原图片的地址上增加缩放比即可。 例如插入后系统给的地址为: https://img-blog.csdnimg.cn/f348670dbadc4da2a52db5926c16d10b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Y2X5rSyLg==,size_20,color_FFFFFF,t_70,g_se,x_16 增加width缩放比例width=“70%”;增加居中条件:#pic_center: <img src="https://img-blog.csdnimg.cn/f348670dbadc4da2a52db5926c16d10b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Y2X5rSyLg==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center" width="70%"> 总体增加如下图:

Flume 数据流监控——Ganglia的安装与部署

1、Ganglia的安装 (1) 安装 dhttpd 服务与 php [yasin@hadoop102 flume]$ sudo yum -y install httpd php (2)安装其他依赖 [atguigu@hadoop102 flume]$ sudo yum -y install rrdtool perl-rrdtool rrdtool-devel [atguigu@hadoop102 flume]$ sudo yum -y install apr-devel (3)安装 ganglia [yasin@hadoop102 flume]$ sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-13.noarch.rpm [yasin@hadoop102 flume]$ sudo yum -y install ganglia-gmetad [yasin@hadoop102 flume]$ sudo yum -y install ganglia-web [yasin@hadoop102 flume]$ sudo yum -y install ganglia-gmond Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要收集指标数据的节点主机上。使用 gmond,你可以很容易收集很多系统指标数据,如 CPU、内存、磁盘、网络和活跃进程的数据等。

ERROR: No matching distribution found for pandas

因该是网络原因,所以利用国内镜像 pip 安装第三方库速度太慢 可设置 pip 从国内的镜像源下载安装 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣 http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/ 其一: # 临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxxxxxx 其二: # 永久设置 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 可查看配置的源 pip config list

R语言与数据分析-01-数据类型与数据输入-01-基础

一. R语言的数据类型 原文链接 : r语言与数据分析实战1 1.1 知识描述 搞清楚我们面对的数据类型是什么,并能实现数据类型之间的转换 1.2 相关知识 需要认真学习以下函数: mode(): 用来查看数值类型的函数; as.numeric(): 将数据类型转换为数值型类型的函数; as.logical(): 将数据类型转换为逻辑型类型的函数; as.cha\fracter(): 将数据类型转换为字符型类型的函数。 在我们开始学习R语言数据类型之前,先让我们根据例子来看看3个简单的概念。 定义:按照数据的格式,将数据类型发送给R; 比如定义简单的数值: 变量与赋值:与其他语言类似,变量是我们操纵数据的载体,而赋值则是数据传递给变量的一个过程。 在R语言中,赋值符号有三种,分别如上图所示。大家可以根据自己的喜好选择使用~但是一般来说,大部分人都会选择中间的赋值方式,因为它更为形象。 现在我们正式开始学习R语言中的数据类型。 1.2.1 逻辑型数据 逻辑型数据的定义方式很简单,就是直接写上 TRUE 或 FALSE的大写字母即可。 注意:R 只认大写的 TRUE 或 FALSE。 它的运算规则有3种,如下图所示: 我们可以通过一个例子来加深对逻辑型数据及运算规则的理解。 从上图的执行过程中,我们能看出x实际上应该小于y的,所以当我判断x大于y的时候,你能从右边的环境变量框中看见,z的值为FALSE。 再检验一下,用mod()函数来看看z现在的数据类型。WALA! 结果为logical,逻辑型。 最后我们来一条一条执行逻辑型数据的运算规则,看起来很清晰明了吧~ 1.2.2 数值型数据 数值型数据就是我们数学中学过的实数啦,包含正数、0和负数。也是我们最容易理解的数据类型了; 其中的“四则运算”,也是我们最熟悉的运算规则啦!我就不在这里多啰嗦了哟。 1.2.3 字符型数据 在R中,我们把用' '或者" "包含起来的数据称为字符型数据。 让我们来看看字符型数据是什么样子的,以hello world为例,嘿嘿。 恩,看来没错,mode()函数告诉我们,x和y都是cha\fracter字符型变量 1.2.4 数据间的转换 R语言数据类型的转换很“显式”,因为它是通过函数做到的,不会出现一不小心就被默认转换坑了的情况,不要问我是怎么知道的… 举个例子来看看逻辑型数据转成数值型数据是怎么做的吧。 那么问题来了,数值型数据是否能转换为字符型数据呢?哈哈,好奇害死猫,我不告诉你,快去自己试试吧。 1.3 小测 #将 t 的数据类型转换为数值型,并输出 t 的值 t <- 'TRUE' #----start---- mode(t) t2 <- as.

Gifski for mac(视频转gif工具) v2.17.0免费版

Gifski Mac版是Mac平台上的一款GIF制作应用。Gifski Mac版可以帮助用户将所需要录制的视频转换成高质量的GIF格式的图片。测试环境:MacOS 11.3.1 Gifski mac版安装教程 软件下载完成后,双击.pkg根据提示进行安装 gifski mac功能特色 视频剪辑 精确控制尺寸 复制、共享或拖动GIF 系统服务 Gifski支持MacOS支持的所有视频格式(.mp4或.mov与h264、hevc、prores等)。不支持QuickTime动画格式。改用Prores 4444 XQ。它更高效,支持范围更广,和QuickTime动画一样,它也支持Alpha通道。

快手前端面经总结

js 出现次数题目答案2JS的基本数据类型面试官:说说JavaScript中的数据类型?存储上的差别?1深拷贝面试官:深拷贝浅拷贝的区别?如何实现一个深拷贝?1ES6语法const,let,箭头函数,Promise , Generator函数 ,解构赋值 ,模板字符串 、Proxy1箭头函数和function区别面试官:函数新增了哪些扩展?1weekMap和Map的区别,weekMap应用场景在什么地方,使用过吗面试官:你是怎么理解ES6新增Set、Map两种数据结构的?1闭包函数保存变量会造成内存泄漏吗闭包会造成内存泄漏吗? 不会!!!1map和foreach有什么区别面试官:数组的常用方法有哪些?1浏览器垃圾回收机制说一下面试官:说说 JavaScript 中内存泄漏的几种情况?1js事件循环机制说一下面试官:说说你对事件循环的理解1parseInt是干嘛的面试官:谈谈 JavaScript 中的类型转换机制1[1,2,3].map(parseInt) 为什么输出 1,NaN,NaN[“1”, “2”, “3”].map(parseInt)为什么返回 [1,NaN,NaN] css 出现次数题目答案1rem和em的区别面试官:说说em/px/rem/vh/vw区别?1CSS动画css动画有了解吗1CSS盒模型面试官:说说你对盒子模型的理解?2垂直居中面试官:元素水平垂直居中的方法有哪些?如果元素不定宽高呢? 浏览器 出现次数题目答案2当用户输入url后发生什么面试官:说说地址栏输入 URL 敲下回车后发生了什么?1dns解析过程面试官:DNS协议 是什么?说说DNS 完整的查询过程?2浏览器缓存,cookie,localStorage,sessionStorage区别理解cookie、session、localStorage、sessionStorage之不同2HTTP2.0相对1.0有什么提升面试官:说说 HTTP1.0/1.1/2.0 的区别?1history和hash原理的不同前端实现路由就是这两种方式浅析一波路由的hash 和 history 的区别与实现原理以及服务器刷新404的问题及解决方法 nodeJs 出现次数题目答案1用node创建一个serverNode.js 创建第一个应用 手写题 出现次数题目答案1判断两个二叉树是否相等正常遍历比较即可1大数相加字符串加减1数组扁平化 vue 出现次数题目答案2vue中data为什么是函数面试官:为什么data属性是一个函数而不是一个对象?1解决跨域面试官:Vue项目中你是如何解决跨域的呢?1双向绑定面试官:双向数据绑定是什么1用过vue-router的什么个人建议,动态路由匹配和路由懒加载一定要有Vue Router1VueX中的mutation和actionvuex 中 actions 与 mutations 的区别,以及如何触发1vue-router的原理是什么大前端进阶-Vue-router原理 参考网站 快手前端一面面经 快手前端实习生一面(二面结束,期待hr面~许愿offer) 快手实习一面面经

数字电路学习笔记(三)

门电路 基本门电路与门或门非门 复合门电路与非门或非门与或非门异或门同或门 集成门电路TLL集成门电路多发射晶体管TTL与非门TTL集电极开路门(OC门)三态输出门(TS门) CMOS集成门电路CMOS非门CMOS与非门CMOS或非门CMOS传输门 基本门电路 基本门电路有3种:与门(AND)、或门(OR)和非门(NOT)。 与门 电路结构 只有两个开关AB都闭合时,指示灯才会亮; 逻辑与(逻辑相乘):决定事物结果的全部条件同时具备时,结果才发生。 真值表:用来列举电路各种输入值和对应输出值的表格。 输入输出ABY0000 10100111 逻辑表达式 用关系式来表达电路输入输出之间的逻辑关系。与门电路的逻辑表达式: Y = A ⋅ B Y=A\cdot B Y=A⋅B 图形符号 与门芯片 与门集成电路74LS08结构图如下,内部有4个与门,每个与门两个输入端,一个输出端。 拓展 有很多种与门逻辑电路,还有种电路如下,可自行分析 或门 电路结构 只要有任一开关闭合,指示灯都亮。 逻辑或(逻辑相加):决定事物结果的诸多条件中只要任何一个满足,结果就会发生。 真值表 输入输出ABY0000 11101111 逻辑表达式 Y = A + B Y=A+B Y=A+B 图形符号 或门芯片 74LS32是一种比较常见的或门芯片。内部有4个或门,每个或门有2个输入端,1个输出端。 拓展 有很多种或门逻辑电路,还有种电路如下,可自行分析 非门 电路结构 开关断开时,指示灯亮;闭和时,指示灯不亮。 逻辑非(逻辑求反):条件具备了,结果就不会发生;条件不具备,结果就会发生。 真值表 输入输出AY011 0 逻辑表达式 Y = A ‾ Y=\overline{A} Y=A 图形符号 非门芯片 74LS04是一种比较常见的非门芯片(反相器)。内部有6个非门,每个非门有1个输入端,1个输出端。 拓展 有很多种非门逻辑电路,还有种电路如下,可自行分析 复合门电路 复合门电路又称组合门电路,由基本门电路组合而成。常见的复合门电路有与非门、或非门、与或非门、异或门、同或门。 与非门 与非门是由与门和非门组成的

K8S-Back-off restarting failed container

K8S: Back-off restarting failed container 问题描述: 在网页k8s上想部署一个云主机,centos,于是乎: 1.创建资源-从表单创建 2.添加参数 3.以特权运行并部署 4.运行后最糟糕的三个红太阳出现了 查看日志显示: 终端日志查看:重启失败 初学很懵逼,百度后解决: 原因: 我从官网pull的centos的image,启动容器后,容器内部没有常驻的前台进程,导致容器启动成功后就退出了,所以才一直重启restarting 类似系统级别的的容器,centos、Ubuntu、nginx都会这样 解决方法 我是在网页上创建的pod资源,不知道对应的yam文件在终端哪里存着呢,所以先把yaml文件导出来,在删除pod,最后修改yaml文件并apply的。 # kubectl get deploy #查看deploy信息 # kubectl get deploy my-centos -o=yaml > my-centos.yaml #导出yaml文件修改 # kubectl get deploy # kubectl delete deploy my-centos # kubectl get service # kubectl delete service my-centos 修改yaml文件,添加command: command: ["/bin/bash","-ce","tail -f /dev/null"] 运行: # kubectl apply -f my-centos.yaml # kubectl get pod # kubectl get deploy 网页查看:

Java实现的人工智能训练

package zuoye; import java.util.Scanner; public class X010103_003AI { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);//扫描键盘输入 String question;//定义字符型变量 while(true) { question = scanner.next();//调用键盘输入 question = question.replace("你好吗","你好!");//把你好吗替换成你好! question = question.replace("能听得懂吗","能听得懂");//把能听得懂吗替换成能听得懂 question = question.replace("你好", "你好");//把你好替换成你好 question = question.replace("真的吗", "真的!");//把真的吗替换成真的! System.out.println(question); } } } 运行效果如下:

ElasticSearch数据迁移失败的问题解决 以及基本操作命令

目标: ElasticSearch数据迁移失败的问题解决 以及基本操作命令 问题描述: # 迁移数据 POST _reindex { "source": { "index": "product" }, "dest": { "index": "mall_product" } } 运行出错,出错如下: "failures": [ { "index": "mall_product", "type": "_doc", "id": "1", "cause": { "type": "cluster_block_exception", "reason": "index [mall_product] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];" }, "status": 403 }, 原因分析: 通常我们在Elasticsearch中增加或更新数据时会出现错误:“index [mall_product] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];”,说名这个索引是只读状态。 此时我们需要对该索引的设置进行修改. 解决方案: 先关闭该索引: POST mall_product/_close 在获取该索引的设置 GET mall_product/_settings 结果如下:

vue3 ref属性

vue3 ref属性 操作单个DOM元素 操作单个DOM或者组件的流程 定义一个响应式变量把变量返回给模板使用模板中绑定上述返回的数据可以通过info变量操作DOM或者组件实例 <template> <div> <div>ref操作DOM和组件</div> <hr> <!-- 3、模板中绑定上述返回的数据 --> <div ref='info'>hello</div> <!-- <my-com ref='info'>hello</my-com> --> <ul> <li ref='fruit' v-for='item in fruits' :key='item.id'>{{item.name}}</li> </ul> <button @click='handleClick'>点击</button> </div> </template> <script> import { ref } from 'vue' export default { name: 'App', setup () { // Vue3中通过ref操作DOM // 1、定义一个响应式变量 const info = ref(null) const fruits = ref([{ id: 1, name: 'apple' }, { id: 2, name: 'orange' }]) const handleClick = () => { // 4、此时可以通过info变量操作DOM console.

python 安装pybluez 踩坑记

1、安装pybluez pip install pybluez 2、提示需要安装c++ 14.00的框架。 网上给的安装包都不好使。直接上官网下载,并安装visual studio 社区版本,并选择需要的语言以及环境。 3、提示 原因分析: 这个主要是因为Windows 10 SDK将“IRPROPS.LIB”这个文件移除了。参考别的大佬的说明讲一下这个文件是干什么的: 这个文件是1990年代到2000年代间为红外通信之类的近场通信准备的。在2004年,Windows XP SP2准备添加对蓝牙功能的支持,但当时的Service Pack不允许添加新的运行库DLL文件,因此开发人员不得不将蓝牙功能加入到红外功能的库和控制面板中。虽然后来取消了这一限制,但为了兼容IRPROPS.CPL控制面板文件,蓝牙功能不得不被保留在IRPROPS.LIB中。开发人员其实很早就在BTHPROPS.LIB文件中完成了对蓝牙所有功能的支持,并很早就告知其他开发者使用BTHPROPS.LIB,但毕竟没人愿意重构好长时间的项目。最后,微软的Windows SDK直接删掉了IRPROPS.LIB文件。至于为啥要删除,而不再保留,开发者说是为了让这一告知更加显眼。“We decided that it was better to make the break obvious.” 参考文献:https://devblogs.microsoft.com/oldnewthing/20190516-00/?p=102498 原文链接:https://blog.csdn.net/w12w12w12/article/details/116466157 解决方法: 那么既然知道问题所在,那么解决办法也很简单: 从Pybluez安装失败的报错中找到IRPROPS.LIB应该存在的位置,我的电脑上其位置是“C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64”。 利用管理员权限打开命令提示符CMD,转到该目录,输入命令“mklink IRPROPS.LIB bthprops.lib”为IRPROPS.LIB创建指向bthprops.lib的符号链接 (或者用cmd命令框,打开之前,需要用管理员身份打开命令框。) 再使用“pip install pybluez”安装Pybluez库就可以使用了。PyCharm如果遇到类似问题也可以这样解决。 原文链接:https://blog.csdn.net/w12w12w12/article/details/116466157

route和router区分

route:路由,路由是指在一个端接受数据包然后定向到目的地端的过程。route像是运输的包,里面有请求的数据。所以我们可以从route中得到请求参数。 router: 路由器,路由器通过一些手段用来维护路由表,通过路由来进行数据转发,转发的策略叫做路由选择,这是路由器名字的由来。所以router用来进行路由跳转等动作。 只要记住这个英文的意思就不会混淆了,语义化很实用。 其他定义: 节点: 转节点:路由器,交换机,网关,防火墙访问节点:计算机 结点: 链路结点:交换机路由结点:路由器 链路:端到端中间经过的串点。 物理:由计算机和网线实现。数据:由网络协议实现。 通路:节点到节点的链路串连。网络拓扑: 从电子图到网络拓扑。 图1是电网络及其线图的例子,其中的线段称作支路,点称作节点,若每条支路都规定了方向就是有向图,否则为无向图 树的定义 树定义为包含线图中所有节点但不含回路的联通子图,线图中属于该树的支路叫作树支,其它则为连支 线图:上面的图就是线图,联通子图指下面的图2。 以图2第一棵树为例: 树支:u1-u2,u2-u3,u2-u0。3条 连支:u1-u0,u3-u0。2条 节点:4个。 支路:5条。定义在上面(1) 一个线图通常有许多棵树,图2为图1(b)线图的一些树 就是将图1(b)进行分解,目前是分解为3种树。 设线图有n+1个节点和b条支路,则树支恰有n条,连支则有b-n条。利用树可以系统地找出最大数目的独立回路组,方法是选定一棵树,给树每增添一条连支,就构成一个只包含该连支的回路,并称为基本回路,这样由b-n条连支共可得出b-n个独立的基本回路组。 分析:图1(b)中,我们选定一种连接节点的树,比如图(2)中的第一种,可以看出,其有4个节点,5条支路。那么根据公式有n+1个节点和b条支路,则树支恰有n条,连支则有b-n条,n=4-1=3,连支有5-3=2条。那么树1就有2条独立的基本回路组。 结构分类:待续。

Java程序编写一个矩形类,将长与宽作为矩形类的属性,在构造方法中将长、宽初始化,定义一个成员方法求此矩形的面积。

package javase7; public class javase7_2 { private float height; //定义一个矩形的长 private float width; //定义一个矩形的宽 public javase7_2(float height,float width){ this.height=height; this.width=width; } public float square(){ return height*width; //矩形的面积 } public static void main(String [] args){ javase7_2 l =new javase7_2(5f,8f); System.out.println("矩形面积:"+l.square()); } }

VSCode 正则替换节点增加属性

<div class='node' name="jlr" @click="nodePopEvent($event)"> Ctrl +H, 弹出搜索框 Find: (name="([a-z]*)") Replace: $0 ref="$2" 点击 替换 或 替换全部: 替换成功.

C语言结构体实现简单通讯录管理系统

效果如图: 代码及详情如下: #include<stdio.h> #include<string.h> #include<stdlib.h> /*通讯录管理 问题描述:利用线性表实现一个通讯录管理。 要求: 1)实现通信录的建立、增加、删除、修改、查询等功能 ; 2) 能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作; 3) 能够保存每次更新的数据; 4) 编写main()函数测试操作的正确性。*/ typedef struct people {//定义联系人结构体 char name[20];//名字 char tel[20];//电话 }P; P num[100];//定义结构体数组,可以存100个联系人的信息 int i=0;//用于作联系人的序号,或者可以判断联系人个数是否到达了最大值 //函数声明 void menu(); void add(); void del(); void find(); void edit(); void print(); int main() { system("title 通讯录管理系统"); int in;//选择值 while (1) { menu();//菜单 scanf("%d", &in); switch (in) { case 0:return; //退出系统 case 1:add(); break; //添加联系人 case 2:del(); break; //删除联系人 case 3:find(); break; //查找联系人 case 4:edit(); break; //编辑联系人 case 5:print(); break; //打印通讯录 default:printf("

macOS环境安装zsh的跌跌撞撞:vscode终端修改为zsh, zsh: command not found:npm

通过安装zsh安装后,遇到的问题了几个小问题。 vscode终端怎么修改为zsh? 默认vscode终端为bash,我们需要在设置中修改默认配置文件。默认配置文件路径为:code->首选项->设置->搜索终端,修改选项为zsh zsh: command not found:npm 先确认本地是否安装了nodejs环境?如果你没有安装nodejs环境,自行安装一下。nodejs环境安装好就会自带npm。 如果已经安装了nodejs,仍然报command not found:npm。那就按照下面的步骤来执行一下。 在终端执行:open ~/.zshrc 在弹出的文件最底部添加: source ~/.bash_profile 这一步将.bash_profile全部环境变量加入zsh shell。 在终端执行:source ~/.zshrc 更新.zshrc配置 如果到这一步你成功了,那恭喜了🎉。我在这一步还遇到了compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask。那么接下来在终端执行 brew cleanup ,然后重复第三步,完成配置更新。

Spring之Joinpoint类详解

说明 Joinpoint是AOP的连接点。一个连接点代表一个被代理的方法。我们从源码角度看连接点有哪些属性和功能。 源码 /* * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "

Oracle数据库中实现“多行一列”转“一行多列”

Oracle数据库内数据大多按行存储,以测试数据样式为例: YMNUM2020011520200252020031220200472020059202006122020078202008120200922020103202011132020126 自己随手在数据库内建的数据,每个月对应一个数量,如果想要展示成一行多列: 数据202001|数据202002|数据202003|数据202004|数据202005|数据202006|数据202007|数据202008|数据202009|数据202010|数据202011|数据202012| sql如下: SELECT sum(CASE WHEN YM='202001' THEN num end) AS 数据202001, sum(CASE WHEN YM='202002' THEN num end) AS 数据202002, sum(CASE WHEN YM='202003' THEN num end) AS 数据202003, sum(CASE WHEN YM='202004' THEN num end) AS 数据202004, sum(CASE WHEN YM='202005' THEN num end) AS 数据202005, sum(CASE WHEN YM='202006' THEN num end) AS 数据202006, sum(CASE WHEN YM='202007' THEN num end) AS 数据202007, sum(CASE WHEN YM='202008' THEN num end) AS 数据202008, sum(CASE WHEN YM='202009' THEN num end) AS 数据202009, sum(CASE WHEN YM='202010' THEN num end) AS 数据202010, sum(CASE WHEN YM='202011' THEN num end) AS 数据202011, sum(CASE WHEN YM='202012' THEN num end) AS 数据202012 FROM csdn_case WHERE YM BETWEEN '202001' AND '202012' 最终展示效果如下:

UVM自学笔记:项目之四(重难点)——具有AHB二级流水特性的高适用性driver的编写(考虑到hready为低情况)

目录 1. driver写功能编写,为了验证driver的功能我们同时需要完善sequence、sequence_item、env、testcase以及模拟DUT行为的Slave_module 1.1 interface的编写: 1.2 driver写功能编写: 1.2.1 初始main_phase代码: 1.2.2 满足AHB二级流水要求的main_phase代码: 1.2.3. do_drive任务代码: 1.2.4.send_addr_control()/send_wdata()/judge_trans_finished()任务代码 1.2.5.对照波形进行判断 1.3. 模拟slave行为具有发送hready信号功能的module的代码 1.4. seq_item的编写,代码如下: 1.5. seq的编写,代码如下: 1.6. 在testcase中启动seq,给seq配置控制参数具体值 1.7. 在tb_top中将tb与slave_module连接起来,并且产生时钟和复位信号 1.8. 写makefile跑仿真验证写信号时序正确性 1.8.1我们打开VCS看看波形 2.完善driver的读写功能时序 2.1driver的代码部分: 2.1.1 driver中的main_phase阶段代码如下: 2.1.2 get_sim_trans的任务如下,也可以将该task写成方法 2.1.3 do_drive任务代码如下: 2.1.4 do_drive中的send_addr_control任务代码: 2.1.5 do_drive中的send_wdata任务代码: 2.1.6 do_drive中的judge_trans_finished任务代码: 2.2 接下来我们完善模拟DUT行为的Slave的module的编写 2.2.1 Slave中产生hready信号: 2.2.2 Slave中判断一笔trans是否完成: 2.2.3 Slave接受总线上的数据: ​ 2.2.4 Slave发送一笔读数据: 2.2.5 其他组件配置: 3. 用makefile编译,VCS仿真查看结果: 1. driver写功能编写,为了验证driver的功能我们同时需要完善sequence、sequence_item、env、testcase以及模拟DUT行为的Slave_module 1.1 interface的编写: interface如下,在driver,monitor和slave_module的clocking_block中声明好各自信号的方向。 1.2 driver写功能编写: 1.2.1 初始main_phase代码: Driver 通过79行代码get到seq传来的req,随后执行do_drive函数将该笔trans传递到总线上,然后调用82行代码完成与seq的握手,之后通过83行代码,来到下一个时钟上升沿,这样做会有以下几个缺点: (1)首先,#10ns是一个hard code,一旦我们更改了时钟频率,就要到driver中重新修改该值,非常不便利。

域名系统的解析过程 域名解析多久可以生效

我们网站建设好以后,就需要把域名注册好,然后进行解析,这样才能确保网站顺利上线。那么你知道域名系统的解析过程吗?域名解析多久可以生效呢?下面随我们来看一看。 域名系统的解析过程 比如,如果是单线主机建议采用A记录解析,如果是双线或者多线主机,建议采用别名解析。下面我们具体介绍下几种解析设置的区别。 1.A记录解析 A记录解析是最为常见的域名解析方式,记录类型选择”A”,记录值填写空间商提供的主机IP地址,MX优先级不需要设置,TTL设置默认的即可。选择A记录时,需要设定域名或者子域名指向,注意:对应值必须是IP地址;主机名必须填写,用@可以表示主机名为空;泛域名解析,请在主机名处输入*,增加A记录即可。 2.CNAME记录解析 CNAME类型解析设置的方法和A记录类型基本是一样的,其中将记录类型修改为”CNAME”,并且记录值填写服务器主机地址即可。不过对应的值不是一个固定的IP,而是主机的别名地址,别名解析步骤为:在主机名处填写www或者其他名称;记录类型选择CNAME记录;在记录值填写别名地址;点击立即添加,完成别名解析。 3.MX记录解析 MX记录是相对用到较少的一种解析,MX记录是做邮箱解析使用的。记录类型选择MX,线路类型选择通用或者同时添加三条线路类型为电信、网通、教育网的记录;记录值填写邮局商提供的服务器IP地址或别名地址;TTL设置默认的即可,MX优先级填写邮局提供商要求的数据,或是默认10,有多条MX记录的时候,优先级要设置不一样的数据。 域名解析多久可以生效 域名解析生效时间很快,一般服务商都是给予24小时之内生效的承诺,但往往都是一两个小时内就可以生效。 如果公司有内部DNS服务器的话,可能要等其缓存的更新,可能需要48小时。 一般通用顶级域名解析是2小时内生效,国家顶级域名解析24小时内生效。因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷新,只有DNS根服务器刷新后域名才能正常访问。 新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。 域名解析生效的过程,是域名与IP绑定的过程。当解析生效后,用户访问域名时的实现机制是:由 DNS 服务器询问域名指向了哪个 IP 地址,再由 DNS 服务器告诉客户端打开对应网站空间。 全球有无数的互联网节点与 DNS 服务器,在设置域名解析记录后,将此结果同步至全球各个 DNS 服务器,这一过程所需要的时间即为解析生效时间。 怎么取消域名解析 域名所有者可以到域名管理中心,对需要取消解析的域名进行管理,在域名解析操作界面,将解析记录删除,即可实现取消域名解析。 域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。 域名解析常见类型,有A记录解析、CNAME记录解析、MX记录解析等7种。接下来,我们以我们的域名为例简单介绍怎么取消域名解析。 1、进入用户中心:首先我们登录到我们的用户中心 2、进入域名管理列表:接着,在用户中心,找到域名管理列表页面,在这里,我们可以看到名下的所有域名。 3、取消域名解析 选择需要取消的域名,点击右侧“管理”,进入到具体域名管理界面。 在这里,我们选择“域名解析”功能,进入操作界面。 将已经设置的域名解析记录删除,即可取消域名解析。取消域名解析后,我们就无法使用域名来访问主机了。

ECOSYS FS-1040 USB打印驱动安装

前言 老旧的机器,打印总出现【突然罢工】的毛病,等几个小时又突然运作,哎。。。 官方驱动下载 https://www.kyoceradocumentsolutions.com.cn/support/mfp/download/ 安装前的准备 1.用USB 连线连接电脑和打印机。 2.将电源线连接机器,打开电源开关开机。 如果在USB 连接状态下,电脑上自动跳出【发现新硬件的对话框】窗口,请点击【取消】。 打印驱动的安装(安装USB 打印驱动时,将同时自动安装KYOCERA Client Tool 软件) 在电脑上启动安装光盘,点击Setup.exe,运行安装程序。将进入软件安装界面。 在安装对话框内点击【接受】进入安装步骤。 您可以通过滚动窗口选择语言类型。 安装界面内会显示已连接的打印机图标。选择该图标,点击【安装】开始打印驱动安装。 显示安装进度界面。点击【详细资料】可以查看驱动安装详细信息。 点击【完成】结束驱动安装。 如果您想打印测试页,请勾选【打印测试页】,然后点击【完成】结束驱动安装。 ※上述快速安装模式下安装打印机驱动的同时,将默认安装KYOCERA Client Tool 软件。 进入Windows 控制面板,选择【打印机和传真】界面,可以看到您已经安装的打印驱动。 右键驱动图标,选择【属性】即可进行驱动的相关设置。

latex中如何设置页边距和页眉页脚?

##页面和分栏 1.页边距, 1in 2. \oddsidemargin或\evensidemargin,奇数或偶数页左边距,46pt; 3. \textwidth,正文宽度,360pt。 4. 剩下的119pt 5. 页边距,1in 6. \topmargin,上边距,18pt 7. \headheight,页眉高度,12pt 8. \headsep,页眉与正文间距,25pt 9. \textheight,正文高度,595pt 10.\footskip,正文与页脚基线间距,30pt 11. 845pt减去上面全部尺寸,还剩下 93pt,比上面多了3pt 当字号发生变化时,上面的尺寸也会发生一定的变化,比如我们将oneside改成twoside,那么奇偶页的左边距分别变成22pt和70pt。 如果需要改动缺省设置,可以使用\setlength和\addtolength来设置上述宏变量的值。 也可以用geometry宏包设置: \usepackage[paperwidth=100nm, paperheight=150nm, margin=20nm]{geometry} \usepackage[top=2in,bottom=1in, left=1in, right=1in]{geometry} 页面样式 页眉页脚有下面四种样式 empty,页眉页脚空白plain,页眉空白,页脚含居中页码headings,页脚空白,页眉含章节名和页码myheadings,页脚空白,页眉含页码和用户自定义信息。 我们可以用\pagestyle和\thepagestyle命令来设置整个文档或者单独某页。前者为全局设置,后者为当前页设置。 \hfill是个弹性填充命令,它把两边推得尽可能远,如果要使用特殊符号@,则需要在第一行使用\makeatletter命令声明一下,暂时把它当作正常符号用,用完之后,在最后一行用相应的\makeatother命令恢复现场。 页眉页脚常用宏变量含义\thepage页码\thechapter章编号\thesection节编号\chaptername章起始单词名,Chapter\sectionname节起始单词名,Section\leftmark左标记,在article文档类包含section信息,在report和book文档类中包含chapter信息\rightmark右标记,在article文档类中包含subsection信息,在report和book中包含section信息 fancyhdr fancyhdr宏包提供更高级的语法。 \documentclass{article} \usepackage{fancyhdr} \pagestyle{fancy} \lhead{Sam} \chead{PDE} \rhead{CC} \lfoot{sam} \rfoot{yuyu} \usepackage{lipsum} \begin{document} \lipsum*[1] \end{document}

手动构建APK流程

先忽略构建中的细节,先对主流程有个大致了解。 如下图所示(方形:表示文件,菱形:表示操作) 整个构建分为两个主要操作:编译(Compile)、打包(APK Package)编译 :编译器(Compiler)通过编译 源码 、AIDL文件 、资源文件 、依赖包,最终生成Dex文件和编译后的资源文件。打包 :打包器(APK Packager)利用签名文件(KeyStore)和上一步编译过程中生成的Dex文件、编译后的资源文件打包成最终的APK文件。 (方形:表示文件,椭圆:表示工具及操作) 上面这张图,显示了更为详细的构建流程。以虚线为界,前半部分描述了 编译流程 ,后半部分则描述了 打包流程。 下面具体分析构建流,分为七步(其中编译1-4、打包5-7): 使用aapt工具,编译res/文件,生成编译后的二进制资源文件(.ap_文件)、R.java文件。(目前新版使用aapt2工具,R.java也替换成了R.jar)使用aidl工具,根据aidl文件生成对应的Java接口文件使用*Java Compiler工具,Java Compiler(俗称javac)将R.java、项目中的代码、Aidl接口文件编译成.class文件。使用dex工具,将上一步产生的.class文件和第三方依赖中的.class编译成.dex文件。(目前新版使用d8工具)使用apkbuilder工具,将编译后的资源(.ap_文件)、dex文件及其他资源文件(例如:so文件、asset文件等),压缩成一个.apk文件。使用Jarsigner工具,读取签名文件,对上一步中产生的apk文件进行签名,生成一个已签名的apk文件。使用zipalign工具,对已签名的apk文件进行体积优化(只有v1签名才有这一步,v2签名的apk会在zipalign后签名被破坏)。 可以参照第二张图中所展示的图片来解读这张流程图。 以椭圆(工具及操作)为线索,按照之前说的构建流程来理解此图。aapt、aidl、javac、dex、apkbuilder Jarsigner、zipalign是不是很熟悉?左边这一大块是关于Render Script、ndk编译的,我们暂时可以将其忽略(相信你读完本篇后不忽略的情况下,也可以自己分析了),只知道它提供.so文件和部分Java文件。 首先,看看左下角,椭圆操作分为三种:Gradle插件提供(由task完成)、Build工具提供、JDK自带 以aapt为例,深入分析更详细的构建流程: 在aapt之前,Gradle插件中的各类Merge类的Task会对Manifest、Res、Assets进行合并,这些被合并的资源可能来自于项目内部、android.jar、arr等第三方。这些合并后的文件作为输入文件,在经过appt编译后,编译后的资源文件、R.java文件,同时aapt也负责合并产生各类的混淆文件。 另外,在javac与dex操作之间多了一个proguard(混淆),proguard读取.class文件,生成混淆后的.class文件,交给dex(或d8)。 当我们点击运行的时候gradle是怎么实现上述构建流程的?当我们运行assembleRelease命令进行打包时,咦?这一串是啥玩意?对着上面分析的流程你就知道是啥玩意了。 //以下两个task是预编译工作,暂不关心 > Task :app:preBuild UP-TO-DATE > Task :app:preReleaseBuild UP-TO-DATE //aidl编译 > Task :app:compileReleaseAidl NO-SOURCE //生成BuildConfig文件 > Task :app:generateReleaseBuildConfig //编译Renderscrip,暂不关心(感兴趣的可以去探究Renderscrip) > Task :app:compileReleaseRenderscript NO-SOURCE //* > Task :app:javaPreCompileRelease //生成资源文件并合并 > Task :app:generateReleaseResValues > Task :app:generateReleaseResources > Task :app:createReleaseCompatibleScreenManifests > Task :app:extractDeepLinksRelease > Task :app:processReleaseManifest > Task :app:prepareLintJar UP-TO-DATE > Task :app:checkReleaseDuplicateClasses > Task :app:desugarReleaseFileDependencies > Task :app:mergeReleaseResources //产生build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/release/R.