如今,很多电脑用户都会购买上各种不同品牌的音效产品,以便在必要时可以用来作为背景音乐。但在使用电脑过程中,总会遇到一些声音问题。有些朋友可能会因为声音问题而导致电脑无法正常使用。那么,电脑没有声音了怎么恢复?我们一起来看看吧!
操作环境:
演示机型:华硕X8AE43In-SL 系统版本:Windows 10 方法一、更改系统声音 操作步骤:
步骤1:在电脑左下角找到菜单栏,在【设置】里面打开【控制面板】,单击【硬件与声音】;
步骤2:之后单击【更改系统声音】;
步骤3:在【声音】面板找到【声音方案】,如果这里显示为【无声】,就更改为【默认】,再选择【确定】即可。
方法二、音频驱动重启 操作步骤:
步骤1:鼠标右键点击【此电脑】,再单击【管理】;
步骤2:找到并单击【设备管理器】;
步骤3:找到【声音、视频和游戏控制器】,点击它的左侧小图标,展开选项。单击其中一个禁用的设备并重新启动该设备(如果没有效果,请选择剩余的音频驱动以重新启动禁用的设备)。
方法三、检查外接设备 检查电脑的外部扬声器电源线和音频电缆是否正确连接到位,有时音频电缆可能插入错误的位置。例如,音频电缆连接到麦克风和其他插孔。如果连接不正确,请更换正确的插孔。如果连接正常,排除电路故障问题。如果您不确定扬声器、电源或数据线是否存在问题,可以使用更换方法测试扬声器的连接。如果有声音,则可能是扬声器的问题。
方法四、检查声音图标 检查电脑桌面右下角的声音图标是否静音。如果静音,取消即可。
方法五、查看播放页面 如果不是桌面图标声音的问题,则检查播放网页的声音按钮是否被静音了。如果被静音,开启即可。
方法六、重启电脑 声音硬件、软件、驱动程序等都没有问题。您可以尝试重新启动计算机,个别声音问题可以通过重新启动电脑解决。
很多人会问:电脑没有声音了怎么恢复?这篇文章关于恢复电脑声音的方法还是比较全面的。如果你有这个困扰,不妨试试!如果您还有其他恢复声音的方法,欢迎在留言补充,大家一起讨论哦!
往期推荐:
电脑怎么截图?进来看(8种常用截图方法)https://mp.csdn.net/mp_blog/creation/editor/127915814d盘不见了怎么恢复?数据恢复,一键操作https://mp.csdn.net/mp_blog/creation/editor/127916391
文章目录 1 概述2 示例2.1 转换图2.2 表输入2.3 记录集连接2.4 Excel 输出2.5 执行结果 3 扩展3.1 警告:'合并连接' 算法要求输入流事先排好序3.2 警告的解决方案:排序记录 1 概述 合并排序(Merge join) 可理解为数据库中的连接方式(left join、right join、join) 警告:关联的字段需先排序,否则会遗漏数据 2 示例 2.1 转换图 2.2 表输入 测试数据:
1、表输入 with t_test_a as ( select 1 sno, 'a' name from dual union all select 2 sno, 'b' name from dual union all select 3 sno, 'c' name from dual ) select * from t_test_a 2、表输出 with t_test_b as ( SELECT 1 sno, '男' sex FROM dual UNION ALL SELECT 2 sno, '女' sex FROM dual ) select * from t_test_b 表输入:(表输出同理)
文章目录 一、通过Jprofiler调式Dump文件错误⛅ 什么是Jprofiler?⚡使用Jprofiler调试Dump文件 二、堆内存调优三、 GC垃圾回收器四、GC常用算法❄️引用计数法⛄复制算法♨️标记清除算法⛽标记压缩⚠️标记清除压缩 五、JMM⛵小结 一、通过Jprofiler调式Dump文件错误 ⛅ 什么是Jprofiler? JProfiler 是一个 用于分析运行JVM内部情况的专业工具。 在开发中你可以使用它,用于质量保证,也可以解决你的生产系统遇到的问题
JProfiler处理四个主要问题:
方法调用
这通常被称为"CPU分析"。方法调用可以通过不同的方式进行测量和可视化, 分析方法调用可以帮助了解你的应用程序正在做什么,并找到提高其性能的方法。
分配
分析堆上对象的分配、引用链和垃圾回收属于"内存分析"的范畴。 这个功能可以让你解决内存泄漏,总之使用更少的内存,分配更少的临时对象。
线程和锁
线程可以持有锁,例如通过在一个对象上做同步。当多个线程协作时,可能会出现死锁,JProfiler可以为你可视化这种情况。 此外,锁可能被争用,这意味着线程在获得锁之前必须等待。通过JProfiler可以深入了解线程及其各种锁情形。
高层子系统
许多性能问题发生在更高的语义层面。例如,对于JDBC调用,你可能想找出哪条SQL语句是最慢的。 对于这样的子系统,JProfiler提供了"探针",将特定有效载荷附加到调用树。
JProfiler的UI是一个桌面应用程序。你可以以交互的方式实时分析JVM,也可以在不使用UI的情况下,自动化分析。 保存在快照中的分析数据,可以通过JProfiler UI打开。此外,命令行工具和构建工具集成可以帮助你自动分析会话。
⚡使用Jprofiler调试Dump文件 OOM错误
import java.util.ArrayList; //-Xms 设置初始化内存大小,默认是1/64 //-Xms 设置最大分配内存,默认是1/4 //-XX:+PrintGCDetail 打印GC垃圾回收的相关信息 //-XX:+HeapDumpOnOutOfMemoryError 打印OOM的错误,并Dump //-Xms1m -Xms8m -XX:+HeapDumpOnOutOfMemoryError public class Demo03 { byte[] bytes = new byte[1*1024*1024]; public static void main(String[] args) { ArrayList<Demo03> objects = new ArrayList<>(); int count = 0; try { while (true) { objects.
1. Streamlit入门 1.1 Streamlit介绍 Streamlit是基于Python的Web应用程序框架,它可以使用Python代码轻松构建机器学习/数据科学相关的仪表板,其特点包括:
跨平台:支持Windows、macOS、Linux只需要掌握Python:不需要前端的任何基础开源:社区资源丰富,包括社区和开源地址 1.2 Streamlit快速开始 安装:pip install streamlit
运行demo:streamlit hello
运行结果如下:
通过demo可以看出Streamlit构建的整体风格,其将页面从左至右分为两部分,分别是:
导航栏:上图中的左边导航栏,用于显示多页面内容栏:展示当前页面的内容,包含下拉框 且在右上角包括设置按钮。
1.3 Streamlit相关概念 Streamlit的整个运行流程可以参考链接中的Data flow,这里给出简单说明。
Streamlit的架构每当修改了源代码或用户与Streamlit的任意组件进行交互,都会产生一个on_change或on_click的回调(callback),它会尝试执行剩下的代码(通常是整个代码文件)。
总的来说,这里将Streamlit粗略地分为:
输入:用户可以点击、选择、输入的部分;输出:页面展示给用户的部分,如表格、序列、图表、文字、代码等;其它:如布局、缓存、多页面等。 为了方便描述,后文使用st来替代streamlit
1.3.1 Streamlit输出 st.write():所有变量都可以通过该方法输出;st的magic特性:在代码中编写一个包含值的变量,会默认使用streamlit.write()方法输出;st.dataframe():用于输出dataframe,且可以传入额外的参数来自定义行为;st.table():将参数以表格形式输出;st.line_chart():将参数以折线图输出;st.map():将参数以地图的形式输出。 上述方法的第一个参数即为需要输出到页面中的具体参数,可以是list、dataframe、字符串等多种类型。
除了以上的输出,还有其他输出,如:
st.progress():展示进度条,该方法通常只需要一个参数,表示当前进度st.empty():通过其text方法可以输出placeholder,即st.empty().text('xxx') 1.3.2 Streamlit输入 Streamlit的输入通常对应着Streamlit中的组件(widgets),这里给出部分例子,详见官方的API文档:
st.slider():显示在页面的滑动条st.text_input():输入文本框st.checkbox():复选框,返回True/Falsest.selectbox():下拉跨 上述方法的第一个参数通常是组件的描述,可以传入一个命名参数key,给其设置一个唯一值,然后通过st.session_state.{key}访问该值,其中的{key}是创建组件时设置的参数值。
1.3.3 其它 布局 页面的布局可以通过多种方式设置,一种常用的方式是将组件(用户输入)都放到导航栏处,这个时候只需要将前文的st改为st.sidebar即可,如st.sidebar.slider()表示在导航栏中创建一个滑动条。
还可以使用st.columns()将页面分为多列,再使用st.expander合并列的方式完成页面的布局。
主题:可以通过设置来修改;
缓存:通过@st.cache装饰器来为方法增加cache;
多页面:只需要在当前文件夹创建多个py文件,然后使用streamlit run命令运行主文件即可。
2. VCED本项目的前端页面设计 首先需要明确整个页面的原型设计,这里直接给出最终版本的页面如下:
可以发现页面内部一共由五个部分组成,除此之外,可以发现页面的title和icon也有修改,因此一共六个部分。
这里首先设计页面,然后再设计整个页面的逻辑。
2.1 前端页面设计 页面title和icon:st.set_page_config(page_title="VCED", page_icon="🔍")页面标题:st.title('Welcome to VCED!')页面上传文件处:uploaded_file = st.file_uploader("Choose a video")描述输入文本框:可以发现这里包括标签、placeholder和帮助信息,因此都需要输入,即text_prompt = st.text_input("Description", placeholder="please input the description", help='The description of clips from the video')TopN输入文本框:与描述输入文本框同理搜索按钮:st.
npm ERR! notarget No matching version found for xxx@^1.0.64. npm 插件安装失败
npm ERR! notarget No matching version found for xxx@^1.0.64. npm 安装依赖 安装指定版本安装不成功
npm ERR! code ETARGET npm ERR! notarget No matching version found for xxx@^1.0.64. npm ERR! notarget In most cases you or one of your dependencies are requesting npm ERR! notarget a package version that doesn't exist. 解释:在安装某插件过程中查找不到此插件的这个版本号 原因: 1、可能是您当初设置的镜像源为淘宝镜像源 cnpm https://registry.npm.taobao.org
2、然而淘宝镜像源没有及时更新此插件版本,从而引起插件安装错误
解决办法 1、检测当前镜像源
npm config get registry 2、修改镜像源为npm
运算符主要分为六大类:
一,算数运算符
+(加)
-(减)
*(乘)
/(除)
%(取余) ++(自增)
--(自减)
注意:a++和++a不同,前者是先赋值后自增,后者反之,自减同理
例:
int a=1;
int b=a++;
int c=++a;
Console.WriteLine(b);//b=1
Console.WriteLine(c);//c=2
C# 例 加减乘除
using System;
namespace dajichu
{
internal class Program
{ static void Main(string[] args)
{ Program p = new Program();
p.Add(1,2);
p.less(3,4);
p.multiplication(5,6);
p.divsion(7,8);
p.remainder(9.1,10.1);
Console.ReadLine();
}
public void Add(int a, int b)
{
int c1;
c1 = a + b;
Console.WriteLine(c1);
}
public void less(int c, int d)
目录
1.题目:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
变式1:有0-9十个数字,能组成多少个互不相同且无重复数字的五位数?都是多少?
变式2:求这样两个数据:5位数=2*4位数,9个数字各不相同
变式3:对于三个三位数的也可以这么操作!
变式4:n位数,分别求该数各个数位上的数字之和。例如,输入 1234,输出 10
变式5:倒转数位输出(末尾为0的不输出)
变式6: 打印出100~999之间的所有水仙花数
变式7:编写一个函数,判断一个正整数是否为完数(输出从1到1000内的)
2.题目:判断是否为素数,若是,则返回1,否则返回0,若输入1或比1小的数字返回0
3.数组排序
4.二分法查找
5.最大公约数
变式1:最小公倍数
变式2:分解质因数只针对合数
6.猴子吃桃题
变式1:水手分椰子问题
7.实现在数组中查找最大元素和最小元素的下标
变式1:定义有10个元素的一维数组,数组元素的值由平台输入,输入变量x,将数组中所有与x值相等的元素删除,并输出删除后的数组
变式2:插入一个数到一个已排好序的数组中
8.回文问题
变式1:如何判断一个字符串是不是回文字符串?
变式2:倒转字符串输出
9.二维数组
变式1:转置矩阵
变式2:矩阵乘法
10.结构体问题
11.编写程序,生成两个字符串str1和str2,比较两个字符串的大小(不得使用strcmp函数)
11.日期问题
12.编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数
变式1:输入字符串,如果它是一个大写字母,则把它变成小写字母;如果它是小写字母,则把它变成大写字母;其它字符不变
变式2:编写一个函数,将两个字符串连接起来,不要使用strcat函数
12.阶乘算和
变式1:sinx的Taylor展开式近似计算
13.链表的各种操作
喜欢的可以点个赞赞♥
1.题目:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是 1、2、3、4,组成所有的排列后再去掉不满足条件的排列。
#include <stdio.h> #include <stdlib.h> int main() { int i,j,k; for(i=1; i<5; i++) for(j=1; j<5; j++) for(k=1; k<5; k++) { if(i!=j && i!=k && j!
💐文章适合于所有的相关人士进行学习💐
1.问题描述 VMware虚拟机出现了黑屏现象,打开虚拟机挂起能看到显示,但一开就黑屏。下面就给大家说说虚拟机黑屏怎么办,vmware虚拟机开机黑屏的解决方法。
大多数同学在安装第二层虚拟机会出现黑屏问题如下: 就是老黑屏没反应,也打不开
2.解决办法 step1.我们在开始菜单的搜索栏搜索“CMD”,找到命令提示符,我们鼠标右键点击“命令提示符”,弹出菜单之后选择“以管理员身份运行”,如下图所示。 step2.在命令提示符窗口中输入“netsh winsock reset”,然后重启计算机 到这一步就解决了外部问题 接下来新建第二层虚拟机,这时,遇到了第二个问题如图:
注意图中警告:
virt-manager 报 WARNING : KVM不可用.这可能是因为没有安装KVM软件包,或者没有载入KVM内核模块.您的虚拟机可能性很差。
step3. 解决办法:
1.如果用的vmware,则将vmware中对应的虚拟机关机。2.进入虚拟机设置(可以配置网卡,硬盘,光驱的地方)。2.点击处理器,勾选虚拟化Inter VT-x/EPT 或AMD-V/RVI(V)
下图右侧的灰色的地方,要关机才能勾选哈!!
勾选完点确定,重启虚拟机之后问题解决。
下面是效果图:
完美解决!!
🍀各位看官看完了之后不要立刻转身呀🍀 🌿期待三连关注小小博主加收藏🌿 🍃小小博主回关快 会给你意想不到的惊喜呀🍃 各位老板动动小手给小弟点赞收藏一下,多多支持是我更新得动力!!!
目录
简介
用户界面
数据探针
应用程序菜单
工具栏
状态栏
查看加载的数据
选择显示的数据
与视图交互
查看交叉引用
鼠标模式
3D 视图
切片视图
数据格式
DICOM 格式
NIFTI 格式
DICOM 和 NIFTI 的区别
Nrrd 格式
.mhd+raw
mhd格式数据
3DSlicer数据格式
数据保存
数据格式之间的关系
1.mrml与nrrd格式之间的关系
2.nii与nii.gz格式之间的关系
3.如何保存为img文件格式
nrrd批量转换nii
参考链接
相关链接
简介 3DSlicer用于医学图像分析(包括配准和交互式分割)和可视化(包括3D渲染)以及用于图像引导治疗研究的软件平台。
支持的操作系统:Linux,Mac OSX和Windows
用户界面 数据探针 Data Probe 位于模块面板的底部。它在鼠标指针的位置显示有关视图内容的信息:
切片视图信息(鼠标悬停在切片视图上时显示):
切片视图名称:Red、Green、Yellow等。
解剖位置:三个坐标值,前缀为R/ L(右/左)、A/ P(前/后)、S/ I(上/下)。原点 - (0,0,0) 位置 - 由成像技术人员在创建图像时选择。例如对于临床图像意味着当前位置从原点向右 17.6mm,向后 35.3mm,从原点向上 12.1mm。(R 17.6, P 35.3, S 12.1)
查看方向:Axial, Sagittal,Coronal用于标准解剖方向,以及Reformat任何其他方向。
切片间距:此方向上切片之间的距离。对于临床图像,意味着切片之间的距离为 2.5 毫米。Sp: 2.
首先win+R打开cmd
再输入pip install pandas。通常要安装库都是通过这个命令下载的pip install +库名
在安装过程中你也可能遇到以下情况
could not build wheels for psutil,which is required to install pyproject 解决方法 输入python查看自己的python版本
我的是3.10.0版本on win32
打开官网https://www.lfd.uci.edu/~gohlke/pythonlibs/#
可以看到以上界面,CTRL F弹出以下搜索框,输入pandas
可以看到标亮的pandas,点击pandas
会直接弹到相应的pandas库
对应刚刚我们查的python版本3.10.0以及win32可以找到对应的cp310-win32.whl下载
下载完成后打开文件夹,右键点击该文件,复制文件路径
回到cmd中,输入pip install 刚刚复制的文件路径
最后就可以成功安装啦!!!
想把$BSGS修改为从gUserdefined继承,只能删掉原来的$BSGS,然后在gUserdefined新建一个$BSGS----坑①
如果这个BSGS里面有200个属性,那么还得手动再敲一遍(无法批量导入属性)--坑②
新建的时候,在虚拟机的ide反应卡的要死,点一下等十来秒---坑③
1、实现代码
private const int BACK_LOG = 5; private Socket tcpServer; private Socket tcpClient1; private CancellationTokenSource cts = new CancellationTokenSource(); private void btServerStart_Click(object sender, EventArgs e) { if (this.btServerStart.Text == "打开") { //Socket实例化 tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建EndPoint EndPoint ep = new IPEndPoint(IPAddress.Parse(this.tbServerIPAddress.Text), int.Parse(this.tbServerPort.Text)); try { //绑定 tcpServer.Bind(ep); }catch(Exception ex) { MessageBox.Show("服务器打开失败:" + ex.Message); return; } MessageBox.Show("服务器打开成功"); this.btServerStart.Text = "关闭"; tcpServer.Listen(BACK_LOG); Task.Run(new Action(() => { ListenConnection(); })); } else { tcpServer?
一、引言
我们在使用IDEA时,有时候在切换中英文输入法的时候,会不小心按了两次shift键,从而弹出 全局搜索框 ,让人不耐其烦,每次都要手动关闭这个搜索框。
二、取消双击shift
1.按ctrl+shift+alt+/ 在弹出的框中选择注册表(registry…)
2.找到ide.suppress.double.click.handler选项,选中打上勾,然后点close。
大功告成,我们再按shift就不会弹出 全局搜索框啦。
第一步:本地建一个项目文件夹;
第二步:用vscode打开这个文件夹;
第三步:点击第三个图标,源代码管理,点击初始化
第四步: 添加远程库
第五步:写入git@gitee.com:XXXXXXX/gittest.git
第六步:定义远程库存储名称:origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库;
第七步:签出代码:
第八步:开始编码工作
如果需要创建一个develop分支
第一步:如下操作
第二步:填写分支名称叫develop;
第三步:选择一个源分支,选择master;
第四步:点击云上传,绑定远程分支
最后,别忘了给开发者权限
yml配置文件 spring: cache: type: jcache jcache: config: classpath:ehcache.xml datasource: name: 乳腺健康检测系统 本地数据库 url: jdbc:mysql://127.0.0.1:3306/breast?&rewriteBatchedStatements=true username: root password: root 1:使用 @Value 读取配置文件(适用于参数少的情况) 我们可以直接在对象的属性上使用 @Value 注解,同时以 ${} 的形式传入配置文件中对应的属性。
同时需要在该类的上方使用 @Configuration 注解,将该类作为配置文件加入,在启动项目的时候实现注入。
@Configuration public class DatasourceProperties { @Value("${spring.datasource.url}") private String datasourceUrl; @Value("${spring.datasource.username}") private String datasourceUsername; @Value("${spring.datasource.password}") private String datasourcePassword; } 2:使用 @ConfigurationProperties 读取配置文件(适用于参数多的情况,不需要在每一个字段的上面的使用@Value注解) //@ConfigurationProperties注解声明当前类为配置读取类 //prefix="spring.datasource" 表示读取前缀为spring.datasource的属性 @Setter @Getter @Component @ConfigurationProperties(prefix = "spring.datasource") public class DatasourceProperties { private String datasourceUrl; private String datasourceUsername; private String datasourcePassword; } 注意:
文章目录 需求需求分析分页问题说明分页问题原因一对多场景一一对多场景二性能优化优化解决方案 需求 查询用户信息列表,其中包含用户对应角色信息,页面检索条件有根据角色名称查询用户列表;
需求分析 一个用户对应多个角色,用户信息和角色信息分表根据用户id关联存储,用户和角色一对多进行表连接查询,
创建对应表:
CREATE TABLE `sys_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', `name` varchar(50) DEFAULT NULL COMMENT '姓名', `age` int DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表'; CREATE TABLE `sys_role` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID', `role_name` varchar(30) NOT NULL COMMENT '角色名称', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色信息表'; CREATE TABLE `sys_user_role` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', `user_id` bigint NOT NULL COMMENT '用户ID', `role_id` bigint NOT NULL COMMENT '角色ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户和角色关联表'; INSERT INTO tsq.
文章目录 前言使用步骤1. 导入项目2. 设置tomcat2.1 为项目选择tomcat2.2 设置tomcat的server.xml 3. 加载java3.1 设置Classpath Configuration3.2 编译项目 4. 启动项目 总结 前言 由于当前接触到的一些老项目,未使用maven管理依赖;使用idea社区版无法实现热部署,在调整页面时超级不方便。基于总总原因,需要找寻一个方便且简洁的ide工具启动普通Web项目。此时,VSCode出现啦。
本文主要是介绍启动项目的相关内容,插件的安装和设置不做赘述。
ps:安装VSCode插件或启动maven管理依赖的项目可查看另一篇帖子。【传送门】
使用步骤 1. 导入项目 VSCode选择相应菜单,并选中项目所在文件夹。
2. 设置tomcat 2.1 为项目选择tomcat 在TOMCAT SERVES 栏点击“+”,选中自己本地tomcat所在目录,会为当前项目增加一个tomcat,在磁盘中为该项目创建一个tomcat的工作目录。对这个tomcat进行设置,不会影响其他项目的tomcat设置。
2.2 设置tomcat的server.xml 先选中自己的tomcat,右键出现菜单。选择“Open Server Configuration”,会打开当前项目tomcat的server.xml文件。主要将当前项目的信息设置在tomcat中,在运行时无需再手动设置项目信息。
下面是重要内容的说明:
Host appBase:为项目在磁盘中的完整路径
Context path:为在浏览器中访问时的名称(我的为http://localhost:8080/yfcrk/)
Context docBase:为项目静态资源所在目录(对于项目根目录的相对路径)
3. 加载java 打开任意java文件,Java PROJECTS 会自动加载项目。
3.1 设置Classpath Configuration 点击JAVA PROJECTS 栏的“…”选中“Configure Classpath”。
需要注意的内容有三点:
(1)检查项目的java资源路径是否正确;
(2)检查java文件编译后的路径是否正常(使用默认路径会无法启动);
(3)检查项目的java是否已经全部引入;
3.2 编译项目 修改Output路径后,需要对项目进行重新编译。在JAVA PROJECTS 栏点击“Rebuild All”按钮,进行编译。编译完成后,检查Output路径下是否有编译后的文件。
4. 启动项目 在TOMCAT SERVERS栏下选中自己的tomcat,点击右键出现菜单,选择菜单中的“Start”,启动项目。
总结 启动普通Web项目,相比启动Maven管理依赖的项目在设置上更繁琐一些(也可能是我没找到更好的方法)。一次设置,永久使用。
距离矢量路由选择协议(DV算法) 每个路由器维护一张表,表中列出了当前已知的到每个目标的最佳距离,以及为了到达那个目标,应该从哪个接口转发。
DV算法是动态的和分布式的,它常被用于小型网络,例子:RIP就是一个典型的DV。
每个路由器(节点)维护两个向量,Di和Si,分别表示从该路由器到其它路由器的距离以及相应的下一跳。
在邻居路由器之间交换路由信息(矢量),每个路由器(节点)根据收到的矢量信息,更新自己的路由表。
di1:从节点i到节点1的度量(代价)
Si1:沿着从节点i到节点1的最优路径上的下一跳
n:网络中的节点数,节点从1、2、......、n
优点:简单
缺点:交换的信息太大了,路由信息传播慢,可能导致路径信息不一致、收敛慢、度量计数到无穷、路由环、不适合大型的网络。
链路状态路由协议(LS) 主要思想:
1、发现它的邻居节点们,了解它们的网络地址。(当一个路由器启动的时候,在每个点到点的线路发送一个特别的HELLLO分组,收到HELLO分组的路由器应该回送一个应答,应答中有它自己的名字)
2、设置到它的每个邻居的成本度量。(为了决定线路的开销,路由器发送一个特别的ECHO分组, 另一端立刻回送一个应答;通过测量往返时间(roundtrip time),发送路由器可以获得一个合理的延迟估计值,了得到更好的结果,可多次测量,取均值;一种常用的选择,与链路带宽成反比)
3、构造一个分组,包含它所了解到的所有信息。
链路状态分组构造后被发送给其他的路由器,分组中包含这些信息:发送方的标识、序列号、年龄、邻居列表、到邻居的成本/量度。
4、发送这个分组给所有其他的路由器。
5、计算到每个路由器的最短路径。
基本算法:
1、每个分组都包含一个序列号,序列号随着新分组产生而递增。
2、路由器记录下他看见的所有(源路由器, 序列号)对。
优点:每个路由器的认识一致、收敛快、适合在大型网络里使用。
缺点:每个路由器需要较大的存储空间,计算负担很大。
开放的最短路径优先(OSPF) 方法:使用图(graph)来表示真实的网络,每一个路由器都是一个节点,测量代价/量度。
概述:
1、OSPF是一种基于开放标准的链路状态路由协议,是目前IGP中应用最广、性能最优的一个协议。
2、OSPF可以在大型网络中使用。
3、无路由自环。
4、OSPF支持VLSM、CIDR等。
5、0使用带宽作为度量值(10^8/BW)。
6、收敛速度快。
7、通过分区实现高效的网络管理。
划分区域 所有子区域必须连到区域01上。
OSPF运行步骤
1、建立路由器毗邻关系。
2、选举DR和BDR。(DR故障则BDR接替DR成为新的DR)
3、发现路由。
4、选择最佳路由。
5、维护路由信息。
SPF算法 为什么说OSPF克服了路由自环?
无类域间路由(CIDR) 一、IP地址的问题
好处:缓解地址枯竭的趋势,控制甚至缩短了路由表的开销。
基本思想:分配IP地址的时候不再以类别分,而是按照可变长的地址块来分配(按需分配)。
路由表扩展 1、增加32bit子网掩码。
2、路由表表项(IP address,subnet mask,outgoing line)。
当一个分组到来时:
1、分组中的目标IP地址(Destination IP)被检查
2、目标IP和子网掩码进行与操作,得到网络地址。查找路由表。
3、若路由表中有许多表项匹配,选子网掩码最长的那个表项。
例子:
例子
集合:
Windows是我们最常见的电脑操作系统,那么如果我们在尝试激活Windows时出现错误代码0xC004C003,应该如何解决?
什么是Windows激活错误0xC004C003,出现该错误的原因是什么? Windows操作系统为了抑制盗版软件,在安装系统时需要通过微软公司的正版验证,该过程就是Windows激活过程。通常情况下,Windows产品密钥是由25个字符组成的代码,只有用密钥激活设备之后才能够正常使用系统及后续的系统升级服务。
但是,有时候这一过程也并非很顺利,比如本文重点要解决的激活错误0xC004C003。造成该错误出现的原因有很多,大致包含以下几种:
网络服务器繁忙:如果您当前的网络环境不够流畅、较为繁忙的话,很可能会导致激活过程的失败,并同时出现0xC004C003的错误提示。因此,您可以待网络环境稳定或者更换一个网络状态较好的环境下重新激活尝试。
产品密钥无效或过期:当您的Windows产品密钥过期(免费升级邀请过期),或者密钥是非官方渠道提供时,可能因为密钥错误而导致激活失败。
更换了设备硬件:当您首次激活Windows时,您的硬件会在Microsoft的激活服务器上注册。这样的话,下次您重新安装Windows系统时,就可以无需输入产品密钥直接借助数字版权执行激活操作。但是,当您更换了计算机上的主要组件,就会出现激活过程的失败。这种情况下,您只能联系Microsoft客户支持帮助解决了。
了解完可能造成Windows激活错误代码0xC004C003出现的原因之后,接下来,我们就来学习几种常规的修复该错误的方法吧。
如何修复Windows激活错误代码 0xC004C003? 1、检查是否输入了有效的产品密钥 如果您在手动输入Windows产品密钥的过程中出现了错误代码 0xC004C003的问题,那么可能是因为该密钥输入错误或者其本身无效所致。这种情况下您可以多次尝试,或者更换一个新的产品密钥以解决当前问题。
2、运行Slmgr.vbs命令 slmgr.vbs是Windows系统软件授权管理工具,其主要作用在于查看系统的激活状态、以及密钥许可证等信息。当Windows激活过程出现了错误代码0xC004C003时,如果是因为网络环境拥挤,激活服务器超载所致,您可以隔一段时间之后再尝试借助该命令激活Windows,具体操作步骤如下:
步骤1:在左下角搜索框内搜索【cmd】,右键点击搜索结果,选择【以管理员身份运行】打开命令提示符工具。
步骤2:在打开的命令提示符窗口里,输入命令【slmgr.vbs -rearm】并按下【Enter】键。注意:【slmgr.vbs -rearm】命令与【slmgr.vbs /rearm】只是写法不同,作用是一样的,都可以重置激活计时器。待命令执行完成之后,重启计算机并查看问题是否已解决。
3、借助命令行查看密钥并手动激活 当您忘记产品密钥时,可以借助命令提示符帮助您找到产品密钥,并手动激活使用,具体操作步骤如下:
步骤1:在左下角搜索框内搜索【cmd】,右键点击搜索结果,选择【以管理员身份运行】打开命令提示符工具。
步骤2:在打开的命令提示符窗口里,输入以下命令【wmic path SoftwareLicensingService get OA3xOriginalProductKey】,并按下【Enter】键,以帮助您查看产品密钥。
步骤3:接下来,在计算机设置界面里点击【更新和安全】选项并进入。点击左侧【激活】选项,并按下右侧【激活】按钮即可执行Windows手动激活操作。
以上,就是解决Windows激活错误代码0xC004C003的方法。如果都无法解决,您还可以通过Windows安装介质重新安装系统,在安装过程中出现输入产品密钥界面时请先跳过,等待安装完成,进入系统之后再手动激活系统。
目录
1.带头双向循环链表的特点
2.带头双向循环链表的结构和结构体定义
3.各接口函数实现
3.1 创建一个新的带头双向循环链表的结点
3.2 创建返回链表的头结点
3.3 带头双向循环链表尾插和尾删
3.4 带头双向循环链表头插和头删
3.5 带头双向循环链表打印
3.6 带头双向循环链表查找
3.7 带头双向循环链表在pos的前面进行插入
3.8 带头双向循环链表删除pos位置的节点
3.9 判空
3.10 带头双向循环链表销毁
1.带头双向循环链表的特点 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势
2.带头双向循环链表的结构和结构体定义 我们用两个指针prev 和 next 分别指向结点的前一个结点和下一个结点
(头结点的front指向链表的最后一个结点)
(链表的最后一个结点的next指向头结点) typedef int Datetype; typedef struct DoubleList { Datetype Data; struct DoubleList* prev; struct DoubleList* next; }DL; 3.各接口函数实现 3.1 创建一个新的带头双向循环链表的结点 DL* Buynewnode(Datetype x); 跟创建普通链表结点一样,只不过多了一个prev结构体指针
DL* Buynewnode(Datetype x) { DL* newnode = (DL*)malloc(sizeof(DL)); if (newnode == NULL) { perror("
ArcGIS按像元栅格值提取栅格 方法一:Extract by Attributes Extract by Attributes
(以ArcGIS pro为例,ArcGIS经典版系列也是同样的操作)
该工具在Spatial Analysis里,然后是Extraction
我想筛选出坡度小于17的栅格
若没有value属性,需要对栅格进行重分类
Spatial Analyst Tools Reclass Reclassify 结果如图:
有时候你需要导出矢量,这样reclassify之后直接Raster to Polygon
但有时候我们仅仅需要0-1栅格,只关心是不是,不关心值多少
方法二:Raster Calculate 直接输入条件判断:
slope < 17即可
131)]
直接输入条件判断:
slope < 17即可
JDK8的安装和环境配置 一、JDK8下载二、安装三、环境配置 一、JDK8下载 官网下载:
https://www.oracle.com/java/technologies/downloads/#java8-windows
二、安装 打开安装,一直下一步即可,可以在安装过程中更改安装地址,我放到了D盘。
三、环境配置 右击电脑点击属性,选择高级系统设置
选择环境变量
点新建
变量名写JAVA_HOME,变量值就是jdk的路径
然后找到Path,点击编辑
点击新建,输入%JAVA_HOME%\bin路径和%JAVA_HOME%\jre\bin路径
最后win+r输入cmd ,输入java -version查看版本,输入java,会出来java相关操作信息,javac出现一串信息表示path路径对了。
1.首先要说得是,优化不能解决根本问题,机器小水管,再优化还是不行。 我感觉4核8g应该可以,截图这机器是阿里云送的免费一个月 4核8g 内存,不知是不是送得问题,感觉也是hold不住。 负载逛逛升,8.几负载!
2. 解决办法: 主要调整的是限制内存的使用,调整postgresql的缓存以及进程,关闭prometheus监控。
1. 编辑配置文件 cd /etc/gitlab vi gitlab.rb 2. 配置文件中调整参数如下: gitlab_rails['time_zone'] = 'Asia/Shanghai' unicorn['worker_processes'] = 2 unicorn['worker_memory_limit_min'] = "100 * 1 << 20" unicorn['worker_memory_limit_max'] = "250 * 1 << 20" sidekiq['concurrency'] = 8 postgresql['shared_buffers'] = "128MB" postgresql['max_worker_processes'] = 4 prometheus_monitoring['enable'] = false 3. 应用更改后的配置、重启gitlab gitlab-ctl reconfigure gitlab-ctl restart 3. gitlab 真是吃内存, cpu。双核感觉也不够使。4核8g 勉勉强强用 =_=!
4. 我这个不止gitlab 内存问题,原来是被注入挖矿程序了。第二天就系统重装了,看我截图,zzh 那个就是挖矿病毒。。。。都不知道什么时候进来得=_=
下列关于Kmeans聚类算法的说法错误的是(D) A. 对大数据集有较高的效率并且具有可伸缩性
B. 是一种无监督学习方法
C. K值无法自动获取,初始聚类中心随机选择
D. 初始聚类中心的选择对聚类结果影响不大
聚类算法研究的问题包括:(多选)(ABC) A. 使最终类别分布比较合理
B. 快速聚类
C. 准确度高
D. 能自动识别聚类中心的个数
3、简述K-means算法的聚类实现流程。 ① 随机初始化K个中心点;
② 计算未知样本点分别到这K个中心点的距离D;
③ 将该未知样本点归类为与D值最小时的中心点相同的类别;
④ 计算这K个分类簇的均值分别做为这K个簇的新的中心点;
⑤ 重复第①-④步,直至新的中心点与旧的中心点一致,则迭代停止,将最后这次的聚类作为最优聚类结果。
4、请简述K-means算法的优缺点。 答:
优点:
① 原理比较简单,实现也是很容易,收敛速度快;
② 聚类效果较优;
③ 算法的可解释度比较强;
④ 主要需要调节的参数仅仅是聚类中心数k。
缺点:
① K值的选取不好把握;
② 对于不是凸的数据集比较难收敛;
③ 如果各隐含类别的数据不平衡,比如各隐含类别的数据量严重失衡,或者各隐含类别的方差不同,则聚类效果不佳;
④ 采用迭代方法,得到的结果可能是局部最优;
⑤ 对噪音和异常点比较敏感。
5、请简述有哪些评估指标和方法可用于评估聚类算法。**
① SSE:误差的平方和,计算每次聚类之后类内样本点与该聚类中心点距离的平方和,
值越小代表聚类效果越好。此法简单粗暴,初始中心点选取不当会陷入局部最优解。
② 肘部法:通过绘制类内样本点到中心点距离的平方和与K值的折线图来确定最佳的K值,
最终确定当前样本集被分为K个聚类中心是最佳的聚类效果。
6.在K-means算法中,以下哪项可用于获得全局最优解:(D)
① 尝试为不同的质心(centroid)运行初始化算法
② 调整迭代的次数
③ 找到集群的最佳数量
A. ②和③
B. ①和③
项目运行
环境配置:
Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。
项目技术:
SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 5.7/8.0等版本均可;
毕设帮助,指导,本源码分享,调试部署(见文末)
3.1 可行性分析 汽车票售票系统主要目标是实现网上汽车票售票的相关信息管理服务。在确定了目标后,我们从以下四方面对能否实现本系统目标进行可行性分析。
3.1.1 技术可行性 汽车票售票系统主要采用java技术,基于B/S结构,Mysql数据库,对于应用程序的开发要求具备完整功能,使用简单的特点,并建立一个数据完整安全稳定的数据库。汽车票售票系统的开发技术具有很高可行性,且开发人员掌握了一定的开发技术,所以系统的开发具有可行性。
3.1.2操作可行性 汽车票售票系统的登录界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,会员只要平时使用过电脑都能进行访问操作。此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。本系统具有易操作、易管理、交互性好的特点,在操作上是非常简单的。因此本系统可以进行开发。
3.1.3 经济可行性 汽车票售票系统是基于B/S模式,采用Mysql数据库储存数据,所要求的硬件和软件环境,市场上都很容易购买,程序开发主要是管理系统的开发和维护。所以程序在开发人力、财力上要求不高,而且此系统不是很复杂,开发周期短,在经济方面具有较高的可行性。
3.1.4 法律可行性 此汽车票售票系统是自己设计的管理系统,具有很大的实际意义。因为无论是软件还是数据库,采用的都是开源代码,因此这个系统的开发和设计,并不存在侵权等问题,在法律上完全具有可行性。
综上所述,汽车票售票系统在技术、经济、操作和法律上都具有很高的可行性,开发此程序是可行的。
3.2系统流程分析 3.2.1系统开发流程 汽车票售票系统开发时,首先进行需求分析,进而对系统进行总体的设计规划,设计系统功能模块,数据库的选择等,本系统的开发流程如图3-1所示
图3-1系统开发流程图
3.2.2 用户登录流程 为了保证系统的安全性,要使用本系统对系统信息进行管理,必须先登陆到系统中。如图3-2所示。
图3-2 登录流程图
3.2.3 系统操作流程 用户打开并进入系统后,会先显示登录界面,输入正确的用户名和密码,系统自动检测信息,若信息无误,则用户会进入系统功能界面,进行操作,否则会提示错误无法登录,操作流程如图3-3所示。
图3-3 系统操作流程图
3.2.4 添加信息流程 管理员可以信息等进行添加,用户也可以对自己权限内的信息进行添加,输入信息后,系统会自行验证输入的信息和数据,若信息正确,会将其添加到数据库内,若信息有误,则会提示重新输入信息,添加信息流程如图3-4所示。
下面是报错信息
@Data @Configuration @ConfigurationProperties(prefix = "aa.bb") public class XxConfig { /** * xx */ private String xx; /** * oo */ private String oo; } ``
报错得是自定义得配置类,网上搜有解决方案,很多都是不能解决问题得。总结一下各种方案
配置类上没加@Configuration导致配置类扫描不到,这个很常见。使用配置类时用@Autowired(required = false)。极不推荐,不能解决问题,掩耳盗铃。如: @Service public class XxServiceImpl implements XxService { @Autowired(required = false) private XxConfig config; } 在引用配置类得类上面加注解@EnableConfigurationProperties,我目前就是这种方案解决的。如: @Service @EnableConfigurationProperties(XxConfig.class) public class XxServiceImpl implements XxService { //推荐使用@Resource代替@Autowired @Resource private XxConfig config; }
在使用Spring Security时发现,所有的get请求都可以正常访问,但是post请求一直提示403.最终发现SpringSecrity默认开启CSRF保护。
CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式。
可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。
方式1:禁用CSRF保护 这种比较暴力,如果禁用可能就违背了SpringSecrity的安全认证了。
@Configuration @Order public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { //禁用csrf保护 http.csrf().disable(); http.authorizeRequests() .antMatchers("/hello", "/hellopost").permitAll() .anyRequest().authenticated() .and().formLogin().and().httpBasic(); } } 方式2:使用csrf忽略部分接口 @Configuration @Order public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { //忽略hellopost接口 http.csrf().ignoringAntMatchers("/hellopost"); http.authorizeRequests() .antMatchers("/hello", "/hellopost").permitAll() .anyRequest().authenticated() .and().formLogin().and().httpBasic(); } } 方式3:重写CSRF保护策略 推荐用这种方式
import org.springframework.security.web.util.matcher.RequestMatcher; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.
首先在管理员权限下创建用户,具体创建命令有两种创建用户有两条命令:adduer和useradd,对应着两条删除用户的命令:deluser和userdel。其区别具体见博客:地址1,地址2
个人建议使用adduser命令创建。(删除的时候用 sudo userdel -r username,可以连主目录一起删除)
sudo adduser username 如果创建的是管理员账户,参考地址3,创建的用户可以使用管理员权限。加上 --home 可指定用户主目录位置,例如 --home /home/test/username,当然如果用户已经创建了,则可以在目标位置创建好位置,复制当前主目录所有内容到目标位置,然后修改系统设置的主目录位置。
每个用户在创建的时候,都会至少存在于一个组,
Linux中每个文件有所有者(u)、所在组(g)、其它组(o)的概念,不同的组对于文件处理的权限有三种,读(r),写(w),执行(x),具体可看地址4
这里我贴一下
所以,如果我们创建的不是超级管理员账户,而是普通用户的话,设置用户只能看见自己home目录下的文件,可以使用命令(管理员账户下执行)
sudo chmod 700 /home/username 如果我们组内用户之间可见,那么首先我们创建一个组。这里先列举一些查看组的命令,
列出所有组
cat /etc/group 创建组,-g 是用来指定group id 的
sudo addgroup -g 1006 groupname 删除组命令,如果报错,参考解决方案
sudo groupdel groupname 用户添加到组内
sudo adduser username groupname 用户从组内移除
sudo gpasswd -d userName groupName 在Linux系统中,文件或者文件目录一般是只有一个组,和文件所有者,但是一个用户可以在多个组里。
首先,我们通过以下命令,查看文件的所有者和所在组以 /home/admin 为例子
ls -l /home/admin 我的输出结果某一行是
drwxr-xr-x 2 admin admin 4096 5月 31 18:55 Desktop 解释一下,第一个d是代表文件目录的意思,然后rwxr-xr-x,9个字符,每三个一组,为rwx ,r-x,r-x,通常要r代表读取权限,w代表写入权限,x代表可执行权限,-代表没有权限,第一组为为文件所有者,权限为rwx,即可读可写可执行,第二组为同组用户对该文件的权限为r-x,可读不可写(不可修改)可执行,第三组为其他用户,权限为r-x,即可读不可写可执行。2代表的是Desktop是admin文件的二级目录,第一个admin是Desktop 文件的所有者,第二个admin是文件所在的组,4096代表文件大小,单位为字节,即4kb,后面的是时间,还有文件名字。具体看下图,原文链接(感谢原作者)
一.strip()
strip()简单来说就是:
返回删除前导和尾随空格的字符串副本。如果给定了chars而不是None,则删除chars中的字符。
下面来举几个例子:
1.strip()括号内无任何字符
2.strip()括号内存在字符 二.split()
split()函数通常是对字符串进行操作,操作完之后的结果,变成了一个字符串列表。split函数按照括号内给定的字符进行分割,如果括号内是空的,也就是没有指定具体的分割内容的话,那么就默认的按照空格进行分割。
同样我们来举几个例子:
1.按照默认的方式进行划分(默认是按照空格进行分割)
2.按照指定的某一个字符进行分割,分割之后返回字符串列表,字符串列表中不包括你指定的分隔符
此外,这两个函数也可以联合起来使用,主要用于处理文件的读取划分等,更多功能可以自行探索一下
文章目录 1. 个人对学习的思考(希望能够帮助到你们)2. 跨越个人当前的层次3.在csdn发布文章的原因4.以后发布的内容5.结语希望有前辈或者大佬给予指导,谢谢各位谢谢各位了!!! 1. 个人对学习的思考(希望能够帮助到你们) 在讲我对学习的看法前,我先简单介绍一下我的求学经历。
我是一名湖南省职高的学生,经历职高高考,进入了本省的大学。现在是大一在读的一名软件工程专业学生。
关于学习:
先谈一谈大学的学习跟高中的学习主要的区别,主要的不同。还有就是我对学习的一些思考。因为我刚刚进入大学不久,我就根据这段时间的学习做一个参考,谈一谈这个问题。
一、我们为什么学习?
这段时间,其实我的学习不是很愉快。 因为个体间的差异,因为刚刚到大学,对于这里的学习生活还不是很适应。有过很多的情绪,想放弃,可是不甘心。不甘心落后,自尊心强,不愿意和自己和解。
所以,我思考了一个问题——为什么要学习呢?
到这,有人可能会很快的回复这个问题的答案,可是,那是你自己心里的想法吗?你自己认真思考过这个问题吗?
经过我的思考后,我认为学习的目的是,那就是弄懂事物运转的过程。所以学习的原因就是,为了更好的服务于我们进入社会后的工作学习简单来说,就是学习是为了我们以后的生活。所以,我在这里指出,学习要服务于以后的生活。
为什么我要这样说呢?
弄懂了事物的运转流程,我们就有了自己的世界观。或者说,事物是一个集合,而世界呢,世界上有很多东西,有不同的事物。弄懂了事物的运转流程,摸清了事物发展的规律,我们也就懂了世界,懂了世界,我们才能更好的追求自己的目标,做自己想做的事。
举个例子:在一场辩论赛上,有人对于当前社会内卷作出了批判。这里首先,我们先弄清楚内卷的本质,或者说内卷在工作、学习、生活中所运转的流程是怎么样的
内卷所反馈在工作上的流程是,有人为了拿更多的蛋糕,而比其他员工更加努力,这里的蛋糕始终和之前一样大。然后我们发现,其中一个人一旦多拿了,其他人就会少拿,当其他的人想拿回原来蛋糕的量的时候,他会怎么办呢?
显然只有努力工作,学习。当所有人都这样去努力工作时,分配的蛋糕是不是和刚刚开始工作时的蛋糕一样多了?付出的比原来更多,得到的却和原来一样这就是内卷了形成的流程。
那么这里,我们想一想这件事的本质是什么?那就是分配机制的不合理。
回到正题,为什么要学习呢?对于我来说,是为了服务于以后的生活,为了让自己以后生活的更好
在大学期间,我不仅希望学习是为了以后的工作,更加要去提升自己的综合能力,包括决策、为人、掌控情绪、恋爱观等等。
二、大学学习和高中以前的学习的区别
自主学习能力
大学,更多的是给我们一个平台,需要我们自己努力,自己明确目标,自己去慢慢实现。大学不会有人强制的要求你去学习,更多的是自学。所以在大学需要更多的独立思考。
提升自我掌控情绪的能力,提示综合判断力,大学是我们离社会的最后一道关卡。
尽情的发展自己想做的,喜欢做的东西。
2. 跨越个人当前的层次 我们每一个都有差异性,就好像世界上,没有相同一片叶子一样。
因为不同,我们各自有各自的角色。几个月前,我还坐在一所不知名职校教室里为高考准备。那时候,我的学历根本不值一提,或者说,现在也是一样。**但是,在这里,我想说,不能因为这样就停下学习的脚步。如果累了,可以休息,但是不能退出赛道。**看一看现在的社会分配体制,看一看,有多少比自己更优秀的人,还在人海里漂浮,不能达到自己目标。所以,不能对当下太过满足,努力提高自己,可以慢慢一步一步的来,跨越自己当下的层次。
努力成为更好的自己,去学技术、学做人、思考事物的本质。
3.在csdn发布文章的原因 这是我的第一篇文章,里面没有对于计算机编程方面的涉猎,因为这是我的开始。不为了其他,主要是总结自己前一段时间的思考,记录自己大学学到的知识。记录我思考过的每一个点。反思自己的学习,反思自己的行为,为了更好的自己而努力。
4.以后发布的内容 以后发布的内容,主要是我平时学习的一些知识、算法、思考等等,记录自己的大学四年。
5.结语 最后,谢谢能够看到我的文章的读者,谢谢你们愿意花费时间来读我这篇文章,这一篇内容杂乱,文字冗长的文字。
希望有前辈或者大佬给予指导,谢谢各位谢谢各位了!!!
const getDateFn ={ //1、 得到今天、昨天、明天日期 //dates为数字类型,0代表今日,-1代表昨日,1代表明日,返回yyyy-mm-dd格式字符串,dates不传默认代表今日。 getDate(dates) { var dd = new Date(); var n = dates || 0; dd.setDate(dd.getDate() + n); var y = dd.getFullYear(); var m = dd.getMonth() + 1; var d = dd.getDate(); m = m < 10 ? "0" + m: m; d = d < 10 ? "0" + d: d; var day = y + "-" + m + "-" + d; return day; }, //2、得到本周、上周、下周的起始、结束日期 //type为字符串类型,有两种选择,"
【已解决】Win 10 切换程序时,默认输入法始终为英文,抓狂,解决办法 这个问题困扰我有一两个月了,表现是这样的:
系统开机后,默认输入法是系统英文输入法,切换回中文输入法后,再切换任意程序,都会恢复到默认的系统英文输入法。所以我每次切换程序,都需要按一下组合键调出中文输入法,每次 ctrl + tab 切换程序后都要这样,疯了,今天终于在要重装系统之前找到了答案。
我之前以为是装的输入法有问题,就安装了其它的输入法,重启了无数次,都不管用。
一、无效的解法 普通的解法是,打开【语言设置】,点击【键盘】,把【允许我为每个窗口设置不同输入法】勾选上,但并不管用。
二、正确的解法 https://answers.microsoft.com/zh-hans/windows/forum/windows_10-other_settings/windows10%E8%BE%93%E5%85%A5%E6%B3%95%E8%87%AA/8c202890-8214-4c48-a185-031f5c1cde67?page=1
找到了官方的说明,试了下。
解决过程:
在有问题之前,我的系统语言里只有中文一个
安装英文,不需要安装语音识别将英文调到最上面重启 结果中文输入法在开机后就被选中了!总算解决了
三、之后又出现了同样的问题,解决办法 之后我又遇到了一次这样的问题,才算明白怎样才是有效的。
当【应用和网站】及【键盘】都显示为中文的时候才是有效的。
具体操作步骤:
已安装除汉语外的另外一种语言。点击【键盘】 在出现的窗口中选择 【使用语言列表(推荐)】 然后返回,应该看到:两个语言列表的顺序变了,英文跑到最上面,此时点击语言上的调节次序的按钮,把中文调到最上面,之后就能看到【键盘】和【应用和网站】两个图标下面的语言自动变成了中文。注销用户再登录即可。 这张图片是我已经调整好的,未调整的是英文在上。
数据增强 1.有监督数据增强1.1 单样本数据增强augly安装augly使用方法 1.2 多样本数据增强1.2.1 SMOTEpython实现 1.2.2 SamplePairingpython实现 1.2.3 mixuppython实现 2.无监督数据增强2.1 GAN2.2 Diffunsion2.3 Autoaugmentation 1.有监督数据增强 1.1 单样本数据增强 augly安装 AugLy是一个数据增强库,目前支持四种模式(音频、图像、文本和视频)和100多种增强。每个模态的增强包含在自己的子库中。这些子库包括基于函数和基于类的变换、组合运算符,并可以选择提供有关所应用转换的元数据,包括其强度。
该库基于Python,至少需要Python 3.6+版本、
官网地址 :https://github.com/facebookresearch/AugLy
安装该库方法
pip install augly[all] 也可以只安装某一个应用,比如只安装音频
pip install augly[audio] 也可以克隆git
git clone git@github.com:facebookresearch/AugLy.git && cd AugLy [Optional, but recommended] conda create -n augly && conda activate augly && conda install pip pip install -e .[all] augly使用方法 augly.image所有函数都接受要作为输入增强的图像或PIL图像对象的路径,并返回增强的PIL图像对象。如果指定了输出路径,图像也将保存到文件中。
import augly.image as imaugs image_path = "your_img_path.png" output_path = "your_output_path.png" aug_image = imaugs.
GEE开发之Modis_NDVI数据分析获取大总结 0. 之前的博客链接1. MYD13Q1(250米/16天)2. MOD09GA_006_NDVI(500米/1天)3. MOD13Q1(250米/16天)4. MOD13A1(500米/16天)5. MOD13A2(1000米/16天)6. 日数据下载(以MYD13Q1为例子)7. 月数据下载(以MYD13Q1为例子)7.1 代码一7.2 代码二(简洁) 8. 年数据下载(以MYD13Q1为例子)8.1 代码一8.2 代码二(简洁) 前言:主要总结一下在GEE上获取Modis_NDVI数据的各种形式,主要包括MYD13Q1、MOD09GA、MOD13Q1、MOD13A1、MOD13A2以及日数据、月数据、年数据的获取和下载。 0. 之前的博客链接 之前总结的Modis_NDVI数据分析的博客链接如下:
《GEE开发之Modis_NDVI的数据分析》
《GEE开发之MODIS_NDVI年均值数据分析》
《GEE开发之MODIS_NDVI一年之中的所有数据获取》
1. MYD13Q1(250米/16天) //以鹿邑为例子 var geometry = ee.FeatureCollection('users/www1573979951/luyixian'); Map.centerObject(geometry,6); //选取影像集以及波段 NDVI var ndvi = ee.ImageCollection("MODIS/006/MYD13Q1").filterDate('2020-01-01', '2020-12-31').filterBounds(geometry).select("NDVI"); //换算单位 var multiply = function(image){ var img = image.multiply(0.0001); return img.set('system:time_start',image.get('system:time_start')); }; ndvi = ndvi.map(multiply); print(ndvi); //设置调色板并展示影像 var colorizedVis = {min: 0.0, max: 1.0, palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301']}; Map.
需求: 原有一直使用showdoc工具对内或对外进行接口文档和功能的沟通,上层领导觉得人工进行手写
浪费很多人工维护时间可能会做到接口更改而面对静态文档而更新不及时showdoc的劣势是不能进行在线调试 需要辅助其他调试工具 但领导只需要类似swagger官方的页面即可。通过调研了解到knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案。
knife4j介绍:
Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目
一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性化需求,不得不编写后端Java代码以满足新的需求,在swagger-bootstrap-ui的1.8.5~1.9.6版本之间,采用的是后端Java代码和Ui都混合在一个Jar包里面的方式提供给开发者使用.这种方式虽说对于集成swagger来说很方便,只需要引入jar包即可,但是在微服务架构下显得有些臃肿。
因此,项目正式更名为knife4j,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍,更名也是希望把她做成一个为Swagger接口文档服务的通用性解决方案,不仅仅只是专注于前端Ui前端.
swagger-bootstrap-ui的所有特性都会集中在knife4j-spring-ui包中,并且后续也会满足开发者更多的个性化需求.
主要的变化是,项目的相关类包路径更换为com.github.xiaoymin.knife4j前缀,开发者使用增强注解时需要替换包路径
后端Java代码和ui包分离为多个模块的jar包,以面对在目前微服务架构下,更加方便的使用增强文档注解(使用SpringCloud微服务项目,只需要在网关层集成UI的jar包即可,因此分离前后端)
此次集成的是SSM的老项目,故中途关于查阅相关资料与测试使用了一些时间,不同与springboot或微服务集成,官网提供了相对完善的资料,此次是基于springMVC进行老版本(2.0.4)的集成工作。
一、
老项目是使用的Gradle构建工具,首先通过仓库查询到knife4j的依赖包,将以下两个包引入
二、创建配置文件 SwaggerConfig
关键点说明:
.api是为了指定Controller扫描包路径@ComponentScan 目的是为了使用knife4j增强功能,在2.0.4版本之前必须使用该写法,在2.0.5之后可以使用@EnableKnife4j @EnableWebMvc @EnableSwagger2 @Configuration @ComponentScan( basePackages = { "com.github.xiaoymin.knife4j.spring.plugin", "com.github.xiaoymin.knife4j.spring.web" } ) public class SwaggerConfig { @Bean public Docket defaultApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(groupApiInfo()) .groupName("平台接口") .select() .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) .paths(PathSelectors.any()) .build(); } private ApiInfo groupApiInfo() { return new ApiInfoBuilder() .title("调试接口文档") .description("对外关键接口文档说明") .termsOfServiceUrl("http://www.group.com/") .contact("group@qq.com") .version("1.0") .build(); } } **注意点: 区别于SpringBoot的注入,不使用@Configuration注解注入到Spring的IOC容器中,采用<bean>XML注入的方式注入到Spring的容器中
运行有问题或需要源码请 点赞关注收藏后评论区留言~~~
一、上下滚动与左右滑动的冲突处理 Android控件繁多,允许滚动或滑动操作的视图也不少,如果开发者要自己接管手势处理,那么这个页面的滑动就存在冲突的情况,如果系统响应了A视图的滑动事件,就顾不上B视图的滑动事件
解决这种冲突,关键在于提供某种方式通知滚动视图,告诉他什么时候可以上下滚动,什么时候不能上下滚动,这个通知方式主要有两种,一种是父视图主动向下查询,即由滚动视图判断滚动规则并决定是否拦截手势,另一种是子视图向上反映,即由子视图告诉滚动视图是否拦截手势,下面分别介绍
1:由滚动视图判断滚动规则
自定义一个滚动视图 判断手势的横纵坐标关系
2:子视图告诉滚动视图能否拦截手势
实战效果如下
代码如下
Java类 package com.example.event; import android.annotation.SuppressLint; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.widget.TextView; import android.widget.LinearLayout.LayoutParams; import com.example.event.constant.ImageList; import com.example.event.util.Utils; import com.example.event.widget.BannerPager; @SuppressLint("DefaultLocale") public class CustomScrollActivity extends AppCompatActivity { private static final String TAG = "CustomScrollActivity"; private TextView tv_flipper; // 声明一个文本视图对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_scroll); tv_flipper = findViewById(R.id.tv_flipper); BannerPager banner = findViewById(R.id.banner_pager); LayoutParams params = (LayoutParams) banner.getLayoutParams(); params.
这篇文章是继上篇文章的优化 增加了左右和底部拖拽控制弹窗大小功能的实现
1、html部分
<div v-dialogDrag="true" id="modalBox"> <a-modal v-model:visible="visible" title="我要拖拽" :getContainer="getContainer" :force-render="true" // 强制渲染 不管有没有开启modal 页面都进行DOM加载 > <div class="overflow-y modal scrollbar" // 滚动样式 自行编写 > </div> </a-modal> </div> 2、ts部分
说明:modal默认挂载到body下,getContainer 函数是为了让modal挂载到父盒子modalBox下,不然指令中 el 获取不到modal的DOM节点
const visible = ref<boolean>(false); const getContainer = () => { return document.getElementById("modalBox"); }; 3、指令代码部分
3.1 index.ts文件
import dialogDrag from "./modules/dialogDrag" // 统一入口 export default function directive(app: any) { app.directive('dialogDrag', dialogDrag) } 3.2 dialogDrag.ts (核心代码)
说明:必须使用 nextTick 不然获取DOM元素会为空
Vue Grid Layout官方文档
Vue Grid Layout中文文档
1. npm下载拖拽缩放库
npm install vue-grid-layout@3.0.0-beta1 --save 2. vue3 使用 vue-grid-layout报错:external_commonjs_vue_commonjs2_vue_root_Vue_default.a is not a constructor
解决方案: vue3版本记得下载对应 vue-grid-layout@3.0.0-beta1版本的库,因为vue-grid-layout是vue2版本的,但用的是vue3版本,所以要安装vue3的依赖和相关配置
3. 在main.js中注册
// 将自动注册所有组件为全局组件 import keycloakInit from '@/utils/util.keycloak' import VueGridLayout from 'vue-grid-layout' const app = createApp(App) app.use(store) app.use(router) app.use(ElementPlus) app.use(VueGridLayout) app.mount('#app') 4. 页面中使用组件 -- 控制保存和编辑
页面使用效果图:
点击布局进行自定义拖拽功能 ----- 效果图 ----- 箭头处可进行拖拽大小及位置:
页面代码如下:
属性 GridLayout参数 和 GridItem参数 官网有详细介绍
<template> <div class="nav-wrapper-b"> <div class="bar-title-b"> {{getChangeLine + ' ' + barTitle}} </div> <div class="
题目描述
输入一个二进制数(仅由0和1构成的整数),打印出该数对应的十进制数。
输入
第一行是测试数据的组数n,下面的n行每一行是一个二进制数。
输出
输出为n行,分别为对应输入的十进制数。
样例输入
2
11
110
样例输出
3
6
c++:
#include <iostream> #include <string> using namespace std; int strToNum(string); int pow(int); void printArr(int *arr,int); int main() { int n; cin>>n; int *result=new int[n]; string str; for(int i=0; i!=n; ++i) { cin>>str; int tmpResult=strToNum(str); result[i]=tmpResult; } printArr(result,n); delete []result; return 0; } int strToNum(string s) { int s_len=s.size(); int t=0; for(int i=0,j=s_len-1; i!=s_len; ++i,--j) t+=(s[i]-'0')*pow(j); return t; } int pow(int x) { int s=1; while(x--) s*=2; return s; } void printArr(int *arr,int n) { for(int i=0; i!
一、Homebrew 是什么? Homebrew 是一款包管理工具,目前支持 macOS 和 linux 系统。主要有四个部分组成: brew、homebrew-core 、homebrew-cask、homebrew-bottles,默认安装路径:/usr/local/Cellar/,如需修改,则修改 config 中的 HOMEBREW_PREFIX 参数(默认为 /usr/local)。个人建议不要修改,保持路径统一能便于查找和管理。
名称说明brewHomebrew 源代码仓库homebrew-coreHomebrew 核心源homebrew-cask提供 macOS 应用和大型二进制文件的安装homebrew-bottles预编译二进制软件包 二、安装与卸载 # 安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 卸载 /bin/bash -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" 三、更换默认源 由于 Homebrew 默认是从 Github 上更新版本、从国外下载软件包,很慢,所以我们安装完成后需要更换下源地址,本文使用的是阿里提供的镜像地址。
详情参考:https://developer.aliyun.com/mirror/homebrew?spm=a2c6h.13651102.0.0.23b21b11fimRin
更换 brew.git 源 git -C "$(brew --repo)" remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git 更换 homebrew-core.git 源 git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git 更换 homebrew-bottles 源 # 对于 bash 用户: echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.
1、简介 一组大规模、高质量的URL链接数据集,包含多达65万个视频片段,涵盖400/600/700个人类动作类别,具体取决于数据集版本。这些视频包括人与物的互动,如演奏乐器,以及人与人之间的互动,如握手和拥抱。每个动作类别至少有400/600/700个视频片段。每个片段都由人类对一个动作类别进行注释,并持续10秒左右。
2、Kinetics-400下载 2.1 脚本下载(推荐) Windows下可以用Powershell;Linux打开终端执行 k400_downloader.sh文件。
执行指令:
bash k400_downloader.sh k400_downloader.sh内容如下:
#!/bin/bash # Download directories vars root_dl="k400" root_dl_targz="k400_targz" # Make root directories [ ! -d $root_dl ] && mkdir $root_dl [ ! -d $root_dl_targz ] && mkdir $root_dl_targz # Download train tars, will resume curr_dl=${root_dl_targz}/train url=https://s3.amazonaws.com/kinetics/400/train/k400_train_path.txt [ ! -d $curr_dl ] && mkdir -p $curr_dl wget -c -i $url -P $curr_dl # Download validation tars, will resume curr_dl=${root_dl_targz}/val url=https://s3.amazonaws.com/kinetics/400/val/k400_val_path.txt [ !
目录 前言概率密度函数曲线几类经典的概率密度函数两种绘制密度曲线的方法参考文献 前言 很多数据科学家在做回归模型评估的时候,不仅会去计算模型拟合优度R2,平均绝对误差还会去看测试集的每个样本偏差的分布情况,这个时候就需要用到概率密度函数曲线的知识了,通过绘制概率密度函数曲线图或者直方图可以很直观的看到测试集的所有样本的偏差分布情况。
概率密度函数曲线 我们知道概率是用来度量一件事物发生可能性大小,以抛色子为例,一枚色子是一个正六面体,一共6个面,分别标有1~6,随手一抛,求出现点数5朝上的可能性是多少?因为样本空间数是6,对点数5朝上的有利事件数是1(点数5朝上),因此,出现点数5朝上的概率都是1/6,这是古典概率论的描述,列出其概率分步表如下
点数123456概率1/61/61/61/61/61/6 画出其概率分布图如下
对于有限离散的样本空间,我们可以列出概率分布表画出概率分布图,如果,某事件可能取值是某个连续的区间 [ a , b ] [a,b] [a,b],也有其对应的概率值,这种对应关系称为连续型概率函数,记作
p = f ( x ) , x ∈ [ a , b ] p = f(x), x\in[a,b] p=f(x),x∈[a,b]
其中,p表示自变量取x附近一小段的概率,对应的概率分布函数图像可以用一条连续的曲线来刻画
其中,横坐标表示自变量x取值范围,从a到b,可以是a,b中间某一点或某一小段或几个小段的并等,纵坐标表示因变量f(x)取值大小,可以得到
∫ a a f ( x ) d x = 1 \int_{a}^{a} f(x) dx = 1 ∫aaf(x)dx=1
这样,概率函数可以定义为连续型随机变量(X)在某个确定的取值点附近的可能性的函数,可以类比一个质地不均匀的橡皮泥横梗在a,b之间,如果要求这块橡皮泥的质量,那么就要知道从a到b的各处的密度大小,所以概率函数也叫概率密度函数。
几类经典的概率密度函数 正态分布 正态分布是最常见的一种的概率分布,也称为也称为高斯分布,它刻画了随机变量(X)服从一个位置参数为 μ \mu μ 、尺度参数为 σ \sigma σ的概率分布,其概率密度函数为
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sqrt {2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=2π σ1e−2σ2(x−μ)2
两个图像相加:cv2.add(A,B) 加运算会使图片更亮
# 图像加法的API通过add(A,B) img2 = cv2.add(cat1, img) 两个图像相减:cv2.subtract(A,B) 减运算会使图片更暗
# 图像减法的API通过subtract(A,B),含义就是A-B img3 = cv2.subtract(cat1, img) 图像的乘与除: 乘 cv2.multiply(A,B)
除 cv2.divide(A,B)
乘除只是让图片亮(暗)的更快。
import cv2 import numpy as np cat = cv2.imread('d:\\download\\3.jpg') cat1 = cv2.resize(cat, (500, 400), fx=1, fy=1) ''' # 图的加法运算就是矩阵的加法运算 因此,加法运算的两张图必须是相等的 ''' print(cat1.shape) img = np.ones((400, 500, 3), np.uint8)*50 # 图像加法的API通过add(A,B) img2 = cv2.add(cat1, img) # 图像减法的API通过subtract(A,B),含义就是A-B img3 = cv2.subtract(cat1, img) # 图像的乘 img4 = cv2.multiply(cat1, img2) res1 = np.
Mybatis二级缓存 Mybatis相关全览一、简介二、一级缓存1.入口2.演示案例一:案例二: 3.总结 三、二级缓存1.入口2.如何开启二级缓存cache-ref配置cache配置 3.针对某查询禁用二级缓存4.控制二级缓存刷新5.自定义缓存 四、缓存执行顺序案例一:案例二: 五、总结 本文用的是3.5.10版本
源码地址:https://github.com/mybatis/mybatis-3/releases
文档地址:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html
Mybatis相关全览 一. Mybatis源码详解
二. Mybatis二级缓存详解
三. Mybatis三大执行器介绍
四. Mybatis拦截器源码详解
一、简介 我们平时开发中为了减轻数据库的访问压力都会用到缓存,在写少读多的场景下能有效的改善程序性能以及减少数据库的压力,Mybatis的缓存自然也是出于这个目的,在读数据库后将结果放入缓存中,下一次读取缓存命中了就直接返回不需要再读库了,在修改操作的时候清空掉缓存
什么是二级缓存?
顾名思义就是有两层缓存,缓存的范围不一样:
一级缓存是针对SqlSession,可以理解为是一个连接(同一个数据库连接下执行的查询共用一块缓存)二级缓存是针对namespace,也就是一个Mapper.xml文件,一个文件内的查询共用一块缓存,多个namespace缓存之间相互不受影响 一级缓存默认开启,二级缓存默认是关闭的
为什么要搞二级缓存?
从上述可以明显的看到二级缓存是对一级缓存的一个优化,毕竟一个连接的作用域有啥用,连接用完就关了,缓存时效性太差,而采用二级缓存后缓存能在多个连接之间共享,这命中率不大大提升
为什么不采用全局缓存?
虽然全局缓存在命中率方面比二级缓存更有优势,但是数据库有那么多的表,假设我已经缓存很多查询了,就因为你某个表要修改,就全删除吗?这合理吗?那是不是只需要删除跟这个被修改的表有关的缓存数据就可以了,仔细想想这不就是二级缓存?平时开发习惯一个namespace不就是针对一个表的?
二、一级缓存 1.入口 既然是跟查询有关那肯定是在执行器里面,所以是在最底层的BaseExecutor里面
BaseExecutor.query
这个localCache就是一级缓存,针对SqlSession所做的缓存
一级缓存的缓存类是PerpetualCache(也就是上述的localCache),如下:
内部有一个HashMap来存储结果
2.演示 我们先在上述缓存前后加上一些输出来观察缓存的变化:
案例一: 我们在同一个SqlSession整两个一样的查询,并用分隔符分开,执行查看结果
结果:
看分割线上是第一次查询,所以开始缓存数量为0,之后缓存数量为1,并缓存了一条数据,第二次查询直接就命中了缓存并返回了结果
案例二: 我们两个查询分别用了不同的SqlSession,再看看结果
结果:
两次查询的缓存是相互隔离的
3.总结 由此可见,一级缓存仅在SqlSession中,不同的SqlSession缓存是互不干扰的,所以效果微乎及微
什么时候删除?
同样在BaseExecutor中做新增、修改、删除操作的时候就会清空当前SqlSession中的缓存,如:
三、二级缓存 1.入口 与上述一样,一样是在执行器里面,但是这个执行器有点特殊,专门用来做二级缓存用的,那就是CachingExecutor.query
而且这个执行器在默认情况下一定会走,因为在开始选择执行器的时候判断了,默认的参数为true
如下:
既然一定会走,为什么又说二级缓存默认关闭呢?
在上述执行过程中可以看到,会先从MapperStatement中获取一个Cache对象,该对象不为空才会走缓存,该对象为null ,就会走数据库查询了,所以在二级缓存没开启的情况下是获取不到这个对象的,所以自然会走数据库了
2.如何开启二级缓存 在我们解析的过程中可以发现有个关于cache的配置加载,这两个是干嘛的?
cache-ref配置 我们之前说过二级缓存的作用域是namespace,每个namespace之间是独立的,但有的时候我就是想共享怎么办?总不能全写到一个namespace中吧,所以cache-ref的作用就是可以指定和某个namespace共享缓存
<cache-ref namespace="com.xxxx.xxxx.XxxxxMapper"/> cache配置 既然二级缓存在每个namespace之间是独立的,所以每个namespace是可以独立选择开启或者关闭的,开关就是cache配置,同时还附带有几种属性可以来配置缓存,如下:
<cache eviction="LRU" flushInterval="60000" size="
// 必要的文件下载跨域问题 response.setHeader("Access-Control-Allow-Origin", "*"); 后端这样设置就能解决
ABSTRACT 深度神经网络在语音识别、计算机视觉和自然语言处理等方面取得了巨大的成果,但是对于推荐系统尚且缺少。虽然即使有用深度学习作为推荐,但是都是对建模起辅助作用。当涉及到用户和项目之间的交互,都会选择流行的矩阵分解(MF),因此基于上面的情况这篇论文的作者提出了一个基于协同过滤的神经网络通用框架——NCF,其中选择使用MLP来学习用户-项目的交互函数。
1. INTRODUCTION 个性化推荐主要使用矩阵因子分解,通过用户过去与项目的互动来建模从而得出用户对项目的偏好,同时对于后续的研究也基本都是致力于增强MF,但是提升效果并不是很大。基于此论文做出的主要三点贡献:
(1)提出了一种神经网络结构来建模用户和项目的潜在特征,并设计了一个基于神经网络的协同过滤的通用框架NCF。
(2)表明,MF可以被解释为NCF的一个专门化,并利用一个多层感知器来赋予NCF模型一个高水平的非线性。
(3)在两个真实世界的数据集上进行了广泛的实验,证明NCF方法的有效性和对协作过滤的深度学习的前景。
2.PRELIMINARIES 主要讲述了隐式反馈进行协同过滤的解决方案,简要概括MF
2.1 Learning from Implicit Data 定义Y是一个M*N的用户-项目交互矩阵,矩阵中的元素根据用户和项目之间是否存在交互关系来定义,即:
如下图所示:
注意:这里用户i对应项目i的1并不一定是喜欢,同时用户i对应项目i的0不一定是不喜欢,有可能是因为用户完全还不知道有这个项目,从而导致数据的缺失形成的情况,这也是隐式数据的一个特点。
2.2 Matrix Factorization 将每个用户和物品和一个潜在特征的实值向量联系起来,用和分别表示用户和项目,通过内积的方法来预测用户对该项目的爱好程度:
这里通过Jaccard作为两两用户相似性的计算方法:
这样通过简单的计算内积计算得到复杂的用户与项目直接的关系,可能会使MF存在一定的局限性,同时也很容易导致结果过拟合。
3. NCF model 3.1 模型架构图 3.2 模型架构公式 (1)NCF预测模型
(2)上面公式中f()函数定义的多层神经网络,它表示如下:
3.3 网络层描述 3.3.1 输入层 输入的是过了一层one-hot用户矩阵向量和项目矩阵向量
3.3.2 embedding层 因为经过one-hot出来的用户矩阵和项目矩阵是稀疏矩阵,这里经过embedding层将稀疏矩阵映射成稠密矩阵
3.3.3 Neutral CF层 网络模型架构这里是经过多层的全连接进行映射,不断的进行维度变化,使得来逼近训练数据的真实概率分布。
(这里也有点困惑,后面的由Neutral CF的模型架构与这又是否有区别,我的认识是这里就是多层的下面的模型架构堆叠,当然这只是我自己的理解。)
3.3.4 输出层 通过sigmoid函数将结果映射到输出的维度,得到最后的预测结果。
3.4 损失函数 (1)一般常用的损失函数是平方损失回归:
(2)论文中提出来一个新关注于隐式数据的损失函数
3.5 Neutral CF 3.5.1 模型架构图 3.5.2 GMF (1)模型架构在上面就是将用户和项目矩阵做内积,然后通过一层激活函数,进行维度映射。(激活函数选择为sigmoid函数)
(2)模型公式
3.5.3 MLP (1)和我们平常理解的MLP模型相同,这里主要是对用户和项目做交互,更换了以前的MF的简单不足,当然这里的模型架构也是在上面图中,用户和项目经过多层MLP进行不同维度的全连接,网络层级为塔型,逐级减半,提取更多的隐式特征。(选择的激活函数是ReLU)
(2)模型公式(n层MLP)
3.5.4 GMF和n层MLP的fusion (1) 一种简单的方法
1业务场景 BP中,供应商和客户的创建发生了很大变化,之前的BAPI无法使用,本文档采用新的方法创建供应商。
2创建 1.定义参数
博客频遭盗窃,浏览全文,请移步公众号“斌将军”,输入关键字“供应商批导”查看
供应商主数据
2.BAPI_BUPA_CREATE_FROM_DATA
2.2添加BP角色 1.BAPI_BUPA_ROLE_ADD_2
添加BP角色FLVN00 FLVN01
2.3维护银行数据 2.4维护类别税号数据 类别税号通过BAPI_BUPA_TAX_ADD
2.5公司和采购视图 以上操作便完成了供应商主数据的基本创建,之后要通过BAPI维护供应商的公司视图和采购视图。
1.定义参数
2.扩展公司视图和采购视图
2.1抬头和中心数据
此处的的供应商一定要使用带前导零的供应商编号,否则扩展不成功
公司视图数据
采购视图数据
采购中的业务伙伴功能
3.修改 3.1修改供应商 3.2修改银行 3.3修改税务 3.4修改地址等信息 4.源代码 4.1创建供应商 "-----------------------------@斌将军----------------------------- FORM frm_bapi_creat. *--------------------------------------------------------------------* * BAPI 字段 *--------------------------------------------------------------------* DATA:businesspartnerextern TYPE bapibus1006_head-bpartner, "导入的客户编码 partnercategory TYPE bapibus1006_head-partn_cat, "伙伴类别 partnertype TYPE bapibus1006_head-partn_typ, "伙伴类型 partnergroup TYPE bapibus1006_head-partn_grp, "伙伴分组 centraldata TYPE bapibus1006_central, "中心信息 centraldataperson TYPE bapibus1006_central_person, "人员信息 centraldataorganization TYPE bapibus1006_central_organ, "组织 centraldatagroup TYPE bapibus1006_central_group, "
目录
一、 安装vmware虚拟机
二、Centos8 镜像支持M1芯片
三、安装Centos8 系统
1、打开虚拟机软件,点击创建自定虚拟机,再点击继续
3、选择新建虚拟磁盘,点击继续
4、选择自定设置
5、选择自定义的虚拟机存储位置,进行存储。
6、弹出此界面可以对cpu、内存、硬盘等进行修改。点击硬盘图标,修改硬盘大小为20G,点击应用。
编辑
7、点击设置,再点击CD/DVD图标,弹出界面选中CD/DVD驱动器,选择上文所下载的centos8镜像。
8、点击启动图标。
9、向上方向键选择install centos8 linux 8,点击回车开始安装系统
10、选择所使用的语言,点击继续
11、配置
四、配置网络
五、设置yum源(yum设置为阿里源)
六、配置Centos8:设置IP
七、关闭防火墙
八、禁用selinux
一、 安装vmware虚拟机 链接:https://pan.baidu.com/s/1b2EWNDCTqQuSlRYdLciyYw?pwd=fdrt 提取码: fdrt
个人使用可获得免费许可证,注册用户激活即可。
网址:https://customerconnect.vmware.com/web/vmware/evalcenter?p=fusion-player-personal&source=dwnp
激活成功获得免费许可证后登陆自己的用户进官网下载链接:https://customerconnect.vmware.com/downloads/get-download?downloadGroup=FUS-PUBTP-2021H1
下载完成后,一直下一步即可安装成功。
二、Centos8 镜像支持M1芯片 链接: https://pan.baidu.com/s/1nrlfDjYZ6C2YaWBLPZy2oA?pwd=hjkl 提取码: hjkl 三、安装Centos8 系统 1、打开虚拟机软件,点击创建自定虚拟机,再点击继续 2、选择Linux,其他Debian 11.x 64位 ARM(界面化)
若是最小化(黑窗口),则选择Linux,其他Linux5.x kernel 64-bit Arm
3、选择新建虚拟磁盘,点击继续 4、选择自定设置 5、选择自定义的虚拟机存储位置,进行存储。 6、弹出此界面可以对cpu、内存、硬盘等进行修改。点击硬盘图标,修改硬盘大小为20G,点击应用。 7、点击设置,再点击CD/DVD图标,弹出界面选中CD/DVD驱动器,选择上文所下载的centos8镜像。 8、点击启动图标。 9、向上方向键选择install centos8 linux 8,点击回车开始安装系统 10、选择所使用的语言,点击继续 11、配置 点击网络和主机名,配置网络
打开网卡开关,更改主机名并应用,完成。
点击时间和日期
打开网络时间,会自定校准时间,选择亚洲上海,点击完成。
软件选择,点击界面化安装。也可以选择最小化(黑窗口)
MPSK解调教程
在本教程中,我们将专注于模拟而不是无线传输。它将讨论在发送和接收具有真实硬件和通道效果的信号时所涉及的许多问题。我们将通过设置我们的模拟,然后逐步如何恢复信号。
在本教程中,请记住,这只是处理数字信号接收的一种方法。已经为这些步骤设计了各种算法和方法,不同类型的数字信号将表现不同。在这里,我们经历了一系列阶段,并使用 GNU Radio 中现成的算法进行 PSK 信号接收和解调。但是,本教程绝不应暗示这是完成此任务的唯一方法。
内容:
1 Objectives 目标
2 Prerequisites 先决条件
3 Notes 笔记
4 Transmitting a Signal 发送信号
5 Adding Channel Impairments 添加信道障碍
6 Recovering Timing
6.1 Details of the Polyphase Clock Sync Block
6.2 Using the Polyphase Clock Sync Block in Our Receiver
7 Multipath 多路径
8 Equalizers 均衡器
9 Phase and Fine Frequency Correction 相位和频率矫正
10 Decoding 解码
一、目标
理解信号失真和信道造成的影响。
认识恢复信号所需的阶段。
定时恢复 Time recovery
源文章:PDF转图片再转长图、python、pil_qq_41256425的博客-CSDN博客_pdf转长图 python
之所以发这个是因为源文章中的库升级以后这个代码没法跑了,所以更新了新的代码:
# -*- coding: utf-8 -*- """ 1、安装库 pip install pymupdf pip install pillow 2、修改main方法参数 3、运行 """ import os import sys import fitz from PIL import Image def pdf_to_images(pdf_path, img_path): # 打开PDF文件,生成一个对象 doc = fitz.open(pdf_path) print(doc.page_count) for pg in range(doc.page_count): page = doc[pg] rotate = int(0) # 每个尺寸的缩放系数为2,这将为我们生成分辨率提高四倍的图像。 zoom_x = 2.0 zoom_y = 2.0 trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate) pm = page.get_pixmap(matrix=trans, alpha=False) try: os.mkdir(img_path) except FileExistsError: pass pm.