最近使用keras训练了一个图像分割的模型(.h5),但最终需要在C++中调用该模型,由于keras没有C++接口,所以需要将.h5模型转换为.pb模型后通过tensorflow C++接口进行调用。
由于本人之前接触深度学习较少,很多东西不是很懂,所以在转换过程中遇到了很多问题,在此记录,共同学习。
1、转换之前需要注意的点 本人在转换过程中发现tensorflow1.x和2.x存在区别,所以在转换之前最好确定训练模型时使用的tensorflow版本,转换过程使用的环境尽量和训练模型使用的环境保持一致,不然容易产生很多错误。导出模型时使用的API,是使用tensorflow.keras还是keras,和转换时使用的API保持一致,因为两者可能不兼容从而导致错误。tensorflow版本:明确当前使用的是1.x还是2.x版本keras版本:与tensorflow版本相匹配,查看tensorflow版本与keras版本对应关系tensorflow各版本whl下载地址 2、tensorflow1.x转换方法 使用环境说明:python3.6.12+tensorflow1.15.0+keras2.2.4
1、常用的方法基本均来自github:keras_to_tensorflow,直接clone下来使用即可。
使用方法:
(1)命令行方式:input_model输入.h5路径,output输入保存.pb路径。
python keras_to_tensorflow.py --input_model="./model.h5" --output_model="./model.pb" (2)将参数写入代码中,方便调试。
2、简化后的转换代码
from tensorflow.python.keras.models import load_model #from keras.models import load_model import tensorflow as tf from tensorflow.python.keras import backend as K #from keras import backend as K from tensorflow.python.framework import graph_io def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True): from tensorflow.python.framework.graph_util import convert_variables_to_constants graph = session.graph with graph.as_default(): freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or [])) output_names = output_names or [] output_names += [v.
可以在被远程桌面登录的电脑上进入到注册表界面,找到Tcp键选项,将默认的端口数据修改为需要的端口就可以了。具体的设置方法如下:
1、在需要被远程桌面登录的电脑上按下键盘的WIN和R键,在出现的运行界面中输入regedit点击确定按钮。
2、此时在打开的注册表界面中选择HKEY_LOCAL_MACHINE进入,然后在依次点击其下面选项中的System\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\Tcp。
3、此时在右侧的界面中选中PortNumber点击右键选择修改。
4、在出现的修改界面中勾选十进制,输入需要的端口数字点击确定。
5、再在远程桌面连接登录界面中输入对应的IP地址和端口数据点击连接就可以了。
windows远程桌面端口是多少
一、默认Windows远程桌面端口是。
二、用户可以通过如下方法修改Windows远程桌面服务的端口为任意非占用的TCP端口。
1、运行regedit,打开注册表编辑器。
2、打开注册表项[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp],修改PortNamber值为自己希望的端口号,注意为10进制。
3、打开注册表项[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp],修改PortNamber值为自己希望的端口号即可。
4、注销或者重启主机以使服务配置信息生效。
远程桌面的端口是什么意思啊
默认的远程连接端口是
端口,这一端口最好不要开,也就是说不要开启远程桌面,因为,HACKER会通过这一端口进入您的计算机,种植***,现在我们的计算机安全意识越来越强,开放端口的计算机越来越少,所以HACKER们就希望通过这一端口抓肉鸡。
可以通过注册表或者软件来修改远程桌面端口,修改远程桌面端口需要两个步骤:
1、打开注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp],修改右边PortNamber的值,其默认值是,修改成所希望的端口即可,例如
2、再打开注册表[HKEY_LOCAL_MACHINE\SYSTEM\\Control\TenninalServer\WinStations\RDP-Tcp],再一次修改右边PortNumber的值,其默认值是,修改成所希望的端口即可,例如
修改完后之后刷新注册表,如果有防火墙需要做例外。做过端口过滤,需要开放修改过的端口。
目录 认识爬虫爬虫的过程urllib 认识爬虫 以下的学习都基于一个博主的练习,我就跟着他一起学习练习,这篇博客只是依然记录一下自己的学习历程(😀)加油💪
这是这位博主的原博客,可以学习看看
这是另外一位博主,更入门更详细一些
首先先认识爬虫这个概念,首先学会基本的Python语法知识、学习Python爬虫常用到的几个重要内置库urllib, http等,用于下载网页、学习正则表达式re、BeautifulSoup(bs4)、Xpath(lxml)等网页解析工具、开始一些简单的网站爬取,了解爬取数据过程、了解爬虫的一些反爬机制,header,robot,时间间隔,代理ip,隐含字段等、学习一些特殊网站的爬取,解决登录、Cookie、动态网页等问题、了解爬虫与数据库的结合,如何将爬取数据进行储存、学习应用Python的多线程、多进程进行爬取,提高爬虫效率、学习爬虫的框架,Scrapy、PySpider等、学习分布式爬虫(数据量庞大的需求)
爬虫的过程 在键盘上输入网址点击搜索之后,通过网络经过DNS服务器分析域名,找到真正的服务器。然后通过HTTP协议对服务器发出GET或POST请求,若请求成功就得到了网页,一般都是用HTML, CSS, JS等前端技术来构建的,若请求不成功,服务器返回请求失败的状态码,常见到的503,403等。爬虫通过对服务器发出请求得到HTML网页,然后对下载的网页进行解析,得到我们想要的内容。
urllib 这个库是python内置的,在Python的urllib库中doc开头是这样简短描述的:
Error:“Exception classesraised by urllib.”----就是由urllib举出的exception类Parse:“Parse (absolute andrelative) URLs.”----解析绝对和相对的URLsRequest:“An extensiblelibrary for opening URLs using a variety of protocols”用各种协议打开URLs的一个扩展库Response:“Response classesused by urllib.”----被urllib使用的response类 刚开始先试试request的使用,request请求最简单的操作是用urlopen方法,代码如下:
import urllib.request response = urllib.request.urlopen('http://python.org/') result = response.read() print(result) 运行结果编码出现问题:
一般这种情况把编码改成常见的UTF-8就可以了。
import urllib.request response = urllib.request.urlopen('http://python.org/') result = response.read().decode('utf-8') print(result) 结果很长:
现在来学一下urlopen,urlopen是request的其中一个方法,功能是打开一个网址,URL参数可以是一串字符串(如上例子中一样),也可以是Request对象。
url:即输入的url网址,(如:http://www.xxxx.com/);data:发给服务器请求的额外信息(比如登录网页需要主动填写的用户信息)。如果需要添加data参数,那么是POST请求,默认无data参数时,就是GET请求;一般来讲,data参数只有在http协议下请求才有意义data参数被规定为byte object,也就是字节对象。data参数应该使用标准的结构,这个需要使用urllib.parse.urlencode()将data进行转换,一般把data设置成字典格式再进行转换即可timeout:是选填的内容,定义超时时间,单位是秒,防止请求时间过长,不填就是默认的时间;cafile:是指向单独文件的,包含了一系列的CA认证 (很少使用,默认即可);capath:是指向文档目标,也是用于CA认证(很少使用,默认即可);cafile:可以忽略context:设置SSL加密传输(很少使用,默认即可)geturl(): 返回URL,用于看是否有重定向。info():返回元信息,例如HTTP的headers。getcode():返回回复的HTTP状态码,成功是200,失败可能是503等,可以用来检查代理IP的可使用性。 def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TI MEOUT,*, cafile=None, capath=None, cadefault=False, context=None): url,data和上面urlopen中的提到的一样。headers是HTTP请求的报文信息,如User_Agent参数等,它可以让爬虫伪装成浏览器而不被服务器发现你正在使用爬虫。origin_reg_host, unverifiable, method等不太常用。origin_reg_host指的是原产地注册主机。 2021/6/28
目录 1. 引言2. 修改DH参数3. 标准DH坐标系与修改DH坐标系的对比4. 总结 1. 引言 在机器人正运动学(7)—— 连杆坐标系与DH参数(后面简称参考文章)中我们介绍了DH坐标系,其实建立机器人坐标系的方式不只一种。为了克服标准DH参数的一些缺陷,后来发展出了修改DH参数。
2. 修改DH参数 之前一直强调DH坐标系是建立在传动轴上的,修改DH坐标系恰恰相反,它是建立在连杆的驱动轴上。如下图就是建立的修改DH坐标系示意图,你可以和参考文章中建立的标准DH坐标系进行对比,就能看出两者的区别了。
由于修改DH坐标系是建立在连杆的驱动轴上,因此关节,连杆,坐标系按照从基座到末端执行器的方向排列应该是这样的:先是关节1,然后是与关节1并列的连杆1坐标系,然后是连杆1,然后是关节2,以此类推。
由于建立坐标系的位置发生了变化,连杆之间的变换关系自然也有相应的变化,修改DH坐标系相邻连杆之间的变换关系为: i − 1 T i = r o t x ( α i − 1 ) t r a n s x ( a i − 1 ) r o t z ( θ i ) t r a n s z ( d i ) ^{i-1}\textrm{T}_{i}=rot_{x}\left ( \alpha _{i-1} \right )trans_{x}\left ( a_{i-1} \right )rot_{z}\left ( \theta _{i} \right )trans_{z}\left ( d_{i} \right ) i−1Ti=rotx(αi−1)transx(ai−1)rotz(θi)transz(di)
目录 1,前言2,布局和数据部分3,制作甘特图 1,前言 项目迭代过程中,碰上一个需求,要求用甘特图的方式显示项目的工期进度,开完会我赶紧搜索一下甘特图是啥东东,大概了解之后,做出了如下样式
Echarts版本4.5.0
vue版本2.x
2,布局和数据部分 HTML部分
<template> <div id="index"> <div id="chart" /> </div> </template> CSS部分
<style lang="less" scoped> #chart{ width: 100%; height: 500px; margin: 50px auto; } </style> data部分
data() { return { chart: null, // chart实例 chartData: [], // chart数据源 startTime: '', // X轴起始时间 endTime: '', // X轴终末时间 yData: [], // Y轴项目类目 dayTime: 3600 * 24 * 1000, // 一天的毫秒,因为01.01日-01.01日,也算一天 initData: { // 可以认为是axios请求过来的数据res.data startTime: '2020-12-01', // X轴起始时间 endTime: '2022-01-30', // X轴终末时间 value: [ { itemName: '项目一', // 项目名 value: [ 0, // 索引 '2021-06-01', // 项目开始时间 '2021-08-30', // 项目结束时间 '2021-07-01', // 项目实际开始时间 '2021-07-28' // 项目实际结束时间 ] }, { itemName: '项目二', value: [ 1, '2021-06-21', '2021-07-21', '2021-07-18', '2021-08-10' ] }, { itemName: '项目三', value: [ 2, '2021-06-01', '2021-06-22', '2021-06-01', '2021-06-22' ] }, { itemName: '项目四', value: [ 3, '2021-06-22', '2021-06-30', '2021-06-22', '2021-07-05' ] }, { itemName: '项目五', value: [ 4, '2021-06-21', '2021-07-06', '2021-07-01', '2021-07-30' ] }, { itemName: '项目六', value: [ 5, '2021-07-01', '2021-07-21', '2021-07-02', '2021-07-30' ] }, { itemName: '项目七', value: [ 6, '2021-06-18', '2021-09-30', '2021-06-30', '2021-10-10' ] } ] } } } 3,制作甘特图 由于是demo,所以用的自己的数据,首先给需要用到的变量赋值
Tunnelblick mac是一款在主机操作系统上运行VP~解决方案的跳板软件,Tunnelblick Mac版是一款非常实用的网络工具,该软件绿色小巧、功能强大,它设置了一个控制器项目菜单栏,让您方便启动、停止你的Open连接。欢迎有需要的朋友前来本站下载体验!
Tunnelblick mac安装教程
打开软件包,双击Tunnelblick.app,进行安装。稍后按照提示操作即可!有配置文件请选择,添加一个配置,点击确定。软件安装成功,您可以翻~啦。
Tunnelblick for Mac官方介绍
Tunnelblick是一个免费的开源图形用户界面,适用于OS X和MacOS上的OpenVP。它提供了对OpenVP客户端和/或服务器连接的简单控制。
它是一个随时可用的应用程序,包含所有必需的二进制文件和驱动程序(包括OpenVP~,easy-rsa和tun / tap驱动程序)。不需要额外安装 - 只需添加OpenVPN配置和加密信息。
要使用Tunnelblick,您需要访问VPN服务器:您的计算机是隧道的一端,VPN服务器是另一端。有关更多信息,请参阅获取VPN服务。
Tunnelblick是根据GNU通用公共许可证第2版授权的免费软件,可能仅按照该许可证的条款进行分发。Tunnelblick mac软件资源
▪Tunnelblick是根据GNU通用公共许可证第2版授权的免费软件,可能仅按照该许可证的条款进行分发。
▪Tunnelblick 的GitHub网站上提供了Tunnelblick源代码。要下载包含当前源代码(来自主分支)的.zip文件,请单击窗口右侧的“下载ZIP”按钮。要下载不同的分支,首先在窗口左侧的绿色“分支”图标旁边的“分支”下拉菜单中选择需要的分支。
▪关于从源代码构建Tunnelblick的说明包含在源代码中的Source Code.markdown的Building Tunnelblick中。为Tunnelblick Mac项目做出贡献
Tunnelblick是自由软件,完全由志愿者开发和维护。我们也很乐意为您提供帮助!
尽管您可以捐款,但您还可以通过其他方式为Tunnelblick项目贡献力量:
我们最大的需求是让人们用Tunnelblick测试和报告问题或提出改进建议。
我们还需要帮助翻译Tunnelblick,特别是对于尚未完全翻译的语言(请参阅翻译状态)。
如果您是有经验的Tunnelblick或OpenVPN用户或网络专家,可以通过回答Tunnelblick讨论组中的问题提供帮助。
如果您有编程或图像创建和操作技能,您可以帮助我们开发Tunnelblick。
你可以告诉我们你是如何使用Tunnelblick的。
▪测试和报告问题或建议改进
我们的目标是让Tunnelblick的bug免费且易于使用,但我们需要帮助。任何Tunnelblick用户都可以提供帮助!
我们建议您报告问题并在Tunnelblick讨论组上提出改进建议,但如果您认为它更合适,则可以使用GitHub问题或直接与开发人员联系。请在发送问题报告之前阅读此内容。虽然它主要针对连接VPN的问题,但它在帮助您收集的诊断信息也用于调查其他问题时非常有用。
▪改进翻译
Tunnelblick有三十多种语言,但并非所有语言都有完整的翻译。如果您熟悉我们的一种不完全翻译的语言,我们确实需要您的帮助,但我们也希望能够帮助您验证并改进我们所有语言的现有翻译。有关详细信息,请参阅本地化和翻译Tunnelblick。
▪在Tunnelblick讨论组上回答问题
开发人员尝试回答Tunnelblick讨论组提出的问题,但如果您可以回答一个问题,请这样做,并让我们腾出时间来改进Tunnelblick。
▪帮助开发Tunnelblick
如果您是一位经验丰富的Mac应用程序开发人员或网络专家,或者具有图像创建和操作经验,您可以帮助我们开发Tunnelblick。联系开发人员以提供您的服务。
▪告诉我们你如何使用Tunnelblick
由于我们不收集使用统计信息(请参阅Tunnelblick***),因此我们无法获得有关人们如何使用Tunnelblick的信息。您可以通过在Tunnelblick讨论组上分享您的经验来提供帮助。Tunnelblick for Mac更新日志
将Openvpn 2.5.1更新为2.5.2。
将Openvpn 2.4.10更新为2.4.11。
钉钉扫条形码学习2目录 调用钉钉扫一扫发布调试云配置数据库 小程序页面配置小程序页面介绍注册小程序页面页面样式getCurrentPages axml视图层视图层概述数据绑定简单绑定运算组合 条件渲染a:ifblock a:if 列表渲染a:forblock a:fora:keykey 引用importinclude 模板定义模板使用模板模板作用域 调用钉钉扫一扫 调用biz.util.scan扫条形码或二维码。
安装包:
npm install dingtalk-jsapi --save 引用:
import * as dd from "dingtalk-jsapi"; 函数调用:
dd.biz.util.scan({ type: String , // type 为 all、qrCode、barCode,默认是all。 onSuccess: function(data) { //onSuccess将在扫码成功之后回调 /* data结构 { 'text': String} */ }, onFail : function(err) { } }) 安装一下工具吧会更方便一些:
npm i dingtalk-design-cli@latest -g ding init 2021/6/25
在使用上面的函数调用的时候发现了问题,不能够调用无法使能,最后经过排查发现上面的是使用的H5的开发调用函数,所以在这里换成小程序里的调用接口:
dd.scan({ type: 'qr', success: (res) => { dd.alert({ title: res.code }); }, }); 在调用成功后success返回值:
Dijkstra在1965年提出的银行家算法是著名的死锁避免算法,这个用于一个银行家给多个顾客贷款的算法可以直接用于操作系统给进程分配资源,这时只要把银行家换成操作系统,把顾客换成进程,把资金换成资源,把银行家决定是否放贷时所用的判断过程(即判断顾客是否有信誉和偿还能力)换成操作系统决定是否分配资源时所用的判断过程(即判断进程是否能及时归还资源)即可。为了描述银行家算法,下面先介绍一下系统的安全状态的概念。
一、安全序列 注意:
(1)系统在某一时刻的安全状态可能不唯一,但这不影响对系统安全性的判断。
(2)安全状态是非死锁状态,而不安全状态并不一定是死锁状态。即系统处于安全状态一定可以避免死锁,而系统处于不安全状态则仅仅可能进入死锁状态。
二、银行家算法 银行家算法的实质就是要设法保证系统动态分配资源后不进入不安全状态,以避免可能产生的死锁。即没当进程提出资源请求且系统的资源能够满足该请求时,系统将判断满足此次资源请求后系统状态是否安全,如果判断结果为安全,则给该进程分配资源,否则不分配资源,申请资源的进程将阻塞。
银行家算法的执行有个前提条件,即要求进程预先提出自己的最大资源请求,并假设系统拥有固定的资源总量。下面介绍银行家算法所用的主要的数据结构。
三、具体实例 假定操作系统中的4个进程P1、P2、P3、P4和3类资源R1、R2、R3(资源数量分别为9、3、6),在t0时刻的资源分配情况如表2-1:
四、测试代码 #include<iostream> using namespace std; // p 进程数,r资源种类 int p ; int r ; int maxs[10][10]; //最大需求矩阵 int allocation[10][10]; //分配矩阵 int need[10][10]; //需求矩阵 int available[10]; //可用资源向量 int request[10]; //请求向量当前进程对各类资源的申请量,算法的入口参数 //输入函数 void infInput() { int i,j; cout<<"请输入最大需求矩阵max\n"; for(i=0; i<p; i++) { for(j=0; j<r; j++) { cin>>maxs[i][j]; } } cout<<"请输入分配矩阵allocation\n"; for(i=0; i<p; i++) { for(j=0; j<r; j++) { cin>>allocation[i][j]; } } cout<<"
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。
在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:
class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Dog extends Animal{ public void move(){ System.out.println("狗可以跑和走"); } } public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move();//执行 Dog 类的方法 } } 方法的重写规则 参数列表与被重写方法的参数列表必须完全相同。
目录
一、物理层概念
1.1 物理层的功能
1.2 物理层四大特性
1.3 数据通信的基础知识
1.3 三种通信方式
1.4 两种数据传输方式
二、相关术语(码元、波特、速率、带宽)
2.1 码元
2.2 速率
2.3 失真
2.3.1 失真--码间串扰
2.3.2 奈氏准则(奈奎斯特定理)
2.3.3香农定理
三、编码与调制
3.1 数字数据编码为数字信号
3.1.1 非归零编码
3.1.2 归零编码
3.1.3 曼彻斯特编码
3.1.4差分曼彻斯特编码
3.1.5 4B/5B 编码
3.2 数字数据调制为模拟信号
3.3 模拟数据编码为数字信号
3.4 模拟数据调制为模拟信号
3.5 小结
四、传输介质及分类
4.1 传输介质介绍
4.2 导向型传输介质
4.2.1 双绞线
4.2.2 同轴电缆
4.2.3 光纤
4.3 非导向性传输介质
4.4 小结
五、物理层设备
5.1 中继器
5.2集线器
六、章节
一、物理层概念 1.1 物理层的功能 物理层解决如何来连接各种计算机的传输媒体(电缆、光纤电缆等)上传输数据比特流,而不是指具体的传输媒体。
看这篇文章之前,建议你先去看一下我写的上一篇《RestTemplate调用远程Http服务开发》
一、背景介绍 我们在开发过程中有时候会遇到这样的开发场景:如果调用请求响应比较慢,甚至请求超时,程序就必须等到请求返回以后才能继续执行。然而在某些场合下,我并不需要等待请求的结果,或者我并不关心请求是否执行成功,只需要帮我继续执行之后的逻辑即可,减少响应时间,此时就需要通过异步处理。
在 Spring 3 时代,为了能更优雅地实现HTTP调用,引入了 RestTemplate,其中提供了多种便捷访问远程Http服务的同步调用方法,能够大大提高客户端的编写效率。
在 Spring 4 时代,为了能实现异步地HTTP调用,引入了AsyncRestTemplate,使得编写异步代码和同步代码一样简单。
在 Spring 5 时代,AsyncRestTemplate已经被标注过时,@deprecated as of Spring 5.0, in favor of {@link org.springframework.web.reactive.function.client.WebClient} ,推荐使用Spring 5中的WebClient。WebClient是Spring 5的响应式Web框架Spring WebFlux的一部分,位于spring-webflux项目中。将在后面文章中进行介绍。
二、AsyncRestTemplate介绍 AsyncRestTemplate底层是基于RestTemplate+异步线程池实现的。因此AsyncRestTemplate的很多调用方法跟RestTemplate很相似,主要是返回值不同。
public <T> ListenableFuture<ResponseEntity<T>> getForEntity/postForEntity(String url, Class<T> responseType, Object... uriVariables) throws RestClientException public <T> ListenableFuture<ResponseEntity<T>> getForEntity/postForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException public <T> ListenableFuture<ResponseEntity<T>> getForEntity/postForEntity(URI url, Class<T> responseType) throws RestClientException public <T> ListenableFuture<ResponseEntity<T>> exchange(String url, HttpMethod method, @Nullable HttpEntity<?
原文见
Js中的枚举
在JavaScript目前的版本中,没有枚举这个概念(当然,ECMA-262第三版中已经将enum作为关键字保留)。 然而,如同JavaScript中没有class一样,但我们仍然可以通过间接的方式——JSON来实现它。 如下,我们来定义Week的枚举: if(typeof WeekDay == "undefined"){ var WeekDay = {}; WeekDay.Sunday = 0; WeekDay.Monday = 1; WeekDay.Tuesday = 2; WeekDay.Wedesay = 3; WeekDay.Thursday = 4; WeekDay.Friday = 5; WeekDay.Saturday = 6; } 测试如下: alert(WeekDay.Monday); // -----> Output: 1 当然,我们有更为直观的方式。以定义DOM文档节点类型为例,定义方式如下: if(typeof Node == "undefined"){ var Node = { ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5, ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGEMENT_NODE: 11, NOTATION_NODE: 12 } } 测试如下:
其实组装电脑非常简单,只要你足够的细心就可以了,不要毛手毛脚。因为电脑硬件每个插口对应的相应的设备的接口是不一样的,颜色也是不一样的,只要你细心观察,就会发现。插错的话是插不上的。
首先,你可以把原来的主机箱拍个照,最后做参考。
重点要记录的是主机箱和主板的连接线,这里容易出错,如果弄错的话,会造成电脑不能开机或者硬盘指示灯不亮等等一些问题。下图供参考
主板上也有相应的字母或文字,但是非常小,拍照是拍不清楚的。在拆卸的时候仔细观察。重新安装的时候注意正负极。
这些都观察完,记录好以后,我们就开始拆卸了。
1、拔掉电源和主板的电源线。
2、如果是独立显卡的话就拆卸。集成显卡就不用了。
3、拔掉硬盘数据线,光驱数据线。
4、拔掉主机箱与主板的连接线,拔的时候在仔细观察一下,以免安装是出错。
CPU和内存就不用拆卸了,因为他们不影响我们卸螺丝。接下来就是拆卸螺丝。
都拆卸完以后我们就可以把这些硬件设备安装到新的机箱上了。
安装的顺序是从最后拆卸的东西开始安装,也就是反向安装。
再次提醒的是,一定要注意用力,不要用力过猛,造成不必要的硬件损伤。
最后就大功告成啦!
阿巴可懂的实时排行榜设计和实现思路。
大家好,我是鱼皮,暑假快到了,我的老弟小阿巴听说我家有很多好康的,就跑来找我玩。
结果我摆出了几个以前开发过的小系统,准备在这段时间带着小阿巴多做些作品,学习编程项目的设计思路。这样等他开学了,就可以更轻松地跟着老师做做项目了。
今天,就先带他做一个很常见的小功能:用户实时积分排行榜。
实时积分排行榜 需求 先描述下需求,在我的编程导航项目中,为了鼓励大家共同维护网站,用户可以通过推荐资源、积极评论、举报违规资源等方式获取积分。
为了进一步激励大家,网站需要提供一个用户积分排行榜,分为 实时总积分榜 、 周榜 和 月榜,均 只取前 10 名 。所有用户都能够查看当前排行榜,以及查看自己的 实时 总积分排名,后续管理员就可以给上榜用户颁发奖品了。
效果如下图:
点击 我的排名 按钮,可以查看自己的实时排名:
本文篇幅有限,先仅讨论 实时总积分榜 的设计实现。
听了需求后,小阿巴爽朗一笑:这有啥难的?且让我设计一波,再给你娓娓道来。
设计实现 先看下数据库的结构,总共有 2 个表:用户表 和 用户积分表。
用户表存储了用户信息,以及用户的总积分(实时更新),也就是说总积分榜需要的数据可以直接从这里取到,不需要再去计算。
用户表内容:
用户 id用户名积分(score)1小阿巴102李鱼皮10003小李100......
100李老热66 如果要取前 10 名,只需要把所有用户的信息先取出来,再排个序就好啦,写 SQL 语句查询的话就是:
select * from `user` order by score; 然后如果要取自己的总排名,就对查到的有序数据进行一次遍历,找到自己所在的位置下标就行,伪代码如下:
// 从数据库查询全部用户列表 list = getAllDataList() for(i = 0; i < total; i++) { // 找到自己的位置 if(list[i].id == '我的id') { return i + 1; } } 小阿巴得意到:这不就实现总积分榜了么?你这需求太简单,啧啧。
1、LMS Filter模块仿真时,输出会发散,主要是mu值选取不合适,选取比较小的值就可以了
2、可以把网上的m文件通过 matlab coder工具直接转为C文件(不能直接使用,可以对比参考)
3、修改了网上的C代码可供参考
#include "LMS.h" /* xn--------输入的信号序列(列向量) * itr-------迭代次数,标量,默认为xn的长度,M<itr<sizeof(xn) * en--------误差序列(itr*1)列向量 * dn--------所期望的响应序列(列向量) * M---------滤波器的阶数(标量) * mu--------收敛因子(步长)标量 * W---------滤波器权值矩阵,大小为M*itr * yn--------实际输出序列(列向量)*/ /*LMS具体算法*/ float * LMS_Filter(int itr, const float *xn, const float *dn, double mu, int length) { static int i = 0; static int k = 0; static float y = 0.0; static float en[F_COUNT]; static float W[M][F_COUNT]; static float x[M]; static float yn[F_COUNT]; /*创建一个en全零矩阵,en(k)表示第k次迭代时预期输出与实际输入的误差*/ for (i=0; i<itr; i++) { en[i] = 0; } /*创建一个W全零矩阵,每一行代表一个加权参量,每一列代表一次迭代*/ for (i=0; i<M; i++) for (k=0; k<itr; k++) W[i][k] = 0; /*创建一个x全零矩阵*/ for (i=0; i<M; i++) x[i] = 0; /*迭代计算*/ for (k=M; k<=itr; k++) { /* 滤波器M个抽头的输入:从xn第k-1个值倒序取出M个样点的值放入x * y为滤波器输出:W的第K-2列与x的积的和*/ for (i=0; i<M; i++) { x[i] = xn[k-i-1]; y += W[i][k-2] * x[i]; } en[k-1] = dn[k-1] - y; //第k次迭代的误差 /*滤波器权值计算的迭代式*/ for (i=0; i<M; i++) { W[i][k-1] = W[i][k-2] + 2*mu*en[k-1]*x[i]; } y = 0.
本文会对Modifier修饰符进行详尽的解说,报你收货满满
本文git地址:
https://github.com/ymeddmn/ModifierIntroduce
Modifier Modifier 可以被翻译为修饰符,可以用来修饰以下内容:
更改可组合项的大小、布局、行为和外观
添加信息,如无障碍标签
处理用户输入
添加高级互动,如使元素可点击、可滚动、可拖动或可缩放
item 代码案例 第三节属性扩展中的案例都是基于本节中 item 方法的形参进行赋值得到的
item1 item1 代码 @Composable fun item1(m: Modifier) { Column( modifier = Modifier.fillMaxSize(1f), horizontalAlignment = Alignment.CenterHorizontally ) { Box( modifier = m .size(100.dp) .background(color = Color.Red), contentAlignment = Alignment.Center ) { Text( text = "安安安安卓", textAlign = TextAlign.Center, style = TextStyle(color = Color.White) ) } Spacer(modifier = Modifier.height(10.dp)) } } item 默认的展示效果如下: Modifier 所有扩展方法详解 selectable(compose 实现单选) 这里起初我是没头绪的,就拼了命的百度找资料的,但是说实话一篇讲这里的文章都没有。所以只能去官网翻译官方文档了。基本上花了半小时才搞明白啥意思。眼睛又废了,本周计划的 Livedata 源码也讲不了了
一 css基本知识 1.1 CSS介绍 CSS 指的是层叠样式表* (Cascading Style Sheets),它描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素。它可以外部样式表存储在 CSS 文件中,同时控制多张网页的布局,节省了大量工作。
CSS 规则集(rule-set)由选择器和声明块组成,选择器指向您需要设置样式的 HTML 元素。声明块包含一条或多条用分号分隔的声明。
通常我们在单独的css文件中写css,不推荐在html文档中书写css代码。在html中使用css可以使用link标签引入。
<link rel="stylesheet" type="text/css" href="mystyle.css"> 1.2 CSS选择器 1.2.1 元素选择器
元素选择器根据元素名称来选择 HTML 元素。
p { text-align: center; color: red; } 1.2.2 id选择器
id 选择器使用 HTML 元素的 id 属性来选择特定元素。元素的 id 在页面中是唯一的,因此 id 选择器用于选择一个唯一的元素!
css文件中的#para1选择器可以修饰html文件中id="para1"的元素。
#para1 { text-align: center; color: red; } <p id="para1">Hello World!</p> 1.2.3 类选择器
类选择器选择有特定 class 属性的 HTML 元素。如需选择拥有特定 class 的元素,请写一个句点(.)字符,后面跟类名。
下面.center可以修饰html文件中所有类名为center的元素。
初学MySQL,总是遇到各种各样的问题,今天在练习用子查询更新数据时,报错Error Code: 1264. Out of range value for column 'final' at row 5。
use teaching; #将student表中入学成绩低于800的所有学生的期末成绩增加5% update score set final=final*1.05 where studentno in (select studentno from student where entrance<800); #报错 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect 原来是Workbench设置为安全更新模式。要禁用安全模式,打开首选项-> SQL Editor
在Safe Updates前面打钩,重新打开Workbench。
转自 https://network.fasionchan.com/zh_CN/latest/practices/ping-by-icmp-c.html
众所周知, ping 命令通过 ICMP 协议探测目标 IP 并计算 往返时间 。 本文使用 C 语言开发一个 ping 命令, 以演示如何通过 套接字 发送 和 接收 ICMP 协议报文。
注解
程序源码 可在本文末尾复制,或者在 Github 上下载: ping.c 。
报文封装 ICMP 报文承载在 IP 报文之上,头部结构非常简单:
注意到, ICMP 头部只有三个固定字段,其余部分因消息类型而异。固定字段如下:
type , 消息类型 ;code , 代码 ;checksum , 校验和 ; ICMP 报文有很多不同的类型,由 type 和 code 字段区分。 而 ping 命令使用其中两种:
ping命令原理
如上图,机器 A 通过 回显请求 ( Echo Request ) 询问机器 B ; 机器 B 收到报文后通过 回显答复 ( Echo Reply ) 响应机器 A 。 这两种报文的典型结构如下:
文章目录 前言添加i386架构添加Deepin软件源设置源优先级添加XDG_DATA_DIRS配置更新源应用安装解决小图标变wine system tray悬浮窗问题解决安装后无法启动微信或QQ问题参考来源 前言 原先安装的deepin.com.wechat_2.6.8.65deepin0_i386.deb在Ubuntu16.04下无法正常@人,有些图片表情也加载不出。而Deepin新版的微信V3.2.1.154增加了看小程序、看一看等功能,但其安装包要求glibc>=2.18,所以只能在Ubuntu 20.04安装,与Deepin V20类似,后续版本还有更新也可以直接安装,比较方便。
2022.01.05更新:
如果只是需要使用钉钉,可以使用阿里官方的Linux版本了!
可以移步到新博文Debian/Ubuntu 安装钉钉官方Linux版(支持在线更新)查看!
添加i386架构 sudo dpkg --add-architecture i386 添加Deepin软件源 创建/etc/apt/sources.list.d/deepin-wine.i-m.dev.list文件,
sudo tee "/etc/apt/sources.list.d/deepin-wine.i-m.dev.list" >/dev/null << "EOF" deb [trusted=yes] https://deepin-wine.i-m.dev / EOF 设置源优先级 降低Deepin仓库的优先级,尽可能使用发行版仓库中固有的软件包而不是Deepin仓库的软件包,最小化风险。
sudo tee "/etc/apt/preferences.d/deepin-wine.i-m.dev.pref" >/dev/null << "EOF" Package: * Pin: release l=deepin-wine Pin-Priority: 200 EOF 添加XDG_DATA_DIRS配置 sudo tee "/etc/profile.d/deepin-wine.i-m.dev.sh" >/dev/null << "EOF" XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/local/share:/usr/share} for deepin_dir in /opt/apps/*/entries; do if [ -d "$deepin_dir/applications" ]; then XDG_DATA_DIRS="$XDG_DATA_DIRS:$deepin_dir" fi done export XDG_DATA_DIRS EOF 更新源 sudo apt-get update 应用安装 sudo apt-get install com.
1)产生timeserise数据
方法一:通过timeseries,例如ts = timeseries(rand(5,1));%rand是产生5*1的矩阵随机数
方法二:simulink中产生的数据输出到To Workspace控件
2)获取timeserise属性
在命令行窗口,通过get函数直接获取,例如
tsinfo = get(ts) 具体的数据获取方法:
ts.Time
ts.Data
3)对timeserise数据绘图
在命令行窗口,直接对数据plot,例如plot(ts)
[版权申明] 非商业目的注明出处可自由转载
博文地址:https://blog.csdn.net/ShuSheng0007/article/details/118220299
出自:shusheng007
文章目录 概述Base64是什么?为什么叫Base64?Base64解决什么问题?ASCII存在的问题 使用场景Base64算法Base64字符串末尾的`=`是什么Base64 DataURI格式Java如何对base64进行编码和解码总结 概述 Base64在日常开发中的出镜率还是比较高的,那你真的了解它吗?它是加密算法吗?它有什么作用?具体算法是怎么样的?为什么叫Base64?如果你不能完全回答上面的问题,可以接着往下看了
Base64是什么? Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。
例如字符串ShuSheng007对应的Base64为U2h1U2hlbmcwMDc=。其中那个=比较特殊,是填充符,一会再说。
值得注意的是Base64不是加密算法,其仅仅是一种编码方式,算法也是公开的,所以不能依赖它进行加密。
为什么叫Base64? 因为它是基于(Base)64个字符的一种编码方式。使用其编码后的文本只包含64个ASCII码字符(偶尔加一个填充字符=),如下所示:
Base64使用到的64个字符:
A-Z 26个a-z 26个0-9 10个+ 1个/ 1个 下图是Base64码表,可以看到从0到63的每个数字都对应一个上面的一个字符。
Base64解决什么问题? 这块还是比较难说清楚的,我们就抓住主要矛盾吧。
假设王二狗给牛翠花通过邮件发情书:
亲爱的翠花我爱你,就像老鼠爱大米…
你是我的心,你是我的肝,你是我生命中的四分之三…
我们首先要明白,网络中信息的传输只能传输0和1,所以我们首先要将这封情书转成01序列,那怎么转呢?
这就又涉及到了编码方式,这块展开说能说两天,这里就假设使用UTF-8转成的byte[], 值是我瞎写的
[100][11][1][13].... 这个byte[]里面的那些数字,传输时候是以二进制形式进行的,格式如下:
011001000001100100000001001101... 那么当牛翠花收到这串数字后再将其按照UTF-8解码,就能看到二狗的情书了。
如果一切都这么顺利就没base64什么事了。由于信息从王二狗的电脑到牛翠花的电脑中间会经过好多路由器转发,牛翠花电脑上安装的邮件客户端也搞幺蛾子。其中一个叫阿路的路由器发现现在使用的是文本传输协议,而且有个byte的值是[13],而13在ASIIC码中对应回车键,阿路一想,这玩意也表达不出个啥意思,算了给他娘的省略了吧,为下面的兄弟省点宽带,阿路有看到一个byte值为[07]的又自作聪明,因为其在ASIIC中表示铃声,又给省略了。这样等到01序列到达牛翠花的电脑时其实已经不是王二狗发出时的样子了,好死不死的牛翠花用的是mac,邮件客户端也自作聪明,又给处理了好多byte。这最后导致的就是使用UTF-8解码失败,或者解出来的内容不对。
如果是英文文本还好一点,因为被处理的都是那些ASIIC中不可见字符,那些话还是可以出来的,如果是张图片,牛翠花可能就打不开了。
所以,Base64就是为了解决各系统以及传输协议中二进制不兼容的问题而生的。为啥Base64大家就兼容了呢?因为Base64满足了各方的需求,各方说了,俺们只保证支持ASIIC中那些基础字符,其他的俺们不能保证,于是Base64就去从那些基础字符里挑了64个,所以大家都高兴了。
目前由于传输导致的二进制改变已经很少见了,各种系统对二进制的兼容性处理也越来越好。假如你告诉我这一串01是一张jpg格式的图片,那我就按照jpg算法将其恢复成一张jpg图片,所以大家都很高兴。
ASCII存在的问题 地球人都知道计算机是欧美那帮人发明的,关键是这帮老外说的是英语,总共就26个字母。某天一个老外在认真的设计ASIIC码,他候低头看了一眼手中的键盘,数了数按键,思考了一下,若有所思的加入了一些控制符,最后凑了128个字符(后来进行了扩展),搞定收工!我日,他把我们说汉语的直接忽略了…因为人家肯定是只想着自己的文字啊,他们可能在想:什么?中国人也有可能用电脑吗?他们有电脑吗?到时候说英语好啦,汉字就不要用了
中国近150年来那叫一个矬B啊,落后愚昧,谁都能欺负。曾经的精英阶层(无论国共)均认为是中国的传统文化,以及汉语的复杂性导致了中国的全面衰落,大力提倡了汉字拉丁化,破四旧等等。足见咱们国家当年是多么的贫穷落后,把人的精神都逼成啥样了,准备放弃自己的文化了,但我们的祖国在近20年内迅速崛起了,虽然与西方仍然有较大的差距,但我们看到了光明的未来,这一点确实要感谢中国共产党。近年来文化也开始自信了,孔子学院也开到国外了,汉字也上了太空了,大部分妇女看到洋垃圾也不急着往回家捡了…
使用场景 证书电子邮件的附件,因为附件往往有不可见字符xml 中如果像嵌入另外一个 xml 文件,直接嵌入,往往 xml 标签就乱套了, 不容易解析,因此,需要把 xml 编译成字节数组的字符串,编译成可见字符。网页中的一些小图片,可以直接以 base64 编码的方式嵌入,不用再链接请求消耗网络资源。较老的纯文本协议 SMTP ,这些文本偶尔传输一个文件时,需要用 base64 Base64算法 这里只做简单介绍,详情请参考相关技术文档
使用 Base64 进行编码,大致可以分为 4 步:
将原始数据每三个字节作为一组,每个字节是8个bit,所以一共是 24 个 bit
之前springboot项目常量类如下形式:
@Component @RefreshScope//nacos配置中心时添加上 public class Constants { @Value("${test1}") public String test1; } 然后在配置文件properties中写test1=123
controller中应用
@Autowired private Constants constants; @GetMapping("/test") public String test(){ logger.info("constants :{}",constants);------------------------------------------ 1 logger.info("test nacos 配置中心 实时更新情况:{}",constants.test1);--------------- 2 return constants.test1;------------------------------------------------- 3 } 未采用nacos作为配置中心之前都是ok的,但是采用nacos配置中心后,按照springcloud的方式配置好后,启动就出现问题了
问题是1处constants不为空,但是2,3取值均为空
解决办法:
将Constants的getter/setter添加上,然后取值采用constants.getTest1() 即可取到值
在FileZilla 中:
- 用sftp协议连接Server ,需要用port 22
- 用ftp协议连接Server, 用port21
一个控制端口一个数据传输端口。
端口20才是真正传输所用到的端口,端口21只用于FTP的登陆认证。
sftp工具 package com.demo.utils; import com.jcraft.jsch.*; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.*; import java.lang.reflect.Field; import java.util.Collections; import java.util.List; import java.util.Properties; import java.util.Vector; import java.util.stream.Collectors; /** * sftp 工具类 * * @version v1.0 * @date 2019/8/13 11:34 */ @Component @Slf4j public class SftpUtils { private ChannelSftp sftp; private boolean isReady = false; private FtpConfig config; private Session sshSession; @Data private class FtpConfig { private String server; private String port; private String username; private String password; private String encoding; } /** * 连接sftp服务器 */ public SftpUtils(String server, String port, String username, String password, String encoding) { config = new FtpConfig(); config.
//===头文件的引用 #include
#include
#include
#include
//程序状态码(宏定义常量用大写) #define MAXSIZE 100//线性表最大长度
#define OK 1
#define ERROR0 -3
#define OVERFLOW -2
using namespace std; typedef int status;//返回值状态
//订单信息结构体
struct Order{
string id;//编号
string company_name;//公司名称
string product_name;//产品名称
double product_price;//产品价格
double order_num;//订购数量
double order_price;//订购金额
};
//顺序表结构体
typedef struct{
Order *elem;
int length;
} SqlList;
//顺序表的初始化
status InitListSq(SqlList &L) {
L.elem = new Order[MAXSIZE]; //申请100个book数组
if(!L.elem) {
// 内存申请失败,直接退出程序
exit(OVERFLOW);
}
L.length = 0; //初始
win10正式版系统与旧系统相比,在很多操作上都发生了不少的变化,所以用户在使用过程中难免会遇到一些问题。比如,有位用户在win10中访问局域网共享文件时,就发现系统会弹出输入网络凭据的对话框。可是该用户表示共享机并没有设置Microsoft live账户,只设置了本地账户,且本地账户没有密码,根本无网络凭据可输。这该怎么办呢?接下来,小编就给大家介绍Win10访问局域网共享文件时提示输入网络凭据的两种解决方法。
原因分析:
微软为Windows 10添加了新的安全机制导致的,没有密码的访问形式因此被系统判定为不安全。
解决方法一:
您可以在被共享电脑设置一个有密码的管理员用户,或给单前帐户添加一个密码。
解决方法二:
如果你觉的输要密码太繁琐,也可以进行以下操作:
1、按下WIN+R输入regedit 回车打开注册表编辑器。
2、然后定位到:HKEY_LOCAL_MACHINE—-SYSTEM—- CurrentControlSet—-Services—-LanmanWorkstation—Parameters
3、在Parameters里右击新建DWORD(32位)值重命名为AllowInsecureGuestAuth 数值1保存即可。
大家在Win10系统中访问局域网共享文件时,也遇到需要输入网络凭据提示的话,不妨使用小编分享的两个方法进行解决!更多信息,请关注:系统城Win10专题(http://www.xitongcheng.com/win10/zt/)
相关推荐:
不知道大家有没有想过自己如果可以任意修改网站可能会做什么?
今天我就来教你们如何在浏览器为所欲为。
我们用Microsoft edge浏览器做测试!
进入浏览器之后谁便打开个网站。
我们拿天猫为例。
第一步:按下鼠标右键,点击检查。
第二步:找到控制台并点击。
第三步:输入代码document.body.contentEditable=‘true’;回车。
就可以任意修改网站啦!
设置电脑管理员密码可以防止他人乱动电脑里的文件等等,要是忘记了管理员密码的话,电脑就打不开了,那电脑管理员密码忘了怎么办呢,下面小编给大家分享忘记了电脑管理员密码的解决方法。
电脑管理员密码忘了的解决方法:
1、首先要有一个PE盘也就是U盘启动盘。重启电脑,在进入开机界面的时候快速的按F12键或者Del键进入电脑的BIOS设置界面(当然不同的电脑进入BIOS设置界面的快捷键不同),然后找到USB Configuration选项点击(就是从U盘启动选项)。
2、这时就会进入到下图的选择界面,这里选择第一个选项点击启动。
3、进入到PE盘的操作界面,然后在操作界面找到密码修改双击。双击修改密码后进入到操作界面,点击右侧的打开按钮就能看到电脑系统提供的每个账户。
4、选中Administrator账户,点击下面的更改密码选项出现操作界面。
5、这里我们可以选择什么也不输入,直接确定那么Administrator账户就是没有密码的!或者输入新密码点击确定。
6、输入好新密码,确定后再点击保存更改然后退出,到这里我们就修改好了Administrator账户的密码。(输入好新密码,确定后再点击保存更改然后退出,到这里我们就修改好了Administrator账户的密码)。
以上就是电脑管理员密码忘了的解决方法,有需要的用户可以自行查阅。
k8s 安装 操作系统配置主机规划hosts配置(所有主机都要配置)防火墙配置(所有主机都要配置)内核配置参数(所有主机都要配置)selinux 和 swap配置(所有主机都要配置)ipvs配置(所有主机都要配置) 安装docker安装k8s组件配置k8s组件安装yum源安装kubelet,kubeadm,kubectl(所有节点都要安装,工作节点不用安装kubectl)设置kubelet开机自启动 初始化集群(主节点操作)获取集群默认启动配置并修改启动集群给当前用户执行kubctl客户端权限查看集群信息节点taint(污点)信息处理 配置网络(主节点操作)下载并配置flannel config文件部署 flannel 向集群中添加节点(在需要加入集群的节点上操作)添加主节点(规划只有一个节点,这个用不到)添加工作节点 给节点打标签(主节点上操作) 记录k8s的常用操作。 操作系统配置 主机规划 主节点1 172.17.0.8 hostnamectl set-hostname k8s-master01 && bash 工作节点1 172.17.0.5 hostnamectl set-hostname k8s-node01 && bash 工作节点2 172.17.0.9 hostnamectl set-hostname k8s-node02 && bash VIP 172.17.0.250 #需要配置keepalived 和 haproxy [keepalived 和 haproxy高可用配置](https://blog.csdn.net/wfl_137724/article/details/115209910) hosts配置(所有主机都要配置) # 所有节点的/etc/hosts都要添加 cat >> /etc/hosts <<EOF vip(master01外网ip) www.k8s.com master01_ip(master01内网ip) k8s-master01 node01_ip(node01内网ip) k8s-node01 node02_ip(node02内网ip) k8s-node02 EOF 防火墙配置(所有主机都要配置) ### (CentOS7/Redhat7/Fedora)主机重启会自动加载/etc/modules-load.d 目录下配置文件里配置的module cat >/etc/modules-load.d/k8s.conf <<EOF br_netfilter EOF 内核配置参数(所有主机都要配置) cat <<EOF > /etc/sysctl.
1、popen函数
我们先用man指令查一下popen函数:
函数说明:
(1)popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。
(2)参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。
(3)此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。
(4)如果 type 为 r,那么调用进程读进 command 的标准输出。
如果 type 为 w,那么调用进程写到 command 的标准输入。
返回值:若成功则返回文件指针,否则返回NULL,错误原因存于errno中。
**注意:**popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。
具体实例:
#include<stdio.h> #include<stdlib.h> int main() { FILE *fp; char buffer[80]; fp = popen("cat /etc/passwd", "r"); fgets(buffer, sizeof(buffer), fp); printf("%s", buffer); pclose(fp); } 运行结果:
2、system函数
函数解释:
system()函数先fork一个子进程,在这个子进程中调用/bin/sh -c来执行command指定的命令。/bin/sh在系统中一般是个软链接,指向dash或者bash等常用的shell,-c选项是告诉shell从字符串command中读取要执行的命令(shell将扩展command中的任何特殊字符)。父进程则调用waitpid()函数来为变成僵尸的子进程收尸,获得其结束状态,然后将这个结束状态返回给system()函数的调用者。
返回值:
(1)当参数command是NULL的时候
在参数为NULL的情况下,system函数的返回值很简单明了,只有0和1。
返回1,表明系统的命令处理程序,即/bin/sh是可用的。
相反,如果命令处理程序不可用,则返回0。
(2)当参数command不是NULL的时候
当参数不为NULL的时候,情况有些小复杂,根据APUE这里可以分为以下三种情况:
1)如果fork等系统调用失败,或者waitpid函数发生除EINTR外的错误时,system返回-1
2)一切致使execl失败的情况下,system返回127
3)除此之外,system返回/bin/sh的终止状态
system源码:
int system(const char * cmdstring)
{
pid_t pid;
int status;
昨天晚上某群里有人发了个锁定cmd的批处理,说给cmd加个锁可以防止很多入侵问题。
于是我就看了看他是怎么防黑了。
首先是需要导入一个注册表文件code如下
---------------------------------
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"AutoRun"="lock.bat"
-------------------------------------
哦 映像劫持……
lock.bat代码如下 (命名lock.bat 保存在C盘win下)
---------------------------分割线----------------------------
@echo off
title 解除锁定
SETLOCAL
set pass=0
set times=2
echo ~~~~~~~~~~~~~~~~~~
echo 为了安全起见,CMD.EXE已经被我给锁了。
echo 不知道密码就不要乱来啊!!你的IP已被我记录
echo ~~~~~~~~~~~~~~~~~~
ipconfig >>c:\jilu.txt
netstat -an>>c:\jilu.txt
echo 操作: 密码验证 时间:%time% 日期:%date% >>c:\log.txt
echo 状态: 等待输入密码 >> c:\log.txt
echo. >> c:log.txt
:start
set /p pass=密码:
if %pass%==cnwyc goto ok
echo 密码错误,重新输入(你小子知不知到啊!)~~~你还有%times%次机会
if %times%==0 goto end
echo 状态:用户输入密码 验证失败 联系我认识认识 时间:%time% >> c:\log.
稍为记录一下学习
检视数据 import pandas as pd df = pd.read_csv('C:/Users/a0939/PycharmProjects/get/hotel/shanghai_hotel.csv') df.head() #查看数据前五行 df.dtypes #查看数据类型 df.shape #数据行列数 df.info() #数据资讯(可查看缺省值) df.describe() #描述性统计(平均、标准差、最大、最小、分位数) df['star'].unique() #查看该行列有几种数值 查找空值 df.isnull().any(axis=0) #缺省值,axis=0为列 axis=1为行 默认为0 df.loc[df.isnull().any(axis=1)] #定位缺省值的行列 df.isnull().sum(axis=0) #缺省值数量 #处里空值
da = df.copy() data = da.dropna() #删除含有缺省值的整行 data.info() #默认情况下dropna()不会修改原数据,若要修改的话,添加参数inplace = True data = da.fillna(0, inplace = False) #将缺省值换为0 data.info() 重复数据 da.duplicated().any() #查询有无重复 d =data.drop_duplicates(subset=['name']) #删除重复行、subset为判定重复的依据(例如:名字) #若需删除源数据,添加参数inplace = True
目录
矩估计量
无偏性-估计量的评选标准
一致估计量
矩估计量 定义:
矩估计法: 用样本k阶矩Ak作为总体k阶矩E(Xk)的估计量的方法.
注意最后用B2作为方差的矩估计量。
矩估计量不唯一
在总体的均值和方差都存在时,求均值μ和方差σ2 的矩估计量, 并不一定要知道总体服从什么分布. 无论总体服从什么分布,都有 :
无偏性-估计量的评选标准 无偏估计量:
重要结论:
B2不是总体方差D(X)的无偏估计.,样本方差S方是DX的无偏估计量
一致估计量 与此相对,无偏性和有效性的概念是对固定的样本而言,不需要样本容量趋于无穷.
证明题,例:
2019年西交912计算机基础经验总结(总分404 政治:68 英语二:84 数学二:119 专业课:133)
先说一下个人情况吧。本人2017年毕业于西安电子科技大学计算机科学与技术专业,毕业以后就职于一家国企,奈何不安分,加上种种原因,在2018年3月决定边工作边考研西交计算机,考研全程是一边工作一边看书,因为干的工作与专业关系不大,每天白天还要上班,只能在晚上和周末复习,所以花在考研上的时间相对比较少,每天不到4个小时,为了求稳报了专硕。考前和单位请了两周假背了背政治。
虽说考研整体花的时间比较少,但是因为西交专业课自主命题,考研资料比较封闭,所以10月份以后我大把大把的时间花在了专业课上面,而且大概有三分之一的时间花在了找资料上面。最关键的是完全不知道专业课重点在哪里,导致复习专业课的时候很慌。初试专业课考完以后当天晚上就写了一个回忆版的真题,包含所有题目(150分),还是拿不准。最后查完初试成绩才长舒一口气。写此贴的目的就是想分享一下西交专业课复习的一点心得,也好让学弟学妹们备考时不再像我一样走很多弯路。其他三门课是公共课,有很多复习经验,我的成绩一般就不说什么经验了。
首先整体介绍一下814计算机基础(学硕)和912计算机基础(专硕),两者都是考三门(数据结构、操作系统、组成原理),试卷整体上偏简单,考的内容非常基础,几乎全试卷没有发散思维或者难理解的题,一般课本能理解的话很容易拿高分。814和912的考纲一模一样,区别是试卷大概差两三道题?(未考证)三科又各自有特点,下面分别介绍:
数据结构(50分):数据结构本人用的是王道,10月份之前把王道过了一遍,10月份之后对照着西交数据结构期末复习提纲(百度文库有),在王道上一条一条过了一下知识点,你会发现期末复习提纲上的重点就是考研的重点,考前看了一下近两三年的回忆版真题(王道论坛有)。看完真题你会发现,每年考的大题基本上固定,具体可以看一下学长写的真题回忆。个人认为数据结构这门课用哪本书不重要,因为内容都差不多一样,关键是要把课本上的知识搞懂,多做题,做题的时候一定要注意,把选择题当填空题做,因为今年数据结构第一大题就是五道填空题。可以对照西交本科的期末复习提纲过知识点。当你觉得基础的知识自己已经很自信的时候,可以看学长们的回忆真题了,对于每一道真题,一定要在复习书上找出相似的题目,练练手,然后你会发现数据结构每年考的大题题型都差不多一样。这门课重在理解,另外像红黑树、并查集、B树之类的我没有看放弃了,考试没有考,建议有时间要看的。
操作系统(50分):这门课我花的时间是最少的,用的资料:操作系统题解与技巧(西安交通大学出版社)找同学在西交图书馆借的、西交操作系统期末复习提纲(百度文库)、操作系统习题课ppt(百度文库下载的)、王道回忆真题(论坛上有的)。复习过程:10月份之后看了题解,然后对照复习提纲又看了一遍、最后做了一下两个习题课的ppt,考前根据真题背了背概念,做了一下相关的题目。个人觉得西交的组成原理和操作系统比较偏文科,要背的东西比较多,所以还是要先理解透彻,这样背下来不容易忘。像大题pv操作每年都考,很容易复习。操作系统的重点在期末复习提纲上,我打印了出来,考试前把里面所有的知识完完整整过了好几遍,好多复习提纲只提一下的都补全了内容。
计算机组成原理(50分):这门课我复习所用的时间是最多的,甚至超过了前两门课的时间总和,也是最让我头疼的一门课。复习所用资料:计算机组成原理(王换招)、计算机组成原理课后题答案(百度文库下载的)、组成原理期末复习提纲(百度文库)、王道回忆真题(论坛上有的)。复习过程:10月份之前把课本看了一遍,说实话课本真的内容太多了,而且找不到重点,我看到后面直接看不下去了,这门课甚至让我心生了放弃西交的想法。但是在做了课后习题和看了期末复习提纲的内容后,重点逐渐显现,才慢慢有了头绪。这门课的重点在王换招老师课本上的课后习题上,把答案下载下来,然后对照有答案的题目,做课后习题,我对照回忆的真题,一遍一遍看课后习题,慢慢发现:组成原理的题目虽然变化毫无规律,处处踩点,今年最后一道大题更是让人绝望,我练了浮点数加法,结果考了除法,814考了加法。但永远都没有逃出课后习题,所以我的建议是,有时间就找视频跟西交老师认真学习这本书,做课后题,如果你像我一样时间比较少,强烈建议非跨考的同学,根据期末复习提纲看一遍自己学校的课本或者ppt,因为学过一次看起来顺手,然后直接做王换招老师课本的课后题,有疑问再翻王换招老师的课本,课后题需要多做几遍。另外,cache和流水线等知识不在组成原理里考,需要注意。
考试的时候平均每门课花了大概一个小时,我所有的图都是用尺子画的,比较慢。如果你决定考西交的话,只要认真复习了,我想专业课不会拖你的后腿。复试的时候,在笔试考场,和前后的同学聊了聊,坐在我前面的同学是非计算机专业跨考(404分),坐在我后面的同学也是非计算机专业跨校跨考(397分),专业课考的都不错。
写的比较乱请谅解,以上仅个人观点,有什么错误还请各位同学指正,这里只写了初试的情况,复试的情况等下次有时间再写,因为无耻的我还没有离职,每天还要上班啊hhhh
Q2:电脑时间显示不准确,该怎么设置?
第 1 步: 禁用或启用 Internet 时间
如果电脑启用了 Internet 时间,并且连接了 Internet,则与 Internet 时间服务器连接后,便可使电脑上显示的时间与该服务器上的时间同步。 一般来说,Internet 时间是保持时间准确无误的最佳方法,因此常常被推荐使用。 Internet 时间可以修复走慢的电脑时钟。 然而,在某些情况下,选用 Internet 时间也可能会引发某些问题。 按照以下步骤操作,开启或关闭 Internet 时间设置。
双击桌面右下角系统托盘上的时间。
如果有 “Internet 时间” 选项卡,请点击该选项卡。 如果未显示“Internet 时间”选项卡,请跳至 步骤二 。
想要启用 Internet 时间设置,请选择 “自动与 Internet 时间服务器同步” 。 如果已经选择了 “自动与 Internet 时间服务器同步” ,则删除其复选框中的标记。
点击时区选项卡,检查是否选择了正确的时区。 如果未选择 “根据夏时制自动调节时间” 复选框,请选择。
点击 “确定” ,然后重新启动电脑。
等待查看电脑能否显示准确时间。 如果没有,请继续执行下一步。
如果电脑仍然无法显示准确时间,请再次执行上述步骤,将 Internet 时间设置重置为其初始状态,然后继续下一步。
第 2 步: 更新 BIOS
如果您的电脑有可用的 BIOS 更新,则通过更新可能会解决该问题。 想要了解您的电脑是否有可用的 BIOS 更新,请参阅 HP 支持文档 “更新 BIOS” 。
自增和自减 一、自增 ++
通过自增可以使变量在自身的基础上增加1,对于一个变量自增以后,原变量的值会立即自增1。
自增分成两种:后++(a++)和 前++(++a);无论是a++ 还是 ++a,都会立即使原变量的自增1;不同的是a++ 和 ++a 的值不同:
a++ 的值等于原变量的值(自增前的值);++a 的值等于新值(自增后的值)
var d = 20; console.log(d++); //20 console.log(++d); //21 // 20 + 22 + 22 var result = d++ + ++d + d; console.log("result=" + result); //64 d = d++; //20 因为式子执行了右边之后d为21 而d++ 等于20 所以最后d的结果为 20 二、自减 –
通过自减可以使变量在自身的基础上减1
自减分成两种:后-- (a–) 和 前-- (–a);无论是a-- 还是 --a,都会立即使原变量的值自减1;不同的是a–和 --a 的值不同:
a-- 的值等于原变量的值(自减前的值);–a 的值等于原变量的新值(自减后的值)
七层模型中提供差错控制的有
数据链路层网络层传输层 什么是可靠传输
不错(没有比特差错),不丢(丢包),不乱(按序到达)每一层的校验只校验本层的数据,传输层是段,网络层是包,链路层是帧。 数据链路层 数据链路层FCS是为了防止网卡软硬件bug、电缆不可靠、信号干扰而造成信号失真、数据错误。如果不检查,将一直到达目的地主机,很有可能TCP/UDP层才会校验出错误,这显然不合理。数据链路层的差错检测的目的是做到"无比特差错"。使用循环冗余检验CRC差错检测技术无法管帧丢失、失序、重复,它只负责一个帧要是传对了,就是对的 两种方式
对于通信质量良好的有线传输链路,数据链路层协议不采用确认和重传机制,不要求数据链路层向上提供可靠的传输。如果在数据链路层出现了差错就靠上层协议来完成改正差错的任务对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠的传输服务。现在的通信线路的质量已经大大提高,由通信质量不好而产生差错的概率已经大大降低。 网络层 网络层的校验只用于针对网络层的头部好比货车司机只管车,车跑的好他就放心了。车上箱子里的水果零食坏没坏不关他的事。箱子里的水果坏没坏是传输层的事。数据包到了路由器之后,路由器会把这个数据包拆开,根据下一跳的地址,设置新的链路层头部的目的地址,crc校验值,IP首部的的ttl值,甚至可能还会对数据包进行分片,这样修改的更多了,如果在路由器处理的过程中这个数据出错,那么链路层的校验是发现不了错误的。 传输层 运输层的差错检测的目的是做到"无传输差错"。即弥补帧丢失、帧重复、帧失序。
文章目录 体系结构复习(张晨曦 计算机系统结构教程第二版)第一章计算机系统的多层级结构分类法Flynn分类法冯氏分类法Handler分类法 Amdahl定律,加速比CPU性能公式程序的局部性原理冯·诺依曼结构系列机仿真和模拟并行概念并行性的等级提高并行性的途径 第二章指令指令系统的结构控制指令的内容指令系统的要求指令操作码的优化赫夫曼编码等长拓展码 指令系统的发展方向CISC方向RISC方向 寻址 第三章 流水线技术概念通过时间、排空时间流水线的性能指标吞吐率各段时间相等各段时间不完全相等 加速比各段时间相等各段时间不等 效率各段时间相等各段时间不等 单功能非线性流水线的最优调度问题预约表禁止表F初始冲突向量 C 0 C_0 C0状态转换图根据状态转换图写出最优调度方案 五段流水执行过程流水线冲突相关流水线冲突 第四章 向量处理第七章 存储系统三级存储系统映像规则全相联映像直接映像组相联映像 替换算法写策略写直达法写回法 Cache性能Cache的不命中率不命中的类型优化技术多级Cache的不命中率 第八章 输入输出系统可靠性、可用性、可信性RAID 体系结构复习(张晨曦 计算机系统结构教程第二版) 第一章 计算机系统的多层级结构 第六级 虚拟机 应用语言机器
↓
第五级 虚拟机 高级语言机器
↓
第四级 虚拟机 汇编语言机器
↓
第三级 虚拟机 操作系统机器
↓
第二级 物理机 传统机器语言机器
↓
第一级 物理机 微程序机器
微程序解释指令系统又称作“仿真”
计算机系统结构经典定义:传统程序员所看到的计算机属性,即概念性结构和功能特性
计算机系统结构广义的定义: 指令系统结构、组成、硬件
计算机组成指的是计算机系统结构的逻辑实现,包含物理机器级中的数据流和控制流的组成以及逻辑设计等。
计算机实现指的是计算机组成的物理实现。
具有相同计算机系统结构的计算机因为速度、价格等方面的要求不同,可以采用不同的计算机组成。而同一种计算机组成又可以采用多种不同的计算机实现,即采用不同的物理结构来实现。
分类法 Flynn分类法 按照指令流和数据流的多倍性进行分类的
指令流:计算机执行的指令序列
数据流:指令调用的数据序列
多倍性:系统最受限的部件上,同时处于同一执行阶段的指令或者数据的最大数目
Flynn分类法把计算机系统的结构分为以下4类
单指令流单数据流单指令流多数据流多指令流单数据流多指令流多数据流 冯氏分类法 用系统的最大并行度对计算机进行分类
最大并行度 P m P_m Pm 定义为:计算机系统在单位时间内能够处理的最大二进制位数
springmvc项目添加@NeedLogin注解判断请求是否需要登录,所有添加注解的接口都需要登录后才能访问。
添加@NeedLogin注解
/** * 是否需要登录 * @author */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface NeedLogin { boolean value() default true;//是否需要登录 true 需要登录,false不需要登录 } 添加拦截器CheckLoginInterceptor
/** * 需要登录 * @author*/ public class CheckLoginInterceptor extends HandlerInterceptorAdapter { private static final Logger log = LoggerFactory.getLogger(CheckLoginInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod method = (HandlerMethod) handler; // 获取类和方法上的是否需要登录注解 NeedLogin loginController = method.getClass().getAnnotation(NeedLogin.class); NeedLogin needLoginMehtod = method.
如果你想要开始刷题,那么第一步就是:打开 LeetCode 官网,点击标签,选择一道顺眼的题目开始刷。
注意,在这过程中,不要左思右盼,不要去搜索与思考到底是刷 LeetCode 好还是去牛客网刷剑指 Offer 好。
我作为一名算法小白的时候,就犯了这个错误:在粗略的学习基本的数据结构与算法后,准备开始刷题,总想着找一个最有效最好的刷题平台。
一会在 LeetCode 题解区逛逛,一会在牛客网看看面经,结果就是整个人烦躁不安,焦虑迷茫,题没有刷几道,羡慕嫉妒恨却增加了几分:别人的代码怎么这么简洁 ? 别人的 Offer 怎么这么亮眼?
经过痛定思定之后,我开始自我剖析自己想好好刷题却无效的原因:
1、没有接受自己是算法小白的事实 我那时候只是按图索骥般的稍微系统的学习了基础数据结构与算法知识,根本没有真正的利用这些知识去处理问题。
在刷题的过程中,总想证明自己可以的,别人可以写成简洁高效的解题方法,我也要!于是去不停的找题证明自己,结果就是越刷越没有效果,自己根本就看不懂题目考察的数据结构与思想。
整个人完全奔溃,不刷题了,不准备算法面试了,不准备跳槽了!
后来我不停的告诫自己:作为一名非科班的程序员,肯定比不上他们呀,如果随随便便的学了一点就能刷题顺利,那别人大学四年不白学了!
所以前期先接受自己的思考方式,暴力解法其实也是一种有效的解法。
2、没有合理的刷题 我只是盲目的追求刷题的数量,即使刷了 200 道,脑中依旧一团浆糊。
后来才明白,吃透一道题目比乱刷十道题目更有价值。
经过不断的摸索与试验,形成了自己的一套刷题路径。
自己的解法网上好的解法自己的解法可以改进的地方不停的优化
** 寻找相同的题型重复练习总结每一个题目都经过至少一遍这样的迭代,彻底吃透一道题进而掌握一种题型。 以一道极其简单的动态规划题为例 ,LeetCode 第 70 号问题:爬楼梯。
当时的我根本不知道动态规划的相关概念,什么状态,什么转移方程,通通没听过。
没错,当时就那么菜!
二话不说,直接使用暴力解法。
class Solution { public int climbStairs(int n) { return calcWays(n); } private int calcWays( int n ){ if ( n == 1) return 1; if ( n == 2) return 2; return calcWays(n-1) + calcWays(n-2); } } 很明显,无脑的递归暴力解法包含了大量的重复计算,提交上去直接标红提示超出时间限制。
转载:https://blog.csdn.net/weixin_44674885/article/details/88669259
1.xls和xlsx区别:xls格式 最大行数为65535;xlsx格式 最大行数为1048576。
2.xls批量转换成xlsx:
方法一:利用Excel中VBA代码
在需要转换的xls文件目录下新建文件,并打开代码页面,输入代码:
'***********访问当前文件夹下所有子文件夹及文件, Dim iFile(1 To 100000) As String Dim count As Integer Sub xls2xlsx() iPath = ThisWorkbook.Path On Error Resume Next count = 0 zdir iPath For i = 1 To count If iFile(i) Like "*.xls" And iFile(i) <> ThisWorkbook.FullName Then MyFile = iFile(i) FilePath = Replace(MyFile, ".xls", ".xlsx") If Dir(FilePath, 16) = Empty Then Set WBookOther = Workbooks.Open(MyFile) Application.ScreenUpdating = False ActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False WBookOther.
我们在开机的时候会自动启动一些程序,电脑启动项就是开机的时候系统会在前台或后台运行的程序,但是不是每一个程序都对我们有用,有时启动了太多进程还会导致电脑卡顿,这我们可以设置一下电脑启动项了,那么要怎么设置电脑开机启动项呢,下面小编给大家设置电脑启动项的方法步骤。
解决方法:
1、打开电脑在电脑桌面的左下角可以看到一个“开始”然后点击开启然后找到其中的运行。
2、点击运行后,我们可以看到运行中有一处搜索栏,我们在其中输入msconfig。
3、然后我们点击确定后可以看到的是下图所示的页面,这是一个系统配置的页面。
4、然后我们将正常启动勾选为有选择的启动,然后勾选下面的加载启动项即可。
5、然后我们点击启动可以看到我们电脑中的一些软件都是随机自动开启的,我们在这里可以勾选。
6、然后如果我们想要将其全部禁止,点击下图中的全部禁止,然后点击应用即可完成操作。
以上就是设置电脑开机启动项的方法步骤,要是想一开机就可以开启自己经常用的应用程序,可以按上面的方法来进行设置。
我要分享到:
科学计算机计算对数log的方法:
情况一:计算底为10的log(10)即lg:
一般的计算器都默认log的底数为10,因此计算这类对数时,直接点击计算机的“log”键,再打上数字即可。
例如,求“lg(10)”可在科学计算器中按下:
“log”,“10”,“=”即可。
情况二:计算底为e的log(e)即ln:
点击图示中的“ln”键,再输出数字即可。
例如,求“ln(10)”可在科学计算器中按下:
“ln”,“10”,“=”即可。
情况三:计算以任意数为底数的log,即logx(y)
例如求“log3(9)”,
由对数换地公式可知log3(9)=lg9/lg3,
故此,求“log3(9)”可在科学计算器中输入:
“log”,“9”,“÷”,“log”,“3”,“=“即可。
log怎样运算
log怎样运算?
这个都需要借助工具:电脑或者数学用表。
但是,电脑和数学用表都只能求出常用对数lgN
和自然对数lnN
需要利用换底公式转化
比如log底数3真数10=log底数10真数10/log底数10真数3=1/lg3≈1/0.≈2.
log 在数学中的运算公式
1、如果a>0,且a≠1,M>0,N>0.那么:
(1)loga(M·N)=logaM+logaN;
(2)logaNM=logaM-logaN;
(3)logaMn=nlogaM(n∈R).
(4)(n∈R).
2、换底公式
logab=logcalogcb(a>0,且a≠1;c>0,且c≠1;b>0)
对数函数的运算性质的难点:
一、底数不统一
对数的运算性质是建立在底数相同的基础上的,但实际问题中,却经常要遇到底数不相同的情况,碰到这种情形,主要有三种处理的方法:
1、化为指数式
对数函数与指数函数互为反函数,它们之间有着密切的关系:logaN=bab=N,因此在处理有关对数问题时,经常将对数式化为指数式来帮助解决。
2、利用换底公式统一底数
换底公式可以将底数不同的对数通过换底把底数统一起来,然后再利用同底对数相关的性质求解。
3、利用函数图象
函数图象可以将函数的有关性质直观地显现出来,当对数的底数不相同时,可以借助对数函数的图象直观性来理解和寻求解题的思路。
log怎么计算有什么技巧
https://www.redelego.cn 🍺🍺Java多线程趣味谈 🍋🍋 什么是线程啊? 🐳 🐳 想了解线程,得先了解进程,因为线程是进程的一个单元。你看,我这台电脑同时开了很多个进程,比如说打字用的这个输入法、写作用的这个浏览器,听歌用的这个音乐播放器。这些进程同时可能干几件事,比如说这个音乐播放器,一边滚动着歌词,一边播放着音频。也就是说,在一个进程内部,可能同时运行着多个线程(Thread),每个线程负责着不同的任务。由于每个进程至少要干一件事,所以,一个进程至少有一个线程。
🐳 🐳 在 Java 的程序当中,至少会有一个 main 方法,也就是所谓的主线程。可以同时执行多个线程,执行方式和多个进程是一样的,都是由操作系统决定的。操作系统可以在多个线程之间进行快速地切换,让每个线程交替地运行。切换的时间越短,程序的效率就越高。进程和线程之间的关系可以用一句通俗的话讲,就是"进程是爹妈,管着众多的线程儿女。"
🍋🍋 为什么要用多线程啊? 🐳 🐳 多线程作为一种多任务、并发的工作方式,好处多多。
🔘 减少应用程序的响应时间🐲
🐳 🐳 对于计算机来说,IO 读写和网络通信相对是比较耗时的任务,如果不使用多线程的话,其他耗时少的任务也必须要等待这些任务结束后才能执行。 🔘 充分利用多核CPU的优势🐲
🐳 🐳 操作系统可以保证当线程数不大于 CPU 数目时,不同的线程运行于不同的 CPU 上。不过,即便线程数超过了 CPU 数目,操作系统和线程池也会尽最大可能地减少线程切换花费的时间,最大可能地发挥并发的优势,提升程序的性能。 🔘 相比于多进程,多线程是一种更"高效"的多任务执行方式🐲
🐳 🐳 对于不同的进程来说,它们具有独立的数据空间,数据之间的共享必须通过"通信"的方式进行。而线程则不需要,同一进程下的线程之间共享数据空间。当然了,如果两个线程存取相同的对象,并且每个线程都调用了一个修改该对象状态的方法,将会带来新的问题。
🐳 🐳 什么问题呢?我们来通过下面的示例进行说明。我们创建了一个线程池,通过 for 循环让线程池执行 1000 个线程,每个线程调用了一次Cmower.addCount() 方法,对 count 值进行加 1 操作,当 1000 个线程执行完毕后,在控制台打印count的值,但几乎不会是我们想要的答案 1000。
🐳 🐳 程序在运行过程中,会将运算需要的数据从物理内存中复制一份到 CPU 的高速缓存当中,计算结束之后,再将高速缓存中的数据刷新到物理内存当中。
public class Cmower { public static int count = 0; public static int getCount() { return count; } public static void addCount() { count++; } public static void main(String[] args) { ExecutorService executorService = new ThreadPoolExecutor(10, 1000, 60L, TimeUnit.
input,textarea都是原生组件,层级高到用z-index都无法改变。在底部有固定按钮的时候,滑动后input和textarea的placeholder和value值都会显示在固定按钮上面,如下图
布局如下
<view class="actionbox flex"> <view class="action_left" bindtap="openCancelModel">取消订单</view> <view class="action_right ml20" bindtap="deliverGoods">发货</view> </view> 微信小程序官方文档有cover-view来解决原生组件层级太高的问题,于是将固定底部按钮的view标签换成cover-view,并加上z-index:999,问题终于解决
<cover-view class="actionbox flex" style="z-index:999"> <cover-view class="action_left" bindtap="openCancelModel">取消订单</cover-view> <cover-view class="action_right ml20" bindtap="deliverGoods">发货</cover-view> </cover-view> 如有其它方法,欢迎大佬指导!
MVC是Model-View-Controller的缩写,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。
MVVM是Model-View-ViewModel的缩写,将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应view。
区别:
1.mvvm数据双向绑定,而mvc各部分数据流通是单向的;
2.mvvm是真正将页面与数据逻辑分离放到js里去实现,而mvc里面未分离。
我想做一个网站与一个博览会的组织者地图。
所以我需要实现一个交错for循环。你知道吗
@var entry_a;@
@var entry_b;@
@var loop_i;@
@var loop_y;@
@for loop_i = 0; loop_i < context.length; loop_i++@
@entry_a = context[loop_i];@
@for loop_y = 0; loop_y < entry_a.length; loop_y++@
@entry_b = entry_a[loop_y];@
@if (entry_b['belegt'] == 0)@
#entry_b['col1']# @else@
#entry_b['col1']# @endif@
@endfor@
@endfor@
我的json数据如下所示:self.data_a =[
{
"0": {
"id": "0",
"col1": "A 1",
"belegt": "0"
},
"1": {
"id": "1",
"col1": "B 1",
"belegt": "1"
},
"2": {
"id": "2",
注:迁移学习内容来自于王晋东老师的《迁移学习简明手册》
1、什么是迁移学习 迁移学习,顾名思义,就是要进行迁移。放到人工智能和机器学习的学科里,迁移学习是一种学习的思想和模式。
首先机器学习是人工智能的一大类重要方法,也是目前发展最迅速、效果最显著的方法。机器学习解决的是让机器自主地从数据中获取知识,从而应用于新的问题中。迁移学习作为机器学习的一个重要分支,侧重于将已经学习过的知识迁移应用于新的问题中。
迁移学习的核心问题是,找到新问题和原问题之间的相似性,才可顺利地实现知识的迁移。
例子:
在我们一开始说的天气问题中,那些北半球的天气之所以相似,是因为它们的地理位置相似;
而南北半球的天气之所以有差异,也是因为地理位置有根本不同。
其实我们人类对于迁移学习这种能力,是与生俱来的。
比如,我们如果已经会打乒乓球,就可以类比着学习打网球。再比如,我们如果已经会下中国象棋,就可以类比着下国际象棋。
因为这些活动之间,往往有着极高的相似性。生活中常用的“举一反三”、“照猫画虎”就很好地体现了迁移学习的思想。
迁移学习的定义:
迁移学习,是指利用数据、任务、或模型之间的相似性,将在旧领域学习过的模型,应用于新领域的一种学习过程。
1.1、为什么需要迁移学习 1. 大数据与少标注之间的矛盾。 我们正处在一个大数据时代,每天每时,社交网络、智能交通、视频监控、行业物流等,都产生着海量的图像、文本、语音等各类数据。数据的增多,使得机器学习和深度学习模型可以依赖于如此海量的数据,持续不断地训练和更新相应的模型,使得模型的性能越来越好,越来越适合特定场景的应用。然而,这些大数据带来了严重的问题:总是缺乏完善的数据标注。 2. 大数据与弱计算之间的矛盾。 大数据,就需要大设备、强计算能力的设备来进行存储和计算。然而,大数据的大计算能力,是” 有钱人” 才能玩得起的游戏。比如Google,Facebook,Microsoft,这些巨无霸公司有着雄厚的计算能力去利用这些数据训练模型。例如,ResNet 需要很长的时间进行训练。Google TPU 也都是有钱人的才可以用得起的。绝大多数普通用户是不可能具有这些强计算能力的。这就引发了大数据和弱计算之间的矛盾。在这种情况下,普通人想要利用这些海量的大数据去训练模型完成自己的任务,基本上不太可能。那么如何让普通人也能利用这些数据和模型? 3. 普适化模型与个性化需求之间的矛盾。 机器学习的目标是构建一个尽可能通用的模型,使得这个模型对于不同用户、不同设备、不同环境、不同需求,都可以很好地进行满足。这是我们的美好愿景。这就是要尽可能地提高机器学习模型的泛化能力,使之适应不同的数据情形。基于这样的愿望,我们构建了多种多样的普适化模型,来服务于现实应用。比如导航模型,可以定位及导航所有的路线。但是不同的人有不同的需求。比如有的人喜欢走高速,有的人喜欢走偏僻小路,这就是个性化需求。并且,不同的用户,通常都有不同的隐私需求。这也是构建应用需要着重考虑的。所以目前的情况是,我们对于每一个通用的任务都构建了一个通用的模型。这个模型可以解决绝大多数的公共问题。但是具体到每个个体、每个需求,都存在其唯一性和特异性,一个普适化的通用模型根本无法满足。那么,能否将这个通用的模型加以改造和适配,使其更好地服务于人们的个性化需求? 4. 特定应用的需求。 机器学习已经被广泛应用于现实生活中。在这些应用中,也存在着一些特定的应用,它们面临着一些现实存在的问题。比如推荐系统的冷启动问题。一个新的推荐系统,没有足够的用户数据,如何进行精准的推荐? 一个崭新的图片标注系统,没有足够的标签,如何进行精准的服务?现实世界中的应用驱动着我们去开发更加便捷更加高效的机器学习方法来加以解决。 上述存在的几个重要问题,使得传统的机器学习方法疲于应对。迁移学习则可以很好地进行解决。那么,迁移学习是如何进行解决的呢?
1. 大数据与少标注:迁移数据标注 单凭借少量的标注数据,无法准确地训练高可用度的模型。为了解决这个问题,直观的想法是:多增加一些标注数据。但是不依赖于人工,如何增加标注数据?利用迁移学习的思想,我们可以寻找一些与目标数据相近的有标注的数据,从而利用这些数据来构建模型,增加我们目标数据的标注。 2、大数据与弱计算:模型迁移 不可能所有人都有能力利用大数据快速进行模型的训练。利用迁移学习的思想,我们可以将那些大公司在大数据上训练好的模型,迁移到我们的任务中。针对于我们的任务进行微调,从而我们也可以拥有在大数据上训练好的模型。更进一步,我们可以将这些模型针对我们的任务进行自适应更新,从而取得更好的效果。
3、普适化模型与个性化需求:自适应学习 为了解决个性化需求的挑战,我们利用迁移学习的思想,进行自适应的学习。考虑到不同用户之间的相似性和差异性,我们对普适化模型进行灵活的调整,以便完成我们的任务。
4、特定应用的需求:相似领域知识迁移 为了满足特定领域应用的需求,我们可以利用上述介绍过的手段,从数据和模型方法上进行迁移学习。
以上用表格概括入下:
2、预训练模型 采用链接:https://www.zhihu.com/question/327642286/answer/1465037757
预训练模型可以把迁移学习很好地用起来。这和小孩读书一样,一开始语文、数学、化学都学,读书、网上游戏等,在脑子里积攒了很多。当他学习计算机时,实际上把他以前学到的所有知识都带进去了。如果他以前没上过中学,没上过小学,突然学计算机就不懂这里有什么道理。这和我们预训练模型一样,预训练模型就意味着把人类的语言知识,先学了一个东西,然后再代入到某个具体任务,就顺手了,就是这么一个简单的道理。
为什么要做预训练模型 自然语言处理(NLP),目的是使得计算机具备人类的听、说、读、写、译、问、答、搜索、摘要、对话和聊天等能力,并可利用知识和常识进行推理和决策,并支持客服、诊断、法律、教学等场景。
预训练模型,则是使自然语言处理由原来的手工调参、依靠 ML 专家的阶段,进入到可以大规模、可复制的大工业施展的阶段。而且预训练模型从单语言、扩展到多语言、多模态任务。
预训练通过自监督学习从大规模数据中获得与具体任务无关的预训练模型。体现某一个词在一个特定上下文中的语义表征。第二个步骤是微调,针对具体的任务修正网络。训练数据可以是文本、文本-图像对、文本-视频对。预训练模型的训练方法可使用自监督学习技术(如自回归的语言模型和自编码技术)。可训练单语言、多语言和多模态的模型。此类模型可经过微调之后,用于支持分类、序列标记、结构预测和序列生成等各项技术,并构建文摘、机器翻译、图片检索、视频注释等应用。
为什么我们要做预训练模型?
首先,预训练模型是一种迁移学习的应用,利用几乎无限的文本,学习输入句子的每一个成员的上下文相关的表示,它隐式地学习到了通用的语法语义知识。第二,它可以将从开放领域学到的知识迁移到下游任务,以改善低资源任务,对低资源语言处理也非常有利。第三,预训练模型在几乎所有NLP任务中都取得了目前最佳的成果。最后,这个预训练模型+微调机制具备很好的可扩展性,在支持一个新任务时,只需要利用该任务的标注数据进行微调即可,一般工程师就可以实现。 不管是图片识别还是自然语言处理,模型都朝着越来越臃肿,越来越大的方向发展。 每训练一个大的模型,都会消耗掉数小时甚至数天的时间。我们并不希望浪费太多的时间在训练上,所以拿到一个预训练模型就十分重要了。 基于预训练模型,我们能够用较少的模型,较快的速度得到一个适合于我们自己数据的新模型,而且这个模型效果也不会很差。
所以预训练的核心价值就是:
手头只有小数据集,也能得到一个好模型; 训练速度大大提升,不用从零开始训练。
预训练模型的三个关键技术 第一个关键技术是 Transformer
它在 NLP 各个任务中都取得了优异的性能,它是预训练语言模型的核心网络。给定一句话或是一个段落作为输入,首先将输入序列中各个词转换为其对应的词向量,同时加上每一个词的位置向量,体现词在序列的位置。然后将这些词向量输入到多层 Transformer 网络中,通过自注意力(self-attention)机制来学习词与词之间的关系,编码其上下文信息,再通过一个前馈网络经过非线性变化,输出综合了上下文特征的各个词的向量表示。每一层 Transformer 网络主要由 Multi-head self-attention 层(多头自注意力机制)和前馈网络层两个子层构成。Multi-head self-attention 会并行地执行多个不同参数的 self-attention,并将各个 self-attention 的结果拼接作为后续网络的输入,self-attention 机制会在后面中做详细介绍。此后,我们得到了蕴含当前上下文信息的各个词的表示,然后网络会将其输入到前馈网络层以计算非线性层次的特征。
1.DLL库的封装 1.1创建一个C++的库项目 最终生成的项目结构:
1.2这里随意添加一个功能函数,来进行验证使用! makedll.h:
#ifndef MAKEDLL_H #define MAKEDLL_H #include "MakeDll_global.h" class MAKEDLL_EXPORT MakeDll { public: MakeDll(); void newFun();//新添加的功能函数 }; #endif // MAKEDLL_H makedll.cpp:
#include "makedll.h" MakeDll::MakeDll() { } void MakeDll::newFun() { printf("这个是动态库的函数输出的内容,有此消息输出代表,验证成功"); } 其余文件不用动,只需要修改这两个文件
点击运行,出现下面的界面则成功,同时生成了此项目的dll库,在debug 和 release 两种模式下生产的文件是在各自生成目录下的: /debug/ 和 release/
2.调用DLL库 2.1 新建一个项目来使用库 生成的项目结构:
2.1项目配置文件配置信息 注释CONFIG -= qt,并添加QT += core
前一个生成库项目的debug文件夹,需要把.lib的文件地址包含到项目配置信息中
2.2 把生成的库拷贝到现在项目的debug文件夹中 2.3把生成库的项目的头文件全部拷贝到此项目的同级文件夹中 2.4使用库里面的函数 点击运行,结果成功
至此,封装及调用结束!
注:可以把库项目生成的 .lib文件和 .dll文件,全部拷贝到验证项目的debug或release文件夹中
,并且同时把LIBS += .lib文件的地址改成现在拷贝到的位置,如下图
在使用电脑的时候,难免会出现些问题,比如在桌面上出现一直自动刷新的问题,也没有按f5却是一直刷新桌面,这有可能是系统文件出现了错误导致的,那么电脑桌面图标一直自动刷新怎么办呢,下面小编给大家分享电脑一直在刷新的解决方法。
解决方法:
1、打开运行窗口。按WIN+R键打开运行窗口,输入regedit按回车键打开注册表。
2、弹出一个用户账户控制窗口,点击“是”。
3、然后在注册表编辑器的左边,依次展开HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control。
4、在Control项下面找一找有没有一个Update,如果没有的话右击Control项新建一个项。如果有Update项跳到步骤6。
5、将项名称改为Update。
6、点击Update,在右边中右击选择新建;选择dowd32位值。如果右边中有UpdateMode则跳到步骤8。
7、将名称改为UpdateMode。
8、然后双击打开UpdateMode,将数值改为1,然后点击确定。
以上就是电脑桌面一直在刷新的解决方法,要是遇到桌面图标一直在刷新的话,可以按上面的方法来进行解决。
我要分享到:
请教大佬给个源代码
要求编写一个活期储蓄账目管理系统,实现储户开户、销户、存入、支出等活动。其主要要求是能比较迅速地找到储户的账户,实现存款、取款,还要能比较简单、迅速地实现插入和删除,以实现开户和销户的需要:
(1)实现储户开户。开户时需要填写登记卡,记录储户信息(包括姓名和账号),并设置开户余额为0。
(2)实现储户销户。需要先找到储户的账户信息,然后将其删除。
(3)向某账户存款。需要找到账户信息,然后修改账户的余额(原来的余额 + 存入金额)。
(4)从某账户取款。需要找到账户信息,然后修改账户的余额(原来的余额 − 取出金额)。
(5)排序显示所有账户信息。根据账号对所有账户信息排序。
(6)查询某账户余额。找到要查找的账户,然后显示账户余额。
(7)查询某账户交易记录。找到要查询的账户,然后显示该账户的交易记录。
(8)所有账户及其交易信息存储至文件,程序运行时从文件中读入。
为了运行一个华为手表的hello world,花了我大量的时间,说实话,真的很不爽。这里有华为文档的因素,有华为产品的因素,还有对比谷歌之后失望的因素。但是,最终还是跑起来,还是希望支持国货,华为好好加油吧!现在我分享下这个曲折的过程。
DevEco Studio连接华为Watch3 这个连接真的是折腾的要命。
按照安卓开发的习惯,进入设置>关于,连续点击版本号,打开开发者模式。这里没有任何问题。
打开开发者选项之后,会看到HDC调试,通过WLAN调试。全部打开。这个时候你可能会在WLAN下看到一个IP,也可能没有看到。起初我无法显示IP,然后按照华为的文档,连接了一个不设置密码的WLAN。这个时候IP出现了。
在DevEco中选择Tools > IP Connect,可以输入IP地址连接。以为可以正常连接了吗?不是的。你会看到一个授权界面,然后不管如何点击都显示有应用遮挡了权限请求界面,无法点击。
接下来不管你做任何操作,这个授权点击都不会成功。解决的方法就是恢复出厂设置 (我是非常不情愿,但为了跑hello world没办法)。点击设置 > 系统和更新 > 恢复出厂设置。如果有人可以不需要恢复出厂设置就可以成功授权,那么恭喜!运气非常好。在恢复出厂设置之后,可以连接一个正常的加密WLAN来连接,没有任何问题。所以所谓连接一个不设置密码的WLAN是错误的。
成功连接之后,创建一个新的手表项目,在运行栏里可以看到华为watch3。
创建,配置,运行华为watch3应用 和安卓的真机调试对比,华为的步骤比较繁琐,参考官方文档https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404#ZH-CN_TOPIC_0000001057215892__section19238119191816。
在项目创建之后,需要进入File > Project Structure > Project > Signing Configs界面配置签名信息。这个时候会要求在AppGallery Connect 网页里创建对应的项目。
进入新建的项目,在左侧栏的最底下找到HarmonyOS应用。
点击HAP Provision Profile为应用创建一个Profile。注意应用名和包名要和IDE中创建的完全一样。
搞定之后,在签名界面重新连接就可以获得签名文件。
现在点击运行程序就可以了。
找不到libstdc++.so.5问题 下载libstdc++.so.5包到/usr/local即可
1. DBUtils 官方文档还是11年的,但还是非常简单好用。主要使用其中的PersistentDB 和 PooledDB两个模块。
1. PersistentDB 每当线程第一次打开数据库连接时,PersistentDB将建立一个与该数据库的新连接,该连接将始终用于此特定线程,不能被其他线程使用。当该线程调用close()后,该连接回到线程池,静静的等待这个线程再次调用它(其他线程无法使用这个连接)。该连接最终随该线程死亡而真正关闭。
2. PooledDB @singleton class TlcfDBconPool(object): def __init__(self): db_conf_dict = InternalCFG().get_datayesdb_conf self.pool = PersistentDB.PersistentDB(creator=MySQLdb, maxusage=5,host=db_conf_dict['host'], user=db_conf_dict['user'], passwd=db_conf_dict['passwd'],db=db_conf_dict['db'], port=db_conf_dict['port']) def get_db_connection(self): return self.pool.connection() 2. SqlAlchemy中的连接池 作为高级的ORM工具,SqlAlchemy本身就有连接池的
首先engine.connect()返回的是Connection object.
Return a new Connection object.
The Connection object is a facade that uses a DBAPI connection internally in order to communicate with the database. This connection is procured from the connection-holding Pool referenced by this Engine.
地图无法显示,情况如下:
解决办法:
在html文件中添加需要显示的省份的js文件:
<script type="text/javascript" src="https://assets.pyecharts.org/assets/maps/zhejiang.js"></script> 结果如下:
下载nginx和php镜像
$ docker pull php $ docker pull nginx 创建 Dockerfile文件, Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像 (个人创建在/var/lib/docker的phpdockerfile目录下)
$ mkdir phpdockerfile $ cd phpdockerfile $ touch Dockerfile Dockerfile文件中写入以下代码
FROM php:5.6-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv mcrypt \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd RUN docker-php-ext-install mbstring RUN docker-php-ext-install mysqli RUN docker-php-ext-install pdo && docker-php-ext-install pdo_mysql 创建镜像,**pdophp 代表新镜像名可自定义,.
Mac bash切换zsh 之后报 zsh: command not found:XXX 的解决方案 解决方案1.第一步2.第二步2.第三步 解决方案 将 bash shell 中 .bash_profile 全部环境变量加入zsh shell 中 .zshrc 配置文件里就好
1.第一步 在终端执行
vi ~/.zshrc 2.第二步 找到 “# User configuration”
在其下面添加下面内容
source ~/.bash_profile 2.第三步 在终端里执行
source ~/.zshrc 原文:https://www.cnblogs.com/DI-DIAO/p/12588406.html
java读取excel文件有相应的插件:jxl、easyexcel、poi
今天来讲jxl与easyexcel的实战!
jxl读取excel,只能是2003版的excel 读取2007 版的excel会报错
此时,如果你的excel是07版的,那么可以另存为03版的
jxl的应用 1.引入jar包
<dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.10</version> </dependency> 2.创建一个excel对应的实体类,类的属性对应excel的列(我这里起名为Demo)
class Demo { private String url; private String phone; private String contract_id; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getContract_id() { return contract_id; } public void setContract_id(String contract_id) { this.
解决方法:
1、因为知道是改过模块名无法启动的,所以猜测是因此导致编译有问题,所以尝试重新rebuild,使用Build→Rebuild Project。
但还没解决问题,怀疑是缓存问题。
2、使用File→Invalidate Caches/Restart...,选择Invalidate,清除一下缓存。
3、使用File→Project Structure,左侧选择Modules,点击减号移除有问题的模块,再点击加号重新导入该模块。
4、重新启动模块,发现问题解决。
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。
以电脑为例,时间设置24小时的方法是:
1、在电脑桌面,打开左下角的开始菜单,点开控制面板。
2、进入控制面板之后,切换成经典视图,这样更加清晰一些。找到一个叫做区域和语言选项的内容,双击进入。
3、进入之后,在区域选项这一界面中,可以看到在中文的右侧有个自定义选项,点击一下进入到具体设置。
4、进入后,会弹出一个新的界面,新界面的上部有一排菜单,其中的第三项叫做时间,选择时间。
5、点击时间之后,映入眼帘的就是时间的格式,可以看到此时此刻,的时间格式是tt:hh模式,这个就是带有AM,PM的模式。
6、在下拉菜单中,选择HH模式。
7、选择完毕之后,点击一下应用,然后点击确定。然后在之前的界面也需要点击应用和确定。
8、确定完毕之后,再看一下右下方的时间,它就会显示为24h的模式了。
电脑(computer,又称计算机)是一种用于高速计算的电子计算机器,被称为“20世纪最先进的科学技术发明之一”。电脑由硬件系统和软件系统所组成,具有进行数值计算、逻辑计算和存储记忆等多项功能。它的应用领域从最初的军事科研应用扩展到社会的各个领域,带动了全球范围的技术进步。
内容简介:
iwork学生作业在线系统,毕业论文,共63页,15707字,附任务书、开题报告、源程序、外文翻译等。
摘 要
进入21世纪这个空前发展的时代之后,迅速普及的计算机技术、数字化教学以及远程的在线式教学的风行,致使传统的教学模式发生了前所未有的改变,同时诸多的全新的话题也进入了人们的视线当中。数字化的普及十分迅猛,广泛的进入到各大院校的课程当中,线上作业成为一种全新的师生交流模式。
在现实生活中的教学活动中,教师批改学生上交的作业的形式主要有三大类型:一、书面修改,学生上交作业本,然后老师批改;二、文档修改,学生上交作业文档,老师使用存储设备进行批改;三、使用Email电子邮件批量下载学生上交的作业。这些形式都无疑加重了任课教师的工作量。作业在线系统作为一个全新的数字化管理系统,它将数字化作业的提交、批改以及反馈集于一身,在保证高效、快捷、方便的同时更具备了极高的安全性。
本次文档研究的内容主要是着重围绕——学生作业在线系统进行展开。本服务平台采用SpringMVC+hibernate技术构建了一个线上作业、课程设计的提交、批改和结果回馈系统的过程。【1】本系统主要目标是对于学生作业的信息化管理。其主要的功能包括:用户权限管理、教师功能管理、班委功能管理、普通学生功能管理等。
此次设计的内容主要是基于B/S模式,并描述了mysql、tomcat的概念及特点,SpringMVC的优越性及易扩展性、易维护性。系统的稳定性强,用户操作简便。【2】
关键词:学生作业在线系统;SpringMVC;B/S模式
目 录
摘 要IV
AbstractV
第一章 绪论1
1.1课题研究背景、意义1
1.2现有软件现状1
第二章 关键技术和相关工作2
2.1 jQuery EasyUI简介2
2.2 Spring MVC简介2
2.3 MySql简介2
2.4 Tomcat简介3
第三章 需求分析4
3.1功能需求分析4
3.2业务流程分析5
3.2.1前台用户发布并上交作业流程5
3.2.2注册流程6
3.2.3登录流程7
3.3数据流分析8
3.3.1作业发布、提交数据流图8
3.3.2用户管理中心数据流图8
3.3.3课程信息数据流图9
第四章 系统设计10
4.1系统总体功能结构10
4.2数据库模型设计11
4.2.1系统概念结构设计E-R图11
4.2.2系统数据库类图结构设计14
4.2.3数据库表详细说明14
第五章 详细设计与实现17
5.1 后台管理具体实现17
5.1.1后台登录界面17
5.1.2用户管理模块19
5.1.3学院/班级管理模块22
5.1.4作业管理模块23
5.1.5分组任务管理模块27
5.1.6课程管理模块29
5.2 前台平台具体实现31
5.2.1登录和平台首页31
5.2.2注册32
5.2.3发送邮件32
5.2.4作业管理功能35
5.2.5分组任务管理功能37
5.2.6用户中心界面40
5.2.7联系我们、历史操作记录界面41
5.2.8学生作业结果回馈、分析界面42
第六章 系统测试与维护43
计算机网络发展趋势、方向,网络专业新兴名词
未来计算机网络的发展趋势
摘要:计算机网络技术是目前计算机科学中发展得最为迅速的一门技术,把握该技术发展的方向是非常必要的。本文主要介绍当前网络四个方面的发展趋势,即接入技术、接入设备、高速传输、网络应用,并简单地介绍当前网络发展的几个热点方向和新兴产物,如语义网、人工智能、富互联网应用程序等。 关键词:网络、发展趋势、热点、新兴产物
随着现代社会的发展,网络的应用也进入新的时代。网络的变化,可以说是日新月异,很多从事于这方面的专家和技术人员在计算机网络方面的贡献给社会和人民带来太多太多的好处,未来我们将看到计算机网络的跟多新变化。计算机网络发展的基本方向是开放、集成、高速、移动、智能以及分布式多媒体应用。开放和集成是相辅相成的。开放指网络体系结构的开放和操作系统调用界面与用户操作界面的开放。开放的核心问题是标准问题,即各种不同厂家的计算机或网络产品能够按照统一的标准向高层提供相应服务和对低层进行服务调用,而不管这些产品在软硬件上的实现细节。这使得各种异构系统和产品能够相连和互操作。集成则是在开放的基础上,各种异构系统和产品能够溶于一个像Internet这样的全球性网络中,并能够根据用户的需要提供各种满足用户服务质量QoS需求的分布式多媒体应用。集成包括两个方面,即各种产品的集成和各种应用与服务的集成。例如电信网的话音传输服务、广播电视的电视与广播的各种节目服务、计算机网络的数据传输服务等正在被集成在一个网络上来提供给用户。
下面将从计算机网络的四个主要方面:接入技术、接入设备、高速传输、网络应用分别阐述其发展趋势。
宽带接入网技术
用户接入网(从本地电信局到用户之间的部分)是电信网的重要组成部分,是电信网的窗口,也是信息高速公路的“最后一公里”。随着计算机的迅速普及,网络技术的日益完善以及上网工具的不断涌现,Internet得到了飞速的发展。越来越多的用户通过电话拨号上网,使电话线路的话务量急剧增加,给电话网造成了巨大的压力;同时,由于电话网本身的限制,拨号上网的速度远远不能满足用户对网络带宽不断增长的要求。因此迫切需要一种高速的用户接入技术。虽然ISDN是一种综合了各种业务的网络,能够为客户提供一种数字解决方案,但由
我有一个问题,我的动态html正在被重新填充,当knockout.js从ajax调用中设置一个可观察数组时。当发生这种情况时,动态HTML被重新加载,导致其中的init函数执行两次并重新绑定其他所有内容。为什么我的html可观察重新绑定动态HTML?我会使用小提琴,但我有很多代码。动态HTML和knockout.js从Ajax重新绑定HTML请求
Ajax回调
app.viewModel.members.bracket.parts(response.Parts);
ko.applyBindings(app.viewModel.members, app.viewModel.members.container().find('> div:first').get(0));
集装箱
app.viewModel.members = {
container: ko.observable($('#container')),
html: ko.observable(''),
bracket: {
parts: ko.observableArray([])
}
};
动态HTML
app.members.bracket.init({
pools: @Html.Raw(Model.DivisionPools.ToJSON()),
teams: @Html.Raw(Model.DivisionTeams.ToJSON()),
parts: @Html.Raw(Model.Parts.ToJSON())
});
ALTER DATABASE YourDBName SET PARTNER SUSPEND
ALTER DATABASE YourDBName SET PARTNER RESUME
在学习getElementById()方法的过程中出现了这样一个问题,便想记录下来。分析问题之前,我们不妨先来认识一下getElementById()方法。getElementById()方法,接受一个参数;获取元素的ID。如果找到相应的元素则返回该元素的HTMLDivElement对象,如果不存在,则返回null。
我是这样来实现的:
HTML代码:从代码中可以发现,我已经添加了
测试div。DOM基础 测试div 123 JS代码:
var box=document.getElementById('box');//获取id为box的元素节点
alert(box);
执行结果:将HTML文件在网页中打开,弹出null的消息框。
正确的显示应该返回HTMLDivElement对象,为什么会出现null呢?从HTML代码中可以看到,它先执行地是JS,然后才执行HTML,显然是顺序的问题。原因找到了,自然就有应对的方案。在这里教大家两种解决办法:
1、将script调用标签移到html末尾。
改动HTML代码:
DOM基础 测试div 123 2、使用onload事件来处理
改动Js代码
window.οnlοad= function(){
var box=document.getElementById('box');//获取id为box的元素节点
alert(box);
};
以上两种方法都能正确返回HTMLDivElement对象。但还有一个显示的问题。火狐、谷歌等浏览器等都会显示[object HTMLDivElement],但唯独IE浏览器会只显示[object]。这是因为IE的所有对象都是以COM对象的形式实现的。
小结:
JS的知识点很碎。如果只是往前学而不加整理和总结。那么学着前面的知识,后面的知识就会忘掉。像上文总结的这样一个小问题,如果不记录总结,那么过不了多久就再也想不起来了。
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。
以电脑Windows7系统为例,设置桌面时钟的步骤是:
1、在电脑桌面右击,选择【小工具】。
2、在弹出的对话框里选择【时钟】即可。
电脑(computer,又称计算机)是一种用于高速计算的电子计算机器,被称为“20世纪最先进的科学技术发明之一”。电脑由硬件系统和软件系统所组成,具有进行数值计算、逻辑计算和存储记忆等多项功能。它的应用领域从最初的军事科研应用扩展到社会的各个领域,带动了全球范围的技术进步。
电脑的软件系统包括:操作系统、应用软件等。应用软件中电脑行业的管理软件,IT电脑行业的发展必备利器,电脑行业的erp软件。硬件系统包括:机箱(电源、硬盘、磁盘、 内存、主板、CPU-中央处理器、CPU风扇、光驱、声卡、网卡、显卡)、显示器、UPS(不间断电源供应系统)、键盘、鼠标等等(另可配有耳机、麦克风、音箱、打印机、摄像头等)。家用电脑一般主板都有板载声卡、网卡。部分主板装有集成显卡。
前景: 很多时候一些老的项目会用到公开的webService接口让我们去调用, 很多初学时会卡在入门依赖上 下面是一段正常的调用webService接口的代码使用的是axis1技术 public class CaClient { public static void main(String[] args) { try { String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl"; // 直接引用远程的wsdl文件 // 以下都是套路 ClassLoader.getSystemClassLoader().loadClass("javax.xml.rpc.ServiceException"); System.out.println(ClassLoader.getSystemClassLoader()); Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint); call.setOperationName("addUser");// WSDL里面描述的接口名称 call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE, javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型 String temp = "测试人员"; String result = (String) call.invoke(new Object[] { temp }); // 给方法传递参数,并且调用方法 System.out.println("result is " + result); } catch (Exception e) { System.
jsp关键代码:
BookInfo bi = (BookInfo)request.getAttribute("bi") ;
request.setAttribute("id", bi.getId()) ;
method="post">
value="
%>"/>
servlet关键代码:
if(actionUrl.equals("/update.do")){
String id =
(String)request.getAttribute("id");;System.out.println(id) ;
String
bookname = request.getParameter("bookname")
;System.out.println(bookname) ;}
执行结果:servlet可以取得bookname的值,但是id的值为null.
分析原因:用request.setAttribute()保存的数据只能在同一个请求的前提下取到,在不同的请求之间属性会重置。
解决方法:
(1)在form表单传值:
在form表单里加上
value="
%>"/>,在servlet中用request.getParameter取值。
(2)使用session会话机制:
在jsp页面设置session: session.setAttribute("id", bi.getId())
,在servlet中取值:String id =
(String)request.getSession().getAttribute("id") 。
(3)URL传值:
在form表单提交URL中传递参数:
action="update.do?id=
%>"
method="post">,servlet用request.getParameter取值。
总结:jsp向servlet传递参数有三种方法:form表单,session和URL传值
在电脑配置中,鼠标是不可缺少的配件之一,不过有些电脑新手用户并不会组装电脑,就连鼠标插在电脑哪里都不是很清楚,而且有时鼠标查好了,会出现usb接口没反应的情况,那么鼠标插在电脑哪里以及鼠标的usb接口没反应如何解决呢,接下来随小编一起了解下吧!
一、鼠标插在电脑哪里:
鼠标插在电脑哪里,其实鼠标插头很好找的,只不过有时你明明看到,确不知道这个就是鼠标的插口。在电脑主机箱后面都会有USB插口,台式电脑可分成两种接口,一是PS/2接口,就是圆口样式的,不过现在这种接口形式大多被淘汰了,属于老是电脑的借口。还有一种是USB接口,就是人们常说的“扁口”,现在大多数的鼠标都是采用这种形式的借口,特别是笔记本电脑,都是使用USB接口的比较多,那么你只要知道自己鼠标的接口是哪种,找到相应的接口,就能连接好了。
二、鼠标的usb接口没反应如何解决:
上文中小编为大家介绍了鼠标插在电脑哪里的相关知识,大家可以参考一下,接下来我们一起了解下鼠标的usb接口没反应如何解决的知识吧:
1、遇到鼠标usb接口没反应的情况也不需太着急,首先我们要做的就是检查下鼠标与电脑的连接是否正确,可以将插口进行拔插下,然后重新启动电脑,看看鼠标是否能正常使用,如果可以的话,那就说明这是因为线路接触不良或者没有插好导致的结果。
2、那么鼠标拔插,电脑重新启动之后,鼠标还是不能用,那么可以往这几个方面入手:
(1)、检查鼠标底部的指示灯闪烁是否正常,如果发现鼠标底部没有发光的现象,那么可以是因为鼠标线没有插好或者是鼠标借口有问题,严重的话,就是鼠标已经损坏了。
(2)、这种情况可以先检查鼠标接线是否正确,检查没有问题的情况下,指示灯还是不会亮,那么几乎可以断定鼠标损坏或者是电脑接口有问题。那么这时你可以找一个正常的鼠标来进行连接,看看是鼠标的问题还是电脑借口的问题,将好的鼠标接在电脑上,通过排除法检查,是那种原因引起的故障现象。
(3)、如果是鼠标的故障问题,那么可以更滑一个鼠标就可以了,而若是电脑借口出现故障,台式电脑的话可以重新购买一个USB鼠标,接USB接口使用,当然也可以购买一个PS/2-USB转换接口都可以。
鼠标插在电脑哪里,其实只要了解鼠标插口的模式,就能找到相应的接口,这还是挺简单的。以上关于鼠标插在电脑哪里以及鼠标的usb接口没反应如何解决的内容,大家可以参考下哦。
什么,装修还用自己的钱?!齐家装修分期,超低年利率3.55%起,最高可贷100万。立即申请享受优惠
PHP7.4.20编译时报错:
checking for zip archive read/write support... yes checking for libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0... no configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met: No package 'libzip' found No package 'libzip' found No package 'libzip' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBZIP_CFLAGS and LIBZIP_LIBS to avoid the need to call pkg-config.
JavaScript检查日期是否为工作日(1-5) 使用这个方法,你就可以检查函数参数是工作日还是周末;周一到周五为工作日,周六周天不是工作日。 代码片.
const isWeekday = (date) => date.getDay() % 6 !== 0; console.log(isWeekday(new Date(2021, 0, 11))); // Result: true (Monday) console.log(isWeekday(new Date(2021, 0, 10))); // Result: false (Sunday)
台式机无线网信号非常的差,玩什么都卡,那么我要怎么样解决呢?下面由小编给你做出详细的台式机无线网信号差解决方法介绍!希望对你有帮助!
台式机无线网信号差解决方法一:
在确保无线网卡的驱动程序都正确安装的前提下,给出如下建议:
1、无线网卡建议是插到前置的USB面板上,后置的话可能会影响信号的接收;
2、更换更大速率的无线网卡或是使用PCI网卡均可,但有一定几率并不会得到很好改善,建议慎选;
3、更换功率更大的无线路由器,毕竟如果无线路由器距离无线网卡过远,信号经过长距离传播和其他因素干扰,的确是会减弱很多;
4、使用网线直连,这是最稳定的办法。
台式机无线网信号差解决方法二:
1,检查下无线网卡的driver是否正确。
2,我不知道你的无线网卡是什么型号的,但现在的网卡至少有一根天线。
3,是否为经过调制的天线,无线网卡是工作在2.4G 频段的,天线也要对这一频段的很好的匹配性。
4,确保天线5-7mm周围不能有金属材料,这对天线的性能有很大的影响。
5,路由设置:现在都用802。11 g model ,有效距离是100M,你可以试下
台式机无线网信号差解决方法三:
目前市场上的无线路由120块左右的信号只有那么好,他不能算垂直距离
要算墙边和窗户有没阻隔,他信号穿透力只能在窗户那穿过来.还有你买的USB无线网卡肯定比较便宜的,接受信号能力弱.
1.不要关窗户
2.把你那台式电脑移到靠窗户边
3.去买好点的USB无线网卡
无壳,放入IDA自动跳到main函数
__int64 __fastcall main(int a1, char **a2, char **a3) { if ( a1 > 1 ) { if ( !strcmp(a2[1], "zer0pts{********CENSORED********}") ) puts("Correct!"); else puts("Wrong!"); } else { printf("Usage: %s <FLAG>\n", *a2); } return 0LL; } 条件明确,要求我们输入的字符串和如下字符串相同
zer0pts{********CENSORED********}
提交flag发现错误,显然没有那么容易;观察函数列表:
从sub_610到sub_795的一系列函数笔记碍眼,不妨一个个看一下,能够发现sub_6EA有着明显的逻辑:
__int64 __fastcall sub_6EA(__int64 a1, __int64 a2) { int i; // [rsp+18h] [rbp-8h] int v4; // [rsp+18h] [rbp-8h] int j; // [rsp+1Ch] [rbp-4h] for ( i = 0; *(_BYTE *)(i + a1); ++i ) ; v4 = (i >> 3) + 1; for ( j = 0; j < v4; ++j ) *(_QWORD *)(8 * j + a1) -= qword_201060[j]; return qword_201090(a1, a2); } 但当我试图用IDA查看该函数的交叉引用,会发现提示:
网络速度换算
单位说明:Kb/s表示千比特每秒,一般用于线路速度表示,KB/s表示千字节每秒,一般用于下载速度表示,b表示bit(比特),B表示Byte(字节),1Byte=8bit,故1KB/s=8Kb/s 。1Mb/s=128KB/s 、
4Mb/s=512KB/s 。
基础知识:
在计算机科学中,bit是表示信息的最小单位,叫做二进制位;一般用0和1表示。Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表示计算机中的一个字符。bit与Byte之间可以进行换算,其换算关系为:1Byte=8bit(或简写为:1B=8b);在实际应用中一般用简称,即1bit简写为1b(注意是小写英文字母b),1Byte简写为1B(注意是大写英文字母B)。 在计算机网络或者是网络运营商中,一般,宽带速率的单位用bps(或b/s)表示;bps表示比特每秒即表示每秒钟传输多少位信息,是bit per second的缩写。在实际所说的1M带宽的意思是1Mbps(是兆比特每秒Mbps不是兆字节每秒MBps)。
问题描述:
最近在项目中遇到了一个让人疑惑的问题,有一个发送函数需要传递void*类型的参数,我定义了char *buf = “abcdefg”;
然后将buf作为参数传递给了这个发送函数,但是函数返回值显示发送成功,但是另一端没有接收到数据。查找了好久,
最终我将char *buf = “abcdefg”,改为char buf[64] = “abcdefg”;然后再次传输,结果传输成功。
总结:
以后遇到这种情况可以直接分配具体的数组空间。
目录 1.前言
2.I/O端口位的基本结构
3.GPIO的工作模式(8种)
3.1 输入模式 - 浮空输入 3.2 输入模式 - 输入上拉 3.3 输入模式 - 输入下拉 3.4 输入模式 - 模拟输入 3.5 输出模式 - 开漏输出 3.6 输出模式 - 开漏复用功能 3.7 输出模式 - 推挽式输出 3.8 输出模式 - 推挽式复用功能 4.推挽输出和开漏输出的区别简述
4.1 推挽输出 4.2 开漏输出 1.前言 笔者在b站学习【正点原子】 手把手教你学STM32单片机教学视频 嵌入式 之 F103-基于新战舰V3/精英/MINI板 的时候,发现up主所述的GPIO工作原理较为详细。在此,我将 STM32中文参考手册(免费的官网就能下载,还有人在CSDN收费???) 与 up主【正点原子官方】的视频中所描述的GPIO工作原理,做一个书面化的整理(仅用于学习,错误之处还请大家指正)。
首先,在此介绍一个简单的概念,即 电平 通常用高低来描述,电压 通常用大小描述。
2.I/O端口位的基本结构 3.GPIO的工作模式(8种) GPIO的8种工作模式: 包括 4种 输入模式 和 4种 输出模式
◆ 4种输入模式:
① 输入浮空 GPIO_Mode_IN_FLOATING
Win10系统用户在使用管理员权限进行操作的时候,为了保证管理员账户安全一般都会进行密码设置,而有的用户想要对原有的密码进行修改时却发现无法修改,这使用户非常苦恼,那么Win10系统无法修改管理员账户密码应该怎么办呢?接下来下面请看Win10系统无法修改管理员账户密码的具体解决方法。
解决方法:
管理员账号可拥有更多的操作权限,也是系统安全的一道防线,有时用户会担心电脑管理员账号被别人知道后担心自己的系统安全问题,想要将其账户密码修改掉,可是却发现无法修改的问题,为此,接下来小编浅析win10管理员密码无法修改如何解决。
情况一:没有使用管理员账户登录
1、首先,你得确定你当前所登录的账户是不是管理员账户或者administrator账户,不然是没权限的就无法修改。
2、查看方式:控制面板--用户账户--管理其他账户 即可看到当前是否使用administrator账户。
如果不是管理员权限的话,可以这样操作:
1、按下win+s打开搜索,搜索cmd ,在命令提示符 上单击鼠标右键,选择“以管理员身份运行”;
2、输入 “net user administrator 密码“。密码是可以随你自己输入的,成功后会显示”命令成功”;
3、注销当前账户,登录administrator账户就可以输入你刚刚更改的密码了。
情况二:微软账户和administrator绑定了
1、可能已经绑定了,并且使用了微软账号登录,就是邮箱登录,如果这样,你修改本地的账号密码(admin)肯定是没用的,需要修改微软账号密码才行,登录微软官网,登录你自己的live账号,然后修改密码;
2、登陆地址如下:https://login.live.com;
3、这个改的密码就是微软账号的密码,修改之后我们就可以在win系统中使用新密码登录。
上述便是Win10系统无法修改管理员账户密码的解决方法,用户可以采取上面的方法步骤来进行操作,不再出现以上的情况。
最近项目中有这么个需求:
菜单栏滚动到顶部后固定在顶部,专业的名词叫吸顶。。这在移动端还是比较常见的。
看看效果:
下面直接看看代码喽,代码不多:
第一种方法思路:
写一个和菜单一模一样的菜单,放在窗口顶部隐藏,当菜单滚动到上方时,就显示出来,反之隐藏。
MainWindow1.xaml如下:
<Window x:Class="wpfcore.MainWindow1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:wpfcore" mc:Ignorable="d" Title="MainWindow1" Height="450" Width="800"> <Grid> <ScrollViewer ScrollChanged="ScrollViewer_ScrollChanged"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="200"/> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid Grid.Row="0" x:Name="banner"> <Image Source="D:\bizhi\国漫\2-9.jpg" Stretch="UniformToFill" HorizontalAlignment="Center" VerticalAlignment="Center"/> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="White" Text="这是顶部Banner"/> </Grid> <StackPanel Grid.Row="1" Panel.ZIndex="100" x:Name="menu" Orientation="Horizontal" TextBlock.FontSize="18" Background="LightBlue"> <TextBlock Text="首页" Margin="10"></TextBlock> <TextBlock Text="编辑" Margin="10"></TextBlock> <TextBlock Text="视图" Margin="10"></TextBlock> <TextBlock Text="调试" Margin="10"></TextBlock> <TextBlock Text="WPF UI" Margin="10"></TextBlock> </StackPanel> <Border Height="
现在有些笔记本刚买来的时候会有自带的独立显卡和集成显卡,有些朋友在买了笔记本后并不想玩游戏,这时候他们就有了一个疑问不玩游戏独立显卡有什么作用呢?如果不玩游戏需要选择独立显卡吗?小编在这里就给大家带来电脑独立显卡的作用。
具体如下:
1、独立显卡是指将显现芯片、显存及其有关电路独自做在一块电路板上,自成一体而作为一块独立的板卡存在,它需占用主板的拓展插槽 (ISA 、 PCI 、 AGP 或 PCI-E) 。
2、独立显卡通常又被大家称为独显,是独立存在在集成版上的, 并且在逐渐上有自个的独自接口,这种显卡是不会占用体系中的内存的,具有独立显现的才能,在技术上比集成显卡领先。
3、独立显卡在功能运作上也是十分的好的,独立显卡独来区分能够分为内置和外置。独立显卡和集成显卡的差异主要是接口方法不一样和处理功能不一样。
4、独立显卡是插在主板上的一个硬件,包含有显示芯片和显示内存,它最主要的优点在于:本身带有独立显存,不会占用系统内存拥有强大的图像处理能力。
5、独立显卡自带显存,无需占用系统内存,缓解CPU的使用率,提高系统的运行速度。
6、可以收看高清视频,对于某些VC-1、H-264编码的视频进行硬件解码,提升视觉效果,看大片更爽。
7、个别显卡具有影响采集功能,例如ATI的All In Wonder系列,可以接受电视信号。
以上就是不玩游戏独立显卡的作用,一些不玩游戏的朋友可以配置一块入门级的显卡就可以了,或者集成显卡也是够用了。希望对您有帮助。
目前运营、合规、审计、监管系统,组成了银行、非银等金融机构的风险控制系统。好的风险模型一定是架设在一套优秀的控制系统上的。
当然对于头部的一些商业银行,风控系统经过多次迭代,在过去的十几年间取得了很大的发展,成为商业银行体系中必需的一个重要组成部分。当然有好的,就有发展稍微缓慢些的。我也见到过有部分机构仍处在规则+数据库(RDB)的初级阶段。工作模式孤立、滞后,对风险的描述碎片化、局部化,离全面的、动态的以及关联式的风险工作模式还有不小的距离。
建设一个成功的风控系统是需要了解银行业务流程、IT系统、数据结构、风险特征、复合数据分析技术等内容的,我国银行风控系统主要还是对部分系统数据的单一分析。系统的落后,影响了风险管理的精确性、全面性及时效性。
我们会在后续的内容中,就上面所提到的业务流程、IT系统、数据结构、风险特征、复合数据分析技术等所有模块,逐一详细阐述。本文先就各位比较关注的风控业务流程,跟大家谈谈,风险的业务包括哪些内容,怎么跟IT系统交互。
在整个风控的内容主要包括以下模块:
一.产品设计阶段
产品设计阶段,我们需要设计产品利率、期限跟开放客群与合作方式等内容。
比如关于某互联网小贷产品,其设计内容如下——
立案申请部门:PMO
涉及业务部门:营销,产品,信贷管理,运营,财务,IT,营运风险,法务,客户服务等部门
产品设计目的:建立互联网小额快速产品的运营模式以及为搭建互联网小贷风控模型奠定基础。
目标客群:持有信用卡、具可核实的社保/公积金信息、具可核实的大专以上学历、居住地在选定的一二线城市,在职超过 6 个月的受薪人士。
产品规划:
(1)贷款额度:最高 3 万元(件均1.5 万)
(2)期限:12 个月
(3)月利率:1.12%
(4)还款方式:等额本息
(5)总放款额:3000 万(2017 年 11 月-2018 年 3 月);后续依据 3个月检视结果而定;
3. 合作模式:
(1)资金方:作为合作的主导方。除了提供信贷资金外,在产品设计、授信政策、审批标准、IT 解决方案等方面具有决定权;
(2)渠道方:作为资金方线上业务的合作伙伴,在线上营销、风险控制以及信息科技等三方面提供支持与服务。
线上营销:作为资金方的营销代理商,以资金方的名义进行网上营销,将客户引导至线上获客入口;
风险控制:作为资金方的风险识别与评估委外机构,为资金方进行黑名单排除、欺诈识别、体制外负债查询,并针对客户的还款意愿与还款能力进行初步的分析;
信息科技:作为信息科技服务商,为资金方提供进件的IT产品和后续维护服务。
其定价策略、业绩核算等的内容,本文暂略,其中的业务流程,一般也会由产品经理设计,具体内容如下:
二.贷前审批阶段
客户进入贷款平台完成新用户注册并授权同步注册为贷款客户,完成实名认证(包括但不限于四要素认证或二要素认证+活体识别),填写个人资料信息(如工作信息、联系人信息等),并在完成包括但不限于《个人信用报告授权》《个人信息授权》等相关合同的授权及签署后,提交额度申请。
整个贷前的流程可以参考我们之前发布在知识星球中的内容:
部分细则内容展示如下:
2.1.贷款反欺诈识别阶段
2.2.贷款信用审批阶段
2.3.额度授信
基础额度授信:
客户提交额度申请后,系统结合客户提交的个人资料及第三方数据等信息,根据风险授信规则自动或人工评估客户授信额度。
提现额度:
客户获得基础额度后,根据审批部制定的提现额度规则对用户开放提现额度。
2.4.额度激活
客户获得额度需要激活后才能正常使用,激活额度前,需要设置交易密码,绑定扣款银行卡,部分场景下客户也可先跳过银行卡绑定环节,完成交易密码设置后签署用户服务合同,随即激活额度。
2.5.额度使用
场景消费:客户在合作消费场景上进行商品选择,并使用授信额度进行商品购买时,系统结合客户当前设备环境、交易场景交易阈值等信息,根据风险交易规则自动评估交易结果,如交易通过,系统自动触发扣减额度指令。
现金借款:客户直接使用授信额度进行现金借款,并在明确如旅行、教育等消费用途后,根据产品放款规则进行自动或手动放款。
2.6.放款
受托结算
(1)自动放款
客户在授信额度范围内进行场景消费的,系统触发放款指令,自动打款至合作方指定账户。
(2)手动放款
①客户在授信额度范围内进行场景消费的,运营部触发放款指令,系统生成对应的放款文件邮件推送至财务部。
②财务部进行放款文件复核,复核无误后放款至合作方指定账户。
直接结算
(1)自动放款
客户在可借额度范围内进行现金借款的,在完成借款合同的签署后,系统触发放款指令,自动放款至客户指定账户。
(2)手动放款:
①运营部触发放款指令,系统生成对应的放款文件邮件推送至财务部。
我在移植到IAR的过程中,编译出了下面的问题:
Error[Pe028]: expression must have a constant value 出现问题的地方是一个数组的定义: lv_color_t buf[useful_data]; 而定义数组的长度useful_data是一个变量,上面出错的原因是IAR要求定义数组的长度是一个常数。 uint32_t useful_data = (lv_area_get_width(&mask_com) >> us_shift) * sizeof(lv_color_t); 上面这句是作者写的,我不能改变库函数,这样工作量就大了,能不能有一个简单的办法呢?
经过不断的翻阅资料,终于找到一个好的方法,这个跟C语言的编译有关,解决方法是:
在options->C/C++ Compiler的C dialect 选中 Allow VLA即可。
————————————————
版权声明:本文为CSDN博主「信阳茶农」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kwx618/article/details/79111103
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。
话题:开电脑为什么要先打开显示器,再开主机?回答:因为打开显示做好提前预热,液晶显示器靠的是LED发光能,然后再开主机通过数据连入液晶使画面清晰度达到最佳
参考回答:人家怕你上次忘了关机 让你先打开显示器看一看这种事我会说么话题:为什么开电脑时要先开显示器再开主机?回答:开主机的时候会占用电路上的主要功率换句话说 主机的功率比较大启动的时候需要的电能也就大由于显示器的打开也会消耗一定的电能 如果在主机启动的时候同时又开显示器 这必然
参考回答:..其实是因为开显示器的时候瞬间电流波动很大,如果先开主机的话,有可能照成主机内部的硬件损坏(只是有可能,现在的电源一般都能过滤掉瞬间波动)关机要先关主机也是同样道理话题:为什么开电脑的时候要先开显示器再开主机?回答:良好的个人使用惯对电脑的影响也很大。所以请大家正确地执行开机和关机顺序。开机的顺序是:先外设(如打印机,仪,UPS电源,Modem等),显示器电源不与主机相连的,
参考回答:那么开机的自检就很重要在电脑开机时要先开显示器再开主机..,那你就更该在不用的 时候把显示器的电源关了,后开显示器。 其中那些平时我们都不怎么太在意,所以开机到底是先开哪个,也就没什么了,在电脑关机时要先关主机再关显示器,这一开、关机顺序对老显示器来说尤为重要,但对于近几年生产的显示器来说就不是很重要了,甚至有的显示器在开机时的顺序正好相反。 所以平时开机不必要太在意先开哪个 在过去的电脑来说原则是先开外部设备(显示器。只有系统或硬件出问题,需要找到一些相关原因的话,如果先开主机后开显示器,但多数情况下用上述顺序进行还是有利无害的。 先开显示器,屏幕上会立刻显示一些硬件及系统的相关,还有自检,打印机等),以使用寿命。如果你先开主机电源,开显示器的瞬间电路的会有可能烧毁电源或者主板 但现在的软硬件技术都已经相当完善了,先开什么都无所谓,甚至你可以随时把显示器关了来省电,而且如你用的是液晶显示器,那么前面的有些就有可能跳过,是因为,当你一按下机箱的电源开关时..回答者:xuanmao - 探花 十一级 -20 21,你也就看不到了。所以为了能看到全部的开机,要先开显示器后开主机电源,最后开主机 因为当时的硬件技术和作系统还不完善,那时的显示器是在主机上供电的话题:为什么开机时要先开显示器再开主机?回答:因为怕机器检测不到外设(这里指显示器)造成启动故障~其实这样做也没多大必要。先开显示器,是因为,当你一按下机箱的电源开关时,屏幕上会立刻显示一些硬件及系统的相关,
参考回答:开机的顺序是:先开外设(如打印机,仪,UPS电源,Modem等),显示器电源不与主机相连的,还要先打开显示器电源,然后再开主机;关机顺序则相反:先关主机,再关外设。其原因在于尽量地减少对主机的损害。因为在主机通电时,开关外设的瞬间,会对主机产生较强的击电流。话题:开电脑是应该先开主机还是显示器呢,为什么回答:因为显示器作为计算机的外部设备,它在启动以前主板不会识别到它的存在,先开显示器,在开主机,这样就可以让主机很容易找到你的外设,而先开主机再开显示器会导致主板的电流波动~~长期如此作,损坏电脑硬件。关机时的作应该相反,先关主机再关显示器~~这时的作对主板的影响较小。因为开机是给主板加电压的过程,而关机是给主板减压,释放电压的过程。
参考回答:先开显示器后开主机话题:计算机开机时,要先开显示器再开主机的原因是什么?回答:良好的个人使用惯对电脑的影响也很大。所以请大家正确地执行开机和关机顺序。开机的顺序是:先外设(如打印机,仪,UPS电源,Modem等),显示器电源不与主机相连的,还要先打开显示器电源,然后再开主机;关机顺序则相反:先关主机,再关外设。其原因在于尽量的减少对主机的损害。因为在主机通电时,关闭外设的瞬间,会对主机产生较强的击电流。关机后一段时间内,不能频繁地开、关机,因为这样对各配件的击很大,尤其是对硬盘的损伤更严重。一般关机后距下一次开机时间至少应为10秒钟。特别注意当电脑时,应避免进行关机作。如:计算机正在读写数据时突然关机,很可能会损坏驱动器(硬盘,软驱等);更不能在机器正常时搬动机器。关机时,应注意先Windows作系统,关闭所有程序,再按正常关机顺序,否则有可能损坏应用程序。当然,即使机器未时,也应尽量避免搬动电脑,因为过大的震动会对硬盘、主板之类的配件造成损坏。话题:开电脑时,是先开显示器呢还是先开主机呢?回答:先开显示器后开主机开电脑时,是先开显示器然后开主机 理论上是先开外设,再开主机,先关主机,再关外设。 原因是因为任何设备在接通电源会有较强的击电流,如先开主机的瞬间,较强的击电流会对主机内的电元件造成击,再开显示器,又会造成一次击,长此以往,会影响主机内的电元件的使用寿命,所以应先开外设,再开主机,减少击的数,从而使用寿命。
参考回答:先开显示器,在开主机. 关电脑时是先关电脑在关显示器.开机时应先开显示器等外设,然后再开主机,如果将程序颠倒,显示器打开时产生的瞬间会对主机内的各部件产生微弱的击。关机的时候要跟开机相反,先关主机,再关外设。话题:为什么我的电脑要先开显示器再开主机?回答:电脑本来就是要先开显示器后开主机的啊,lz这都不知道啊、 对啊,是啊,但是你的电脑现在不行,那你就没必要那样了啊,那我问你你的显示器是crt的还是lcd的? 基本上判定是显示器信号接收模块问 可以判断是信号接收处理模块的问题,如果你的显示器在保的话就找他修,应该是里面潮湿导致的 \ 那有可能是你显卡的问题了,可能是你的显卡会检测监视器状态,开机检测不到即切换到监视器休眠模式。
参考回答:LZ这种情况,应该是显示器开机后没找到信号源,然后进入省电模式的待机状态,而且在待机状态下,显示器不自动搜索讯号。 先开显示器再开主机 是用CRT显示器时留下的传统,因为CRT显示器启动时用的峰值电压比较高,同时开的用电器多了,开启瞬间又可能让电路短路。话题:开电脑时先开显示屏还是先开主机?回答:应该是先开显示器再开主机,当时主要是考虑到CRT显示器在开机的瞬间电压波动比较大,为防止电压波动对电脑主成影响,所以要先开显示器,从现在来说,支持DVI与AGP的显卡,如果你用DVI
参考回答:先开外部设备!包括显示器、音响、打印机等设备!所以是先开显示器后开主机。目的是放掉主机驻留的静电,防止由于开机时候电流电相遇烧坏主板等硬件!这也是最基本的常识!四楼的!你也不嫌误人!!#24、#35话题:电脑是先开显示器还是先开主机回答:开机时,先开显示器后主机;关机时,先主机后显示器! 这一开、关机顺序对老显示器来说尤为重要,但对于近几年生产的显示器来说就不是很重要了,但多数情况下用上述顺序进行
参考回答:显示与电脑主机接在一个板上,避免每次去按显示器,这样方便了,然后再按电脑开关,板开关一按显示器就启动了
操作系统 第九章 接口——用户接口 系统安全
命令解释程序:命令解释程序的主要功能;
系统调用:①系统调用与一般过程调用的不同之处②系统调用的参数传递方式③系统调用的处理步骤
命令解释程序的主要功能:
(1)等待用户输入。
(2)接收并识别命令。命令以回车符结束后,由终端处理程序提交给命令解释程序,由命令解释程序分析其合法性。
(3)执行相应的命令处理程序。内部命令的处理程序已经包含在命令解释程序中,直接进行处理;外部命令必须由命令解释程序
将命令指定程序装入内存,为之创建一个子进程后,由子进程完成相应的工作。
①系统调用与一般过程调用的不同之处:
(1)运行在不同的系统状态。一般的过程调用,调用过程和被调用过程运行在相同的状态——系统态或用户态。
系统调用的调用程序运行在用户态,被调用程序运行在系统态。
(2)通过软中断进入。
(3)返回问题。一般过程调用在被调用过程执行结束后,将直接返回到调用过程继续执行。系统调用采用抢占调度方式,在被调用过程执行后,必须对系统中所有要求运行的进程做优先权分析,只有当调用进程的优先权最高时,才返回到调用进程继续执行,否则将引起重新调度。
②系统调用的参数传递方式:
(1)将系统调用号和参数作为操作数直接包含在系统调用指令中。
(2)将系统调用号和参数存放在操作系统指定的寄存器中传递给系统。
(3)将参数存放在一张参数表中,将指向该参数表的指针作为系统调用指令的操作数或存放在每个指定的寄存器中传递给系统。
③系统调用的处理步骤:
(1)系统产生软中断(或陷入),由硬件进行现场保护,并通过中断向量转向系统调用总控程序,处理机的状态转系统态。
(2)系统调用总控程序进行系统调用的一般性处理,根据调用号和系统内部的系统调用入口表转入相应的系统调用处理子程序。
(3)在系统调用处理子程序执行完后,恢复被中断进程或新进程(若重新调度)的CPU现场,再返回被中断的进程或新进程,继续往下处理。
python读取数据时出现:UnicodeDecodeError:: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid contin 解决方法一:
f = open("xxx.csv",'r',encoding='UTF-8')
解决方法二:
f = open("xxx.csv","rb")
with open('article.txt','rb') as f: # 打开新的文本 text_new = f.read() # 读取文本数据
本文主要介绍相关的RGB-D数据集,并完成其搬运工作。
目录 1. ScanNet数据集1.1 获取数据集1.2 解析数据集1.2.1 2D数据1.2.2 scannet_frames_25k 数据 1.3 数据集分割 [2. SUN RGB-D 数据集](http://rgbd.cs.princeton.edu/)2.1 获取数据集2.2 解析数据集 [3. NYU-Depth V2数据集](https://cs.nyu.edu/~silberman/datasets/nyu_depth_v2.html)3.1 获取数据集3.2 解析数据集 4.TUM数据集[5. SceneNet RGB-D数据集](https://robotvault.bitbucket.io/scenenet-rgbd.html)参考资料 1. ScanNet数据集 1513个采集场景数据,21个类别的对象,其中,1201个场景用于训练,312个场景用于测试。
该数据集有四个评测任务:3D语义分割、3D实例分割、2D语义分割和2D实例分割。
ScanNet is an RGB-D video dataset containing 2.5 million views in more than 1500 scans, annotated with 3D camera poses, surface reconstructions, and instance-level semantic segmentations. To collect this data, we designed an easy-to-use and scalable RGB-D capture system that includes automated surface reconstruction and crowdsourced semantic annotation.
1、保存之后经常丢东西
如果你直接点击保存或者另存为,这个文件发给别人后往往会缺失东西,正确的做法是:点击保存工程(包含资源)。
工程=项目文件+材质+贴图+···,如果你只点击保存,那只有文件是保存下来的,当发给别人时,会丢失材质、贴图那些东西。
如果你点击的是保存或者另存为,那么发给别人后,这些贴图就会丢失。所以发送到其他电脑的工程需要点击保存工程(包含资源)。
2、选择导入/出文件格式出问题
1)OBJ格式:
在栏目包装中,使用频率最多的就是OBJ格式了,这种格式被称为模型通用格式,能实现模型通用,可以在各类软件中互导,甚至连AE也可以。
如果你还想导出动画、材质的效果,那就使用FBX格式,OBJ格式只能导模型,FBX格式能导的东西比较多,不过它只能在三维软件中互导。
如果你需要MAX和C4D互导,这里介绍两款互导插件:MAXtoC4D、C4DtoMAX。
2)AI格式,大家都知道画logo都是用AI,但是把它导入到C4D需要注意一点,就是AI文件得另存为一个低版本(3或8版本)的,不然导入会失败。
如果你C4D中安装了CV-ArtSmart插件,那么它支持全部AI版本格式。
3、常用的快捷方式
在C4D里面的复制是:按住Ctrl键往下一拽。(Ctrl代表的就是复制)
移动视角的时候需要注意,C4D默认是以聚点为中心旋转和推移。
按住Alt键时,点击鼠标左键可以移动视角:
按住Alt键时,右键是推拉视图:
按住Alt键时,中键是移动视图:
还有一个比较方便的快捷键是:点击鼠标中键可以直接调出四视图,单独点击F1、F2、F3、F4可以看到具体的某个视图。
另外,C4D是用ERT快捷键代替移动、旋转和缩放的,在MAX中一般是用WER,不过这个可以根据自己的习惯去设置的,我就不多说了。
如果你在操作中发现快捷命令不能使用或者使用错位,比如点E移动不了,变成缩放了,有可能是因为你的其他软件和输入指令冲突了,这时候只要依次在小键盘打出0123456789,一般就可以恢复正常了。
4、帧率设置要按照要求进行变化
因为国内早期电视使用的是Pal制,Pal制使用的帧速率是25帧,这个传统一直延续至今。
目前国内普遍都是25帧/秒,但是具体情况要看客户需求,这点需要大家记住。
如果需要改帧率,可以点击(Ctrl+D)在工程设置中进行操作。备注:渲染设置的帧速率最好与工程设置匹配,这个以后再讲。
5、即使不渲染也能看大致效果
在R17以上版本中,新增了OpenGL预览选项,但是OpenGL对硬件有要求,如果你硬件过旧,则不能正常使用这个功能。
这里只需要勾上就好,如果你觉得视图预览的效果有锯齿,那可以把抗锯齿调高点,但是调得比较高会很卡,建议还是不要调。
比如,给一个球体上材质,如果不用OpenGL,看到的效果就是这样的:
但是如果打开了OpenGL,就可以直接看到大致效果。
在C4D R19版本中,新增了PBR流程,它可以实现和E3D一样实时预览反射和景深等效果。
6、设置自动保存,防止软件崩溃
这个非常重要,因为C4D在渲染的时候非常吃CPU,时常会导致软件崩溃。这个不仅是C4D,AE同样也要设置。
自动保存的时间没必要设置成5分钟,其实20分钟就挺合理的,下面的“限制”指的是最多存几份,如果超出了限制会自动覆盖前面的文件。
接下来再讲一下,如何避免CPU占用过高导致软件崩溃:在C4D渲染器设置中可以自定义渲染线程,限制CPU满载运行。
也可以在任务管理器中,设置软件相关性,降低软件对CPU的使用。
7、按Shift是以整数单位移动
比如旋转物体的时候(角度精确到小数点后一位),如果想调节某个整数度数,手动操作很不容易。
这时只需要按住Shift,就能以整数单位进行调整了。
整数单位的数值可以在建模设置(快捷键shift+m)的量化中进行设置。
8、打开容差选择再进行框选
在三维软件中,框选比实时选择用起来更加方便。
但是,如果直接框选,你会发现这样选不了线和面。
你必须把要选的部分全部框住才可以,这样其实很麻烦。
这时候只需要把右边界面的“容差选择”勾上。
只需要触碰到,就可以进行选择了。
9、不要急着把模型C掉
这里的C掉是“转为可编辑对象”,也就是红框那里。
C掉模型之前要先把该做的都做了才行,不要等到最后再改。
10、对齐物体
工作中通常需要把物体移到另一个物体上,来回移动XYZ很麻烦,然而我们可以直接用父子级,把要移动的物体作为子级,坐标全归0,就快速对齐到父级啦。
或者:选中子级—角色—命令—复位PSR
11、不用C掉也能点线面编辑
把修正工具作为物体子级,就可以对点线面进行编辑了,它就像一个原始模型的保护器,再也不用转化为可编辑模型(C掉),担心撤不回去了。
12、样条对齐点
为了让样条的点保持平行对齐,框选需要调整的点,选择缩放工具(T键),先点缩放的点再按住shift,缩至0%即可。
13、快速找到物体
当场景里有很多物体和分组,怎么快速找到物体层呢?在场景中选择物体——然后单机对象面板空白处——按S键,该物体层就会被打开,如果再按一下S键还能把该物体最大化显示。
14、布尔加倒角
布尔属性里勾上创建单个对象,勾上隐藏新的边,勾上选择交界,然后给一个倒角变形器,放在一个组里,你会发现所有的线都被倒角了,然后在倒角选集输入字母I,就只有布尔的地方有圆角了,不用C掉选择外面一圈慢慢调了。
15、挤压倒角选集加材质
这个技能厉害了(反正我看教程之前不知道),虽然我也不知为什么是C和R,大概是Cap和Roud吧。总之在做挤压对象的时候,材质选集里输入C1和C2分别是给前、后的封顶加材质,R1、R2是分别给前、后圆角加材质(C和R一定要大写)。
16、点线面之间的切换
建模的时候总是会进行点线面的调节,在点、线、面模式下,先选择一个点或线或面,然后按住Ctrl键,再点击其他模式就可以切换,然后按回车键的话,可以三者之间来回轻松选择。
17、选点的时候,如果方向键挡住点,可按Alt+D键隐藏/显示
阿里云盘小白羊版,拥有强大的网盘存储功能,能够轻松实现高速下载,秒速上传大文件,以及分享秒传链接,满足用户的文件存储需求。而且与官方版相较而言,该版本不仅有着官方版的所有功能,还在其基础上加入了许多独有的功能,例如所增加的新建秒传链接的功能,可以选中任意一个文件轻松创建一条秒传链接,无需等待,可以设置加密及备注,但生成后的链接必须在软件内才能使用。当然,小伙伴们肯定还是关注下载限速问题,在阿里云盘第三方小白羊版中可以完全放心,完美实现阿里云盘的高速下载特性,能够榨干你的带宽,为你提供高效、便捷的网盘资源下载服务,除此之外,阿里云盘小白羊版还支持在线预览,一键即可享受原画质量的观影体验,特别的香,总的来说,略胜一筹,绝对妥妥的网盘下载神器呀,相信不少用户都会喜欢。
2021年6月21日 已完成功能:
1.支持 扫码登录/Cookie登录
2.支持 阿里云盘基本功能(列出文件/重命名/移动/回收站/收藏夹/在线解压)
3.支持 在线预览全格式原画视频(非转码),在线预览图片、文本
4.支持 批量下载文件/文件夹,多文件同时下载,支持断点续传,可以稳定满速下载
5.支持 批量上传文件/文件夹,多文件同时上传,支持文件秒传,支持断点续传
6.支持 保存别人通过秒传链接分享的文件,支持导入115秒传链接的文件
7.支持 Windows / MacOS 双系统
8.支持 复制文件到(官方只有移动到),支持批量重命名
9.支持 管理相册,支持相册内文件和网盘内文件互相复制/移动
开发中功能:
保存阿里云盘分享链接,保存115网盘分享链接
阿里云盘小白羊版 v1.6.21版:https://sourl.cn/usiJsb
ArcMap 如何打开.gdb文件 一、把.gdb文件导入ArcMap中1、先打开catalog面板2、接着点击 operation: Connect To Folder 按钮把.gdb的文件导入进arcmap3、把你需要的图层拖到Table Of Contents 中 二、发布地图服务File -> Share As -> ServiceService Editor -> Cadhing非切片服务切片服务先把实现创建的.xml文件导出进来把事先创建的.xml文件导出进来后,根据自己需求选择等级 一、把.gdb文件导入ArcMap中 1、先打开catalog面板 2、接着点击 operation: Connect To Folder 按钮把.gdb的文件导入进arcmap 3、把你需要的图层拖到Table Of Contents 中 二、发布地图服务 File -> Share As -> Service Service Editor -> Cadhing 非切片服务 切片服务 先把实现创建的.xml文件导出进来 把事先创建的.xml文件导出进来后,根据自己需求选择等级
需要用到的知识点有:
1、认识线条: 1.1画布栅格及坐标空间
(1)canvas元素默认被网格所覆盖。通常来说网格中的一个单元相当于canvas元素中的一像素。 (2)栅格的起点为左上角[坐标为(0,0)]所有元素的位置都相对于原点定位。
(1)canvas元素默认被网格所覆盖。通常来说网格中的一个单元相当于canvas元素中的一像素。 (2)栅格的起点为左上角[坐标为(0,0)]所有元素的位置都相对于原点定位。
1.2线条相关属性及方法
moveTo(x,y) 把路径移动到画布中的指定点,不创建线条
lineTo(x,y) 添加一个新点,绘制一条从当前位置到指定新点(x,y)位置的直线。
strokeStyle 设置或返回描边颜色
fillStyle 设置或返回填充颜色
lineWidth 设置或返回当前的线条宽度
lineJoin 设置或返回两条线相交时,所创建的拐角类型
lineCap 设置或返回线条的结束端点样式
1.3描边与填充
stroke() 描边已定义绘图(路径)
fill() 填充当前绘图(路径)
2、canvas绘制路径: beginPath()
新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径。生成路径的第一步叫做 beginPath()。
closePath()
闭合路径之后图形绘制命令又重新指向到上下文中。不是必需的。
3、绘制阴影: shadowColor 阴影颜色
shadowOffsetX X轴偏移
shadowBlur 模糊度
shadowOffsetY Y轴偏移
绘制不规则六边形以及其中几条边的阴影具体代码如下:
文章目录 一、HTTP 在网络各个层级的传输过程二、HTTPS 工作流程1、中间人篡改服务器下发的数字证书2、中间人冒充服务器端 三、HTTPS 弊端 一、HTTP 在网络各个层级的传输过程 应用层 : 在客户端浏览器 , 即应用层 , 生成 HTTP 请求报文 , 如下 :
GET / HTTP/1.1 Host: rucfd.ruc.edu.cn Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 If-None-Match: "b7f-5b575595fe630-gzip" If-Modified-Since: Wed, 02 Dec 2020 06:28:18 GMT 如果只有 HTTP 请求报文 , 是无法将该报文准确送达 Web 服务器的 , 无法完整网络传输 ;
Label 灵活变换求和次序的普通莫比乌斯反演
Description 给定 T ( T = 1 0 4 ) T(T=10^4) T(T=104)组 n , m ( 1 ≤ n , m ≤ 1 0 7 ) n,m(1\leq n,m\leq 10^7) n,m(1≤n,m≤107),求:
∑ i = 1 n ∑ j = 1 m [ ( i , j ) ∈ p r i m e ] \sum_{i=1}^{n}\sum_{j=1}^{m}[(i,j)\in prime] i=1∑nj=1∑m[(i,j)∈prime]
Solution ∑ i = 1 n ∑ j = 1 m [ ( i , j ) ∈ p r i m e ] \sum_{i=1}^{n}\sum_{j=1}^{m}[(i,j)\in prime] i=1∑nj=1∑m[(i,j)∈prime]
Label 经典莫比乌斯反演转化 g c d ( i , j ) gcd(i,j) gcd(i,j)(P3768弱化版)
Description 给定两个正整数 n , m ( n , m ≤ 1 0 7 ) n,m(n,m\leq 10^7) n,m(n,m≤107),求
∑ i = 1 n ∑ j = 1 m l c m ( i , j ) \sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j) i=1∑nj=1∑mlcm(i,j)
Solution ∵ \because ∵ ∑ i = 1 n ∑ j = 1 m l c m ( i , j ) = ∑ i = 1 n ∑ j = 1 m i j ( i , j ) \sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)=\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{(i,j)} i=1∑nj=1∑mlcm(i,j)=i=1∑nj=1∑m(i,j)ij
例如 在公交管理系统中规定营运车辆都隶属于某个具体的公交线路。因此应在车辆表设计一个字段,该字段与线路表的主键 lineID 的数据类型和长度大小应完全一致,并且值也参照线路表中的主键值。 这种参照其他表中主键的字段称为外键。
参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系。
参照完整性相关术语 从表:含有外键且参照其他表的表,如车辆表。从表亦称作“子表”或“参照表”。
主表:被其他表参照的表,如线路表。主表亦称作“父表”或“被参照表”。
外键:从表中的参照列称为外键,外键名与被参照的主表中的主键数据类型应完全一致,但可以不同名。如车辆表中的字段“线路”。
被参照列:主表中的被参照列通常为主表的主键(也可以为唯一键)。如表的主键 lineID 为被参照列。
使用 Navicat for MySQL 在 vehicle 表的 lineID 上设置外键 添加外键并命名
选择所需的栏位
选择参考的数据库
并且选择参考栏位就添加成功了
1.当你打算用 mysql -h(主机的ip地址) -u(用户名) -p 打开你的数据库时报错host ‘’ is not allowed to connect to this mysql server。
原因:我们自己安装的mysql是不允许远程登录的。
2.解决方法:
第一步:mysql -u(用户名) -p
第二步:输入use mysql;
第三步:输入update user set host = ‘%’ where user = ‘root’;
第四步:输入FLUSH PRIVILEGES;(flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库 (MySQL数据库的内置库)中提取到内存里。 MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令。 通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。 而不必冒太大风险。 mysql 修改密码后,注意flush privileges。 mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效。)
3.之后进行:mysql -h(主机的ip地址) -u(用户名) -p 就可以连接上了。(ip地址如何查询:windows +R ,输入cmd,命令行输入:ipconfig)红箭头所指向的就是自己的ip地址
4.连接上后,检测例子:
import pymysql #建立连接 conn = pymysql.connect( host="你的IP地址", user="root", #用户名 passwd="root",#用户密码 db ="test")#数据库名 #创建游标,默认是元组型 cursor = conn.
CHxN的pwm就是一个互补输出的问题,我更愿意称它叫CHx的互补通道,这样理解没有歧义。 新手照着下面配寄存器就可以配置好。
这里也提供一个演示: 配置CH3N输出PWM,顺便配置了CH4输出PWM…这样就有了多路PWM… 这里和普通定时器一样 通道配置如图
这里是上图里面mode说明:
互补通道开启输出和普通通道不一样 HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3); //互补通道输出开启 HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4); //普通通道输出开启 两个函数分别对应以下两个标志位
直接加代码里就好了
还要把通道3N输出模式手动配置成pwm,因为cube没有该选项
这样就有输出了
这里说一个调试时看寄存器的小技巧,窗口里面的寄存器值和内存、变量窗口一样,可以直接修改,很方便,可以看着规格书来改寄存器,直接把功能配出来
如下图:
python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜。
一、先看看效果吧。 直接开始介绍了吧。
二、准备资源图片 通过ps或者ppt软件把这个图片抠图干净,就会出来的效果好看些。
三、实现逻辑 (一)自定义棒棒糖类 class Ball: def __init__(self, canvas,root): self.canvas = canvas self.root = root self.image = Image.open('bbt.png').resize((30, 30)) def create_ball(self): self.xpos = randint(50,self.root.winfo_width()-50) self.ypos = randint(-self.root.winfo_height(),0) self.vect = randint(1,3) self.tkimage = ImageTk.PhotoImage(self.image) self.canvas_obj = canvas.create_image(self.xpos, self.ypos, image=self.tkimage) def move_ball(self): # self.xpos += 1 self.ypos += self.vect if self.ypos > self.root.winfo_height(): self.xpos = randint(50, self.root.winfo_width() - 50) self.ypos = randint(-50, 0) self.vect = randint(1,3) self.tkimage = ImageTk.
作为专题的效果,也记录下这些代码,分享给大家,希望大家喜欢。
一、先上个效果图吧 换一个棒棒糖的图,生活甜蜜蜜。
好的,下面慢慢开始介绍整个实现过程。
二、准备图片素材 三、搭个框架,上个云朵图 import tkinter from PIL import ImageTk,Image root = tkinter.Tk() root.geometry('500x500+200+100') root.resizable(False,False) root.overrideredirect(True) root.wm_attributes('-transparentcolor','red') root.wm_attributes('-topmost',1) image = Image.open('云朵3.png').resize((500,500)) image = ImageTk.PhotoImage(image) lbImage = tkinter.Label(root,image=image) lbImage.pack(fill=tkinter.BOTH,expand=tkinter.YES) root.mainloop() 云朵出来了。
四、增加点文字 人生苦短,我用python,然后也换个棒棒糖的图。好看点。
lbImage = tkinter.Label(root, text="人生苦短\n我用python\n\n\n\n", font=("微软雅黑", 26), foreground='blue', compound="center", image=image) 完整代码:
import tkinter from PIL import ImageTk,Image root = tkinter.Tk() root.geometry('500x500+200+100') root.resizable(False,False) root.overrideredirect(True) root.wm_attributes('-transparentcolor','white') root.wm_attributes('-topmost',1) root.config(highlightthickness=0) image = Image.open('timg.jpg').resize((500,500)) # image = Image.open('云朵3.png').resize((500,500)) image = ImageTk.PhotoImage(image) lbImage = tkinter.
页面的参数传递 1、再脚手架项目中常用的跳转方法,使用<router-lint :to = "">方法和使用vue-router;
2、参数的传递都是页面跳转中常用的,另外有些参数需要全局共享,这时使用的一般都是vueX;
父传递子 1、父传子的方式可以直接使用组件的porps方式传递参数;
2、可以使用vueX共享数据传递参数;
3、可以使用vue-router方式再跳转路由中传递参数;
子传父参数 1、首先跳转会使用到路由,所以使用路由的方式传递参数是可以的vue-router;
2、其次共享数据再全局都可以调用,使用vueX方法是可以的;
兄弟之间的传参 1、共享数据vueX的方式;
2、使用路由方式vue-router;
父子传参/组件props方式传参 使用组件间传参的方式 ***组件减传参使用的是属性props***:
组件加传参的使用方式 首先是父子传参,需要一个父组件,和一个子组件,并且需要再父组件中声明子组件;注意在路由中的配置;其次,向子组件中传递参使,再使用自定义子组件标签中自定义一个属性,作为一个存放参数的盒子;最后,在子组件的javascript的模块中使用属性props进行属性的承接,注意这里参数是父组件中定义的属性名; 路由设置 这是使用路由嵌套的父子组件使用方式;
{ path: '/father', name: 'father', component: father, children: [ { path: 'son', name: 'son', component: son } ] } 还有一种是使用非嵌套路由方式的父子组件;
路由字典的结构:
interface RouteConfig = { path: string, component?: Component, name?: string, // 命名路由 components?: { [name: string]: Component }, // 命名视图组件 redirect?: string | Location | Function, props?
Ambition_6663
2015-11-20 19:36
1,并行
并行接口主要作为打印机端口,采用的是25 针D 形接头。所谓“并行”,是指8 位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错。目前计算机基本上都配有并口。
2,串行
串口叫做串行接口,现在的PC 机一般有两个串行口COM 1 和COM 2 。串行口不同于并行口之处在于它的数据和控制信息是一位接一位地传送出去的。虽然这样速度会慢一些,但传送距离较并行口更长,因此若要进行较长距离的通信时,应使用串行口。通常COM 1 使用的是9 针D 形连接器,也称之为RS-232接口,而COM 2 有的使用的是老式的DB25 针连接器,也称之为RS-422接口,不过目前已经很少使用。
计算机常见接口如下:
电源、PS2(鼠标、键盘)、VGA(模拟显示器接口)、USB(通用串行总线可以接任何兼容的设备,包含摄像头、键盘、鼠标、移动硬盘、U盘、读卡器等等)、COM用于老式的扫描仪和绘图仪还有打印机、鼠标)、LPT(打印机接口)、板载音频模块的三个接口(黑的表示输出、绿的表示输入、红的标示录音)、板载调制解调器(MODERN-猫)接口和网卡接口。
Django order by 高级用法 最近业务上出现了一个比较特殊的排序需求:推荐池的内容要排在最前面,其他的 id 升序 准备 定义model
class TestCaseWhen(models.Model): name = models.CharField(max_length=255) 生成数据
from test_case_when.models import TestCaseWhen data_list = [] for num in range(10000): name = 'name:{}'.format(num) data_list.append(TestCaseWhen(name=name)) TestCaseWhen.objects.bulk_create(data_list) 检查数据
TestCaseWhen.objects.all().count() Out[7]: 10000 TestCaseWhen.objects.all().values_list('id', 'name') Out[8]: <QuerySet [(1, 'name:0'), (2, 'name:1'), (3, 'name:2'), (4, 'name:3'), (5, 'name:4'), (6, 'name:5'), (7, 'name:6'), (8, 'name:7'), (9, 'name:8'), (10, 'name:9'), (11, 'name:10'), (12, 'name:11'), (13, 'name:12'), (14, 'name:13'), (15, 'name:14'), (16, 'name:15'), (17, 'name:16'), (18, 'name:17'), (19, 'name:18'), (20, 'name:19'), '.