利用BP神经网络进行函数拟合

利用BP神经网络进行函数拟合 摘要关键词问题描述算法设计结果分析与讨论结论Python源代码 摘要 数据拟合是在假设模型结构已知的条件下最优确定模型中未知参数使预测值与数据吻合度最高,本文选取线性项加激活函数组成一个非线性模型,利用神经网络算法最优确定模型中的未知参数,利用随机搜索的方式确定函数模型,从而达到很好的拟合效果 关键词 BP神经网络 随机搜索 随机重启 参数优化 数据拟合 RELU 问题描述 数据拟合问题普遍存在,拟合问题本质上是在假设模型结构已知的条件下最优确定模型中未知参数以使得模型预测与数据的吻合度最高,即数据拟合问题往往描述为一个参数优化问题。 复杂工业过程对于模型精度的要求,线性模型往往不能满足。因此模型结构假设为非线性更为合理。此处我们假设模型结构为: 算法设计 BP神经网络是一种按照误差逆向传播训练的多层前馈神经网络。神经网络理论上可以拟合任意曲线,这一点已经得到了严格的数学证明。 三层神经网络模型 通常一个多层神经网络由L层构成,其中有1层输出层,1层输入层,L-2层隐藏层。输入层是神经网络的第一层,表示一列矩阵或多列矩阵的输入。输出层是神经网络的最后一层,表示网络的输出结果,通常是一列矩阵。隐藏层有L-2层,表示每一层神经元通过前向传播算法计算的结果矩阵。 在本程序中,采用3层神经网络。输入矩阵X=[X1,X2],题目中给出的模型需要对输入矩阵X进行增广,然后乘以参数,其实相当于神经网络中的偏置项bi,i=1,2。因此在本程序中无需对输入矩阵进行增广。wi,wi, i=1,2;bi,i=1,2分别是输入层与隐藏层之间,隐藏层与输出层之间的连接权重和偏置项。设,n=1,i=1,2,3,…,M,表示隐藏层的第i个神经元的输出。激活函数 本程序中采用的激活函数为RELU函数,即函数模型中的,目的是去除整个神经网络输出的线性化,使得整个神经网络模型呈非线性化。损失函数 本程序中采用的损失函数为MSE(均方误差),利用均方误差和激活函数的导数来更新权重和偏置。 前向传播算法是指依次向前计算相邻隐藏层之间的连接输出,直到模型的最终输出值。其特点作用于相邻层的两个神经元之间的计算,且前一层神经元的输出是后一层的神经元的输入。 设对于第n层的第i个神经元,有n-1层的M(M为超参数)个神经元与该神经元有突触相连,则第n层第i个神经元的输入为: 第n层的第i个神经元的输出为:反向传播算法 结合前向传播的两个式子,得到第n层第i个神经元的输入与第n-1层第i个神经元的输出的关系为:梯度下降算法 得到每一个隐藏层的连接权重和偏置项的梯度后,利用学习率和梯度下降算法更新每一层的连接权重和偏置项:学习率更新策略 在配合梯度下降优化的过程中,如果学习率设置过大,则容易导致模型过拟合;如果设置过小,会使得模型优化的速度变得很缓慢。为此加入衰减因子和学习次数来计算模型每次学习的学习率: 归一化与反归一化 随机重启算法 为了防止更新参数时陷入局部极小,采用随机重启的方式更换初始参数状态。超参数M的确定 本程序的超参数M的确定方法为随机搜索法,最终确定M的取值为20。编程环境和程序主要函数说明 全部内容均在JetBrains发布的PyCharm社区版(版本号2019.2.5)编程环境中完成,使用的语言为Python,解释器为Python3.8。 #产生数据,并将产生的数据方阵降维,方便计算处理 def init(inpit_n_row): #激活函数 def relu(x): #激活函数RELU的导数 def d_relu(x): #归一化数据 def normalize(data): #反归一化数据 def d_normalize(norm_data, data): #计算损失函数:平方损失函数 def quadratic_cost(y_, y): #评价函数RSSE def rsse(y_predict, y): #前向传播算法 def prediction(l0, W, B): #反向传播算法:根据损失函数优化各个隐藏层的权重 def optimizer(Layers, W, B, y, learn_rate):

append和extend的区别

append、extend两者都表示添加,但还是存在很大的区别: 相同点: 都是在列表list的末尾添加元素; 添加元素时,都是以容器的方式添加; 不同之处: 虽然两者都是以容器的形式添加,但append添加是将容器看作整体来进行添加,但extend是将容器打碎后添加(加入的只是元素) 注:图片中代码是用Anaconda来写的

VsCode常用快捷键

全屏:F11zoomIn/zoomOut:Ctrl +/-侧边栏显/隐:Ctrl+B控制台终端显示与隐藏:ctrl + ~显示资源管理器 :Ctrl+Shift+E自动换行 : alt + z快速回到顶部 : ctrl + home快速回到底部 : ctrl + end显示搜索: Ctrl+Shift+F显示 Git: Ctrl+Shift+G显示 Debug :Ctrl+Shift+D显示 Output :Ctrl+Shift+U全局查找 :Ctrl+Shift+F万能键:F1找到所有的引用: Shift+F12同时修改本文件中所有匹配的: Ctrl+F12重命名:比如要修改一个方法名,可以选中后按 F2,输入新的名字回车,会发现所有的文件都修改了跳转到下一个 Error 或 Warning:当有多个错误时可以按 F8 逐个跳转Shift + Alt + F 格式化代码F12 跳转到定义处Ctrl + ` 打开集成终端Ctrl + Shift + ` 创建一个新的终端

Xcode创建GitHub仓库最简单的方法

以前一直是在Github上创建好了仓库,然后在mac上的终端输入 git clone XXX来clone仓库,再把工程创建到clone的文件夹下。 之后发现复制来的工程代码很容易不被识别到,或者识别成另外的项目。 今天发现一个最简单的方法: 1. 创建Xcode工程或者复制来一个工程 2.在菜单/source control/中点击creat git repositories... (创建本地仓库) 3.在代码管理/项目上右键选择creat “XXX” remote...(创建远程仓库),然后输入项目名、共有/私有即可。该项目就上传上去了。

MATLAB提取矩阵一部分

MATLAB对矩阵的操作十分灵活,下面对最近遇到的进行总结: 格式A(m,n),用于提取矩阵A中符合m,n要求的部分 1、提取某个元素,则m,n为数字标量,如A(2,3)为第二行第三列的元素。 2、提取某行某列 A(:,n)提取第n列的所有元素,如A(:,3)提取第三列的所有元素; A(m,:)提取第m行的所有元素,如A(3,:)提取第三行的所有元素; 3、提取任意的某部分并重新组成新的矩阵,连续或不连续,单调或不单调 数字指定:A([1 2 3 4],[2 3]) 返回1 2 3 4行2 3 列的数据; 步长指定:A(1:2:end,:) A(2:2:end,:)分别提取矩阵A的奇数行和偶数行数据; A(end:-1:1,:) A(:,end:-1:1)分别返回A矩阵行倒序和列倒序的矩阵 变量指定:A(B(:,1),:),其中B的第一列含有数据,用来指定取矩阵A的哪些行。 4、变量指定,假设一个矩阵X1中存储的是坐标,用矩阵X1的坐标访问矩阵labels_left中对应的元素: for i = 1:size(X1,1) x = labels_left(X1(i,2),X1(i,1));%匹配对1在左图中的label数 end

idea查看是否激活

help | about: expiration date … 表示未激活,如图: subscription is active until … 表示已激活

七牛云实现连麦功能

由于本次是移动端推流,服务端的操作不是很多 <?php namespace App\Modules\Api\Http\Controllers; use App\Modules\Live\Models\Broadcast; use Illuminate\Http\Request; use Qiniu\Auth; use Qiniu\Rtc\AppClient; class ChatController extends ApiBaseController { private $auth; private $accessKey; private $secretKey; private $client; private $bucket; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->accessKey = config("qiniu.accessKey"); $this->secretKey = config("qiniu.secretKey"); $this->bucket = config("qiniu.bucket"); $this->auth = new Auth($this->accessKey, $this->secretKey); $this->client = new AppClient($this->auth); parent::__construct(); } /** *获取凭证 */ public function appToken(Request $request) { $userInfo = parent::getAuthenticatedUser($msg); if (isset($userInfo['user']) && !

javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

遇到这个问题百度都说需要bcprov-ext-jdk15on-1.52,bcprov-jdk15on-1.52这两个jar包,我实际情况只用到了一个jar就好了:bcprov-jdk16-1.46.jar 下载链接: https://pan.baidu.com/s/1kv3YWtXMCFsYLF6GQcXCfw 提取码: egk2 一、将此jar放到$JAVA_HOME/jre/lib/ext目录下 二、修改此路径下文件:$JAVA_HOME/jre/lib/security/java.security 找到security.provider.9,然后在这句话下面加上 security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider 加上了之后,重启应用就可以运行了。 参考:https://www.cnblogs.com/yinliang/p/9929595.html

1.6编程基础之一维数组--08:石头剪刀布

08:石头剪刀布 原地址 描述 石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。 一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多? 输入 输入包含三行。 第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。 第二行包含NA个整数,表示小A出拳的规律。 第三行包含NB个整数,表示小B出拳的规律。 其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。 输出 输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。 样例输入 10 3 4 0 2 5 0 5 0 2 样例输出 A #include <cstdio> #include <math.h> #include <cstdlib> #include <iostream> #include <iomanip> #include <cmath> using namespace std; int main() { int n,p,q,a[100],b[100],na[100],nb[100],A=0,B=0;//最笨的办法求解,一看就懂 cin>>n>>p>>q;//按要求输入第一行 for(int i=0;i<p;i++) cin>>a[i];//输入“A"的出拳规律 for(int i=0;i<q;i++) cin>>b[i];//输入“B"的出拳规律 for(int i=0;i<n;i++) na[i]=a[i%p];//na数组代表"A"的出拳 for(int i=0;i<n;i++) nb[i]=b[i%q];//nb数组代表"B"的出拳 for(int i=0;i<n;i++){ if((na[i]==0&&nb[i]==2)||(na[i]==2&&nb[i]==5)||(na[i]==5&&nb[i]==0)) A++;//“A”赢的次数 else if((na[i]==0&&nb[i]==5)||(na[i]==2&&nb[i]==0)||(na[i]==5&&nb[i]==2)) B++;//“B"

Android Studio 超详细 安装SDK 教程

一、首先安装Android SDK Tools 国内下载地址Android SDK Tools 百度云下载地址链接:https://pan.baidu.com/s/1RmXi8b_lxksVS5hJuSLPIg 提取码:8px0 1.安装Android SDK Tools ,一直Next下去。 ①双击打开 ②到这里选择安装路径之后点Next。 ③安装 ④安装完成 二、安装SDK 1.特别说明:SDK保存路径 这个是刚才安装Android SDK Tools的路径,SDK默认保存在Android SDK Tools安装路径,所以最好新建一个文件夹专门保存SDK。 2.首先这三个是必须安装的。 3.选择你要下载的SDK版本 这里以Android10为示例。选完之后点install 10 packges 4.下载安装 5.等待下载就行了。

Glance的安装及其配置

云计算基础架构平台构建与应用基于centos6.5 (五)Glance的安装及其配置 实训涉及节点 controller 实训目标 完成Glance基本组件的安装;完成Glance数据库的创建以及授权;完成Glance用户、服务及端点的创建;完成Glance主配置文件的修改;完成镜像的上传和验证。 1、安装Glance基本组件 [root@controller ~]# yum -y install openstack-glance python-glanceclient 2、创建数据库并授权。 [root@controller ~]# mysql -uroot -p000000 mysql> create database glance; mysql> grant all privileges on glance.* to 'glance'@'localhost' identified by '000000'; mysql> grant all privileges on glance.* to 'glance'@'%' identified by '000000'; [root@controller ~]# openstack-config --set /etc/glance/glance-api.conf database connection mysql://glance:000000@controller/glance [root@controller ~]# openstack-config --set /etc/glance/glance-registry.conf database connection mysql://glance:000000@controller/glance [root@controller ~]# su -s /bin/sh -c "glance-manage db_sync"

Mac Pro邮件添加QQ邮箱时:无法验证账户名或密码

MacPro 邮件添加QQ邮箱时:无法验证账户名或密码 在添加邮件这一页,输入邮件地址时,密码不能输入QQ邮箱密码或是独立密码,需要先开启POP3/SMTP 和 IMAP/SMTP 浏览器登录邮箱,在设置里,找到账户设置的POP3/IMAP/… 开启POP3之后,会有验证,之后生成授权码,在Mac上添加邮件的密码一栏应该输入的就是这个授权码。 其实,下面一栏淡黄色的提示框,也有相应的说明。 如果你是 修改了QQ密码而不能登录,那就 删除账户,再创建 就可以了。

Vue简介及简单使用

Vue简介及简单使用 Vue基本介绍 2012年出现,是中国人 尤雨溪 开发的,2016年3月 加入阿里巴巴公司(该事件助推了Vue的发展) Vue是目前很火的一个前端框架,是前端三大主流框架之一(Vue、React、Angular)。 Vue是一套构建用户界面的渐进式框架(用到哪一块就用哪一块,不需要全部用上)。与其他重量级框架不同的是,Vue 采用的是自底向上增量开发的设计。 Vue的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合,有配套的第三方类库。 Vue是一套完整的解决方案,对项目侵入性大,中途需要跟换框架则需要重构整个项目。 内部集成了许多基础技术,例如html、css、javascript、ajax、node等,当然还有Vue本身高级技术体现,例如组件、过滤器、指令、路由、webpack等等。 提高开发效率,帮助减少不必要的dom操作;双向数据绑定,通过框架提供的指令,前端只需要关注业务逻辑,不再关心dom如何渲染。 Vue兼具React和Angular的优点,并剔除了它们的缺点,支持所有兼容ECMAScript 5的浏览器,IE9以上 ##学习Vue前的技术准备 掌握 HTML + CSS + JS基本网页制作能力了解Node基础概念、包、模块化,会用 npm维护项目中的包即可ES6基础语法要会用 获取Vue 网址: https://cn.vuejs.org 官方地址(服务器在外国,访问速度慢) https://vue.docschina.org/ 官方地址镜像(服务器在中国,访问速度快) 最新稳定版本:2.6.11 直接下载 开发版本:<https://cdn.jsdelivr.net/npm/vue/dist/vue.js>生产版本:<https://cdn.jsdelivr.net/npm/vue> CDN:(Content Delivery Network内容分布式部署) 在应用中通过script标签直接引入一个完整路径名的Vue文件包 该方式要求具备上网环境 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> 使用 npm下载(默认安装最新稳定版) npm install vue 注意: Vue 不支持 IE8 及其以下版本 Vue简单使用 Vue简单使用——示例代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <!-- 创建一个供vue操控的标签容器(推荐div) --> <div id="

关于结构体

结构体的定义与初始化是很常用的,特别记录下(感觉书上写的比较实用) “如果自己重新定义了构造函数,则不能不经过初始化就定义结构体变量,也就是说,默认生成的构造函数“studentInfo(){}”此时被覆盖了。为了既能不初始化就定义结构体变量,又能享受初始化带来的便捷,可以把“studentInfo(){}”手动加上。” ——《算法笔记》 示例代码: #include <stdio.h> struct Point{ int x,y; Point(){} Point(int _x,int _y){ x = _x; y = _y; } }pt[10]; int main(){ int num = 0; for(int i = 0;i <= 3;i++){ for(int j = 1;j <= 3;j++){ pt[num++] = Point(i,j); } } for(int i = 0;i <num;i++){ printf("%d,%d\n",pt[i].x,pt[i].y); } return 0; }

IDEA高效的代码编辑技巧

一、复制和复制历史 我们都知道复制的快捷键是“CTRL + C”,在IDEA中也是如此。在IDEA中,如果我们想要复制某一行内容,只需要将光标放至该行,然后按复制的快捷键“CTRL + C”即可复制整行,不需要选中,并且这种复制是会自动格式化代码的复制。如果需要直接向下复制,则按住“CTRL + D”即可,这种复制多用于向实体类中设置属性值的情形。 在IDEA中,它会自动记录你的五条复制历史记录,我们只需要按住“CTRL + SHIFT + V”即可查看复制历史。 二、格式化代码 全局格式化代码:先按住“CTRL + A”全选,然后按住“CTRL + ALT + L”即可格式化。 局部格式化代码:选中需要格式化的代码行,然后按住啊“CTRL + ALT + L”即可格式化。(推荐) 三、剪切一行或多行 剪切的快捷键为“CTRL + X”,在IDEA中剪切时只需要将光标防止需要剪切的哪一行,然后按快捷键即可剪切整行,我们也可以使用这种操作快速的执行删除操作。 四、上下移动一行或多行 在开发中,我们需要将某一行上下移动一行或多行,只需要将光标防止需要移动的那一行,然后按住“ALT + SHIFT + 上/下键”即可快速的上下移动该行,如果涉及到多行,有鼠标则推荐用鼠标选中多行,直接剪切,然后复制到需要移动的位置,如果没有鼠标,则可以将光标移至需要移动的多行的首行或末行,然后按住“SHIFT + 上/下键”,选中需要移动的行,然后按“ALT + SHIFT + 上/下键”即可快速的上下移动这些行。 五、行内跳转和选中 按“HOME”键跳转到行开头,按“END”键跳转到行末尾。按住“CTRL + 左/右键”可以一个单词一个单词的跳,适用于一行很长的代码。按住“CTRL + SHIFT + 左/右键”可以一个单词一个单词的选中。 六、根据行号和列号定位 按“CTRL + G”键即可打开快速跳转窗口: 在窗口中输入对应的"行号:列号"或者是“行号”,点击OK即可快速定位到具体的行和列。 七、tabs快速切换 按住“CTRL + 左/右”键可以快速切换tabs,不论tabs的排列是顶部排列还是左边排列,都是“CTRL + 左/右”键。 八、查看浏览过的文件 按“CTRL + E”键即可打开浏览过的历史 九、快速打开文件所在文件夹 右键对应的文件或项目,在弹出的快捷栏位中选择“show in Explorer”即可打开对应文件或项目所在的文件夹,如果路径中带有中文就会打开失败。

linux修改时间命令-超好使

参考文档:https://m.php.cn/article/421907.html linux修改时间命令 藏色散人2019-06-06 13:54:30原创25643 服务器时间与网络时间不符: 推荐:《Linux视频教程》 一、手动修改 date命令:查看当前时间 date -s 时分秒 :修改时间 还需要把日期改过来 3. date -s 完整日期时间(YYYY-MM-DD hh:mm[:ss]):修改日期、时间 时间要用双引号括起来,否则报错 手动修改会存在一定的时间误差 4. hwclock -w 将时间写入bios避免重启失效。 当我们进行完 Linux 时间的校时后,还需要以 hwclock 来更新 BIOS 的时间,因为每次重新启动的时候,系统会重新由 BIOS 将时间读出来,所以, BIOS 才是重要的时间依据吶。 二、同步网络时间 检查系统是否安装ntp服务 安装ntp服务命令: 1 apt-get install ntp 或者 yum install ntpservice --status-all:检查ntp服务是否启动 [+]表示服务已启动 3. ntpdate 服务器IP:同步服务器时间 ntp常用服务器: 123456 中国国家授时中心:210.72.145.44NTP服务器(上海) :ntp.api.bz美国:time.nist.gov 复旦:ntp.fudan.edu.cn 微软公司授时主机(美国) :time.windows.com 台警大授时中心(台湾):asia.pool.ntp.org 好像有点问题了。。。 服务器换成上海的 时间还是差一分钟,手动把时间与当前时间间隔改大一些,再同步发现有问题,服务器时间根本就不对,差了半天时间,/(ㄒoㄒ)/~~ 用微软公司授时主机(美国),发现和上海的服务器时间差不多,那是不是时区设置有问题?? 4. 修改服务器时区 4.1 date -R : 查看当前时区

自然语言处理名言

You shall know a word by the company it keeps ——J. R. Firth 1957: 11(开创现代统计NLP的核心思想)”

前后端分离项目 遇到请求跨域问题Access to XMLHttpRequest at......has been blocked by CORS policy: Response to

报错信息: Access to XMLHttpRequest at 'http://localhost/login' from origin 'http://xxx.xxx.x.x:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status. 1.前端–首先Vue发起请求: axios.post('http://localhost/login',{"userName":this.userName,"password":this.password}) .then(response=>{ console.log(response) }).catch(error=>{ this.errorInfo=error; }) 2.后端-- Controller方法接收请求: /** * 管理员登录 * 由于是前后端分离 使用@RequestBody将json串解析成实体 否则参数无法接收 * @return * @throws Exception */ @RequestMapping("/login") public R login(@RequestBody Admin admin)throws Exception{ Admin u=adminService.login(admin); R r=new R(); if(u==null){ return R.error("用户名或者密码错误"); }else{ String token= JwtUtils.

软件设计度量工具inFusion

官网 InFusion官网: 简介 inFusion工具是一个基于对软件代码的扫描分析,得出子系统与子系统、模块与模块、类与类之间的关系,再根据这些关系推出是否有软件架构设计缺陷,并指导软件重构的工具。 工具针对每个设计缺陷(DF)给出修改建议,帮助软件重构,从而提供了从软件设计缺陷检测到重构的一整套完整解决方案。 商业软件很贵的,花的是欧元。 重要的概念 下面先介绍inFusion中几个很重要的概念:Metrics、Design Flaw、Design property、Quality model、QDI。 Metrics: 软件度量(mertics)是从源代码中得出的软件直接参数,比如代码行数(LOC)、函数的扇入扇出(FANOUT)、不稳定因数(IF)、抽象类的个数(NOAC)、类的个数(NOC)、函数调用的深度层次等各种指标。也就是说:metrics是inFusion中最底层、最基本的数据,是根据我们的源代码计算出来的一些很客观的数据。 Design Flaw: Martin Fowler的《Refactoring - Improving the Design of Existing Code》和Arthur J. Riel的《Object-Oriented Design Heuristics》中提到了代码坏味道的概念,这就是inFusion中的设计缺陷。设计缺陷,体现了软件设计中不合理的地方,意味着低的软件质量,意味着软件不易维护,容易产生BUG。 Design property: 设计属性(Design property)比质量属性(Quality model)低一个层次,也更为具体。设计属性(Design property)分为以下6方面:代码规模与复杂度(Size and Complexity)、封装性(Encapsulation)、耦合(Coupling)、内聚性(Cohesion)、继承性(Hierarchies)、测试性(Testing)。 Quality model: 该模型聚焦于评价软件维护能力,把软件质量分解为4个方面的质量属性(Quality attribute):可读性(Understandability)、可扩展性(Changeability)、可重用性(Reusability)、可测试性(Testability)。 QDI: 质量缺陷指数(Qualiti Deficit Index),是通过质量缺陷模型计算出来的,展示系统归一化和总的质量缺陷指数。总的QDI是设计缺陷×权重的累加值,和系统的规模大小有关,不代表系统的好坏。归一化的QDI是一个标准值,可以对比参考。归一化质量缺陷指数,是1000行代码的缺陷指数。 下图展示了质量模型和设计属性: 上面几个概念的关系如下: 参考资料: 软件设计度量工具inFusion(一):inFusion的基本概念 https://blog.csdn.net/aitangyong/article/details/50206419 软件设计度量工具inFusion(二):看懂inFusion度量结果 https://blog.csdn.net/aitangyong/article/details/50250967 InFusion错误类型分析 https://blog.csdn.net/wangdongliang129/article/details/52502225 

AndroidStudio安装配置(缓存文件的修改,减少C盘空间占用)

这篇文章是在我多次安装AndroidStudio之后决定写出来给大家看看的,因为我自己的电脑C盘容量,真的是,不忍直视了,这是,,,运行了一天时间后我的C盘,唉。平时勉强可以有1.1G,心酸 然后装这个软件真的是烦扰了我好久好久,最后,咳咳,还是在前几天成功安装了好了,并且,C盘也没占多少容量嘿嘿嘿,希望对大家有帮助 接下来,我们来看怎么装这个软件,我装的版本是3.1.2的,不过大部分版本安装的基础流程都差不多 首先你要准备的当然是安装的软件啦 一.JDK的安装 这个应该很多人都会装的吧。学Java必备的嘛。不过防止有的人还是不会,我把这个过程也写了一下,放在了这前面的一片专门的文章里,这里是连接→jdk安装 二.AndroidStudio的安装 接下来到了我们这篇文章的主要部分了 这个过程比较漫长,而且需要比较好的网络,大家耐心一点,找个网好的地方可能会加快安装速度~~ 先要去下载AndroidStudio的安装文件,下面是官网上的现在更新到了3.5.2,但是还是建议大家下载一个比较稳定的版本,我装的是3.1.2版本的,但是因为即便压缩后文件还是比较大,csdn的资源上传不能超过220M,所以我暂时没办法给你们提供下载链接,大家可以网上搜一下 1.双击下载的安装文件,打开安装向导。这里的AVD是AS自带的模拟器(个人观点:这个自带的AVD在用的时候卡的厉害,如果打算不用它的话,可以不勾选,第三步我会写一下怎么安装夜神模拟器以及将它和AS连接),大家自行决断~~ 点击Next下一步,来到安装路径页面,既然写这篇文的目的是帮助大家减少C盘空间占用,自然要修改默认安装路径。选择你自己要安装的路径,记住,路径中不要包含中文,不然容易出现报错 下面的是要不要创建快捷方式,勾选表示不创建。点击安装等待下载组件安装完成即可 这样软件就装好了 到这一步,可以直接打开软件进行SDK的安装,但是我之前直接进去装,C盘爆了,SDK下到一半被迫退出,多次安装失败,最后的软件不能正常使用。所以这次装的时候显示没有打开软件,去修改的缓存文件路径 三.缓存文件的设置 1.说明 ●.android:这个是文件是Android SDK生成的AVD(Android Virtual Device Manager),也就是模拟器存放的路径,如果你安装了AS自带的模拟器,那么这个文件夹会非常占空间 ●.AndroidStudio:这个文件是AS的配置、插件缓存文件夹、最近打开的项目缓存等 ●.gradle:这里面存储的是本地的gradle全局配置文件,但是在使用AS过程中每次更新gradle后这个文件都会增大(当然可以配置离线gradle) ●.m2:该文件夹是AS本地仓库缓存,在用远程仓库时会先缓存到本地仓库之后才添加到项目,所以在项目加载文件的过程中,这个文件夹会日益膨胀 2.android文件夹的配置 我因为没装自带AVD,就没动它,不过我找了一个网上的配置教程,放在这里供大家参考: 这个应该是已经打开了AS安装好了SDK之后才进行配置的,毕竟你要先把AVD下载了才能进行配置不是。 先要添加一个系统的环境变量ANDROID_SDK_HOME,变量值设为SDK的安装目录(这个安装了SDK不就自己生成了嘛,有点点迷~~) 然后到SDK路径下找到相应的.ini文件内的路径信息path=E:\Android\AndroidStudio\cache.android\avd\Nexus_5_API_24.avd,然后重启系统生效 3.AndroidStudio文件夹的配置 该文件的配置是在修改AS可执行文件目录下的idea.properties文件实现的,在开始配置之前,防止操作失误先把文件备份一份,然后用文本编辑器打开文件进行编辑 下面是文件的修改在状况,修改完成后保存并关闭文件,将AndroidStudio文件夹copy一份放到设置的新的目录下,重启AS即可生效了 到这,AndroidStudio文件就配置好了 4.SDK下载安装 然后我就是,打开AS继续安装,完成SDK的下载安装。打开后出现下图的提示框,这是询问是否导入AS设置,首次使用,选择不导入 下面有的版本可能会出现询问是否将日志报告发送给谷歌的页面,选择Donot send 然后就会出现下面的提示,第一次运行,AS找不到Android SDK所以请求设置代理下载,这里选择Cancel取消 Next 下图选择安装类型,分为标准和自定义,其中标准模式就是按照大多数不用自己修改什么的默认路径等直接下载安装,自定义就是可以自己设置下载安装路劲等,这里我们选择自定义 随意选择自己喜欢的页面风格然后Next 这个就是我们的SDK安装下载页面了,其中 Performance(Intel ® HAXM)是一个硬件加速工具,用于为搭载Intel芯片的虚拟机进行加速,加速模拟器的页面响应,减少卡顿。emmmm据说这个要进入电脑的BIOS进行开启,各个版本电脑进入BIOS方法不同(反正我还没试过这个工具的具体使用操作),想试试的百度一下看看吧 然后因为我不喜欢这个自带的AVD(真的卡到爆炸),就没勾选最后一个,选择自己的SDK安装路径(记着路径中不要有中文啊),然后Next 自定义安装会转到下图,设置模拟器的RAM大小。根据自己的额电脑情况选择就好。Next,确认安装内容信息,FInish,然后就,静静的等待安装就好了,这个下载安装过程会花一些时间,耐心一点。 插一嘴,我的C盘真的是爆到不行,安装过程中常常因为C盘剩余空间变0被迫中止,然后我。。。。。佛系的关了,第二天打开电脑重复上述,继续安装哈哈哈,差不多等于每次只加载一点,两三次之后,我才终于结束了这个过程,成功装好了SDK555555555 安装好后就会跳到AS的主页面,到这里SDK就下载好了,接下来继续我们上面的缓存文件的设置 5.m2和.gradle文件配置 这两个的配置留到现在是因为,它们不用修改文件,在AS中设置就好 将m2文件夹复制到新的缓存目录下,然后打开AS的setting设置,配置它的路径的环境变量 然后Apply→OK,重启后就OK了(重启可以在后面的配置完成后一并重启一次) 在setting中找到下图选项,将gradle路径修改为自己设置的缓存存放路径,Apply→OK即可,然后关掉AS,重启就好。到这里,差不多就配置好了。反正我按照这个过程做下来的,在AS使用过程中C盘空间基本稳定~ o( ̄▽ ̄)o 6.一点小问题 到这里,如果你是直接用的标准安装,有了自带的模拟器,那么可以说你的AS安装配置基本完成了,如果在新建一个项目后进行资源加载的时候提示同步工程出错,基础功能失效, 解决方法很简单,就是下载一个gradle包就好。这个网上搜一下应该到处都有。百度gradle 4.4-all,下载后无需解压,直接把它放到gradle缓存文件夹下按照【gradle 】→【wrapper】→【dist】→【gradle 4.4-all】→【9br9xq1tocpiv8o6njlyu5op1】里面,然后回到AS它就会重新开始同步了。 过程中如果跳出防火墙窗口,允许访问就好。如果需要下载SDK或别的文件直接下载就好,一般是你当前安装了的SDK版本和项目创建时的SDK不匹配问题,这个可以在SDKManager中随时下载 到这,AS基本上就安装好了。 7.夜神模拟器安装和连接 夜神模拟器的安装很简单,跟着安装向导一路走下来就好了,这里就不一点点贴出来了吧 然后就是怎么和AS连接的问题,这里给大家放个我当时百度到的链接,这里面讲的还是很清楚的~~ AndroidStudio及夜深模拟器开发调试

Alibaba Java Code Guidelines插件

下载手册 IDEA常用插件及下载地址 https://www.cnblogs.com/javaLf/p/9899643.html 代码质量检测工具 QAPLug https://www.pianshen.com/article/65151194277/ 阿里巴巴Java开发手册下载地址:https://download.csdn.net/download/cgm625637391/12068541 sonar常见问题及修改建议 https://blog.csdn.net/dixialieren/article/details/37910755 PMD报错原因修改总结.doc https://max.book118.com/html/2018/0505/164767254.shtm 插件安装 插件的主要功能是扫描出Java代码潜在的代码隐患,提升代码质量! 点击settings---->plugins---->Browse repositories 搜索Alibaba Java Coding Guidelines,点击右边的Install按钮进行安装,安装完成之后重启idea 插件使用 对想要检查的Java文件右键选择编码规约扫描 如果代码符合Java规范,会在左下角弹出提示没有发现可疑代码。 如果发现存在可疑代码,会在左下角Inspection Results标签页展示检查结果 插件的检测结果分级为Blocker、Critical、Major。默认按等级分组,方便统计每个级别错误的数量。 实时检测 实时检测功能会在开发过程中对当前文件进行检测,并以高亮的形式提示出来,该功能默认开启。 我们也可以手动关闭实时监测 关闭某条规则的实时检测功能或者修改提示级别 通过Settings >> Editor >> Inspections 进行手动设置 对的Inspection Results结果面板的讲解 红1:当修改代码后点击此按钮,重新进行Java规范检查 红2:关闭检查结果页 红3:展开检查结果集 红4:缩小检查结果集 红5:上移下移单个检查结果 红6:按错误级别分组开关 红7:按文件夹分组开关 红8:打开本开关后,自动筛选已解决的检查项 红9:打开本开关后,点击检查结果项会自动跳转到被检查的Java代码 红10:将检查结果导出到xml或者html中 红11:打开检查配置页 红12:在结果面板中可以直接一键修复

DGL图异构神经网络

DGL图异构神经网络 什么是异构图? 传统同构图(Homogeneous Graph)数据中只存在一种节点和边,因此在构建图神经网络时所有节点共享同样的模型参数并且拥有同样维度的特征空间。而异构图(Heterogeneous Graph)中可以存在不只一种节点和边,因此允许不同类型的节点拥有不同维度的特征或属性。 这一特点使得异构图的应用十分广泛。事实上,如果用图来描述我们和周围事物的关系就会发现所产生的图都是天然异构的。比如我今天看了电影《流浪地球》,那“我”作为观众和电影《流浪地球》之间就建立了“看了”这一关系。异构图可以用来描述这种交互关系的集合。这个图分“观众”和“电影”两类节点,以及“看了”这一类边。“我”作为观众,和电影所具有的属性一定是不同的,需要用不同的模型或者不同的特征维度来表达。这张图就天然具有了异构性。 再比如我去豆瓣上给《流浪地球》评了8分,那“我”和《流浪地球》之间就又建立了“评分”这一关系。“评分”和“看了”的属性也一定是不同的,如前者包含评分分数,后者则包含票价等。 因此,很多用于机器学习的数据都可以用异构图来建模,而需要解决的任务也可以通过学习图上的点和边,或是整张图的表示来解决。这里举几个例子。 推荐系统 图一:使用异构图建模推荐系统。 (图源:https://peterxugo.github.io/2017/09/28/推荐系统/) 常见的推荐系统数据由用户和商品的交互信息组成。这些交互信息可以用图来表示(图一)。由于用户节点可能包含用户的年龄、职业等个人信息,而商品节点则包含内容、价格等商品特有的信息,所以该图是一个异构图。 推荐系统可能感兴趣的内容包括: 判断某个客户是否会观看某部电影,以及在什么样的促销下会购票。这个问题可以转化成链接预测(Link Prediction)问题:判断两个点之间是否会有连边。 判断某个客户是否存在恶意刷分,或者某部电影是否遭到恶意刷分。根据标注是否存在,这个问题可以转化成半监督节点分类(Semi-supervised Node Classification)或者无监督的异常检测(Anomaly Detection)问题。 学术网络 学术网络的图结构更复杂一些。它可以包含“论文”、“作者”、“会议”和“机构”等节点类型。每个作者会隶属于某些机构,发表某些论文,而每篇论文又会被发表在某个会议上,也会引用其它的论文。每个节点同样可以有自己的特征——如论文可以用摘要当作特征等。同样,这些关系可以表示成一张异构图(图二)。 图二:学术网络 (图源:Dong et al., KDD 2017) 同样,链接预测和节点分类问题也适用于学术网络中。例如预测某个作者的研究领域或所属的研究团队、一篇论文或者一个作者的影响力等等。 知识图谱 知识图谱由于包含不同种类的节点和边,是一张天然的异构图。如下图,“人物”、“职业”和“荣誉”等都可以作为节点类型,而节点之间的关系也有“就职”、“获得荣誉”等多种类别。 图三:Wikidata知识图谱示例 图嵌入学习在知识图谱上也是一个很重要的任务。它的目标是对每一个节点和每一类关系学习一个高维向量表示。此外,知识图谱补全、基于知识图谱的推理以及将知识图谱与其他系统结合(比如推荐系统)等也是重要的任务。 有哪些针对异构图的图神经网络? 针对异构图设计图神经网络还是个非常新的方向。虽然论文不多,但已经在一些场景中取得了很不错的效果。这里简单介绍两个模型。 Relational Graph Convolutional Network (RGCN) 文章链接:https://arxiv.org/abs/1703.06103 RGCN是一个在异构图上学习节点表示的早期工作。与Graph Convolutional Network(GCN)类似,它仍然基于消息传递(Message Passing)。但与GCN不同,每条边上的消息通过每类边独有的线性变换得到。 RGCN可以用于节点分类和链接预测等任务。 Graph Convolutional Matrix Completion (GCMC) 文章链接:https://arxiv.org/abs/1706.02263 GCMC是在异构图上做产品推荐任务的一个尝试。它在一个由观众和电影组成的二分图上训练。观众和电影有各自的特征,而且每一条边上有对应的观众对电影的评分。GCMC将每一种评分视为一类边。 图构建完成后,每个节点通过消息传递的形式,汇总从自己邻居传递来的消息,去更新自己的表示。与RGCN不同的是,GCMC只进行一层消息传递: 消息同样是由源节点的原表示通过线性变换得到。与RGCN类似,每类边都有自己线性变换的参数矩阵。不同之处在于多关系累和函数accum有各种灵活选择。 GCMC算出两类点的最终表示之后,再通过softmax得出某个交互下每种评分的概率: 除了以上模型外,今年WWW还有诸如Heterogeneous Graph Attention Network (HAN),Knowledge Graph Convolution Networks for Recommender Systems (KGCN) 等关于异构图的好工作。此外,在网络嵌入(network embedding)方向还有如metapath2vec等经典的工作。

正点原子阿波罗F429+STM32CubeMX+LAN8720+LWIP:不带操作系统实现网络热插拔

1.前言 此文章是基于正点原子阿波罗F429开发版的, 利用STM32CubeMX新建一个项目带串口printf输出的,请查看我前面的文章,这里跳过新建项目的那些. 点击跳转 2.TM32CubeMX配置 1.ETH配置.,除了标记的地方,其它都是默认值 2.lwip配置.除了标记的地方,其它都是默认值. 3.生成代码.打开项目. 3 代码调试 新建四个文件,分别为:pcf8574.c,pcf8574.h,myiic.c,myiic.h.这四个文件是基于正点原子代码改的,主要是为了复位LAN8720用的.因为LAN8720的复位脚不是直接MCU上的,而是接在PCF8574那里的.但是正点原子的代码是适合在他的教程代码的.不适合我们STM32CubeMX直接生成的代码.我稍作了修改.修改后代码如下. 3.1 pcf8574.c全部代码 #include "pcf8574.h" // //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK STM32F429开发板 //PCF8574驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //创建日期:2016/1/13 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2014-2024 //All rights reserved // //初始化PCF8574 uint8_t PCF8574_Init(void) { uint8_t temp=0; GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB时钟 GPIO_Initure.Pin=GPIO_PIN_12; //PB12 GPIO_Initure.Mode=GPIO_MODE_INPUT; //输入 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速 HAL_GPIO_Init(GPIOB,&GPIO_Initure); //初始化 IIC_Init(); //IIC初始化 //检查PCF8574是否在位 IIC_Start(); IIC_Send_Byte(PCF8574_ADDR); //写地址 temp=IIC_Wait_Ack(); //等待应答,通过判断是否有ACK应答,来判断PCF8574的状态 IIC_Stop(); //产生一个停止条件 PCF8574_WriteOneByte(0XFF); //默认情况下所有IO输出高电平 return temp; } //读取PCF8574的8位IO值 //返回值:读到的数据 uint8_t PCF8574_ReadOneByte(void) { uint8_t temp=0; IIC_Start(); IIC_Send_Byte(PCF8574_ADDR|0X01); //进入接收模式 IIC_Wait_Ack(); temp=IIC_Read_Byte(0); IIC_Stop(); //产生一个停止条件 return temp; } //向PCF8574写入8位IO值 //DataToWrite:要写入的数据 void PCF8574_WriteOneByte(uint8_t DataToWrite) { IIC_Start(); IIC_Send_Byte(PCF8574_ADDR|0X00); //发送器件地址0X40,写数据 IIC_Wait_Ack(); IIC_Send_Byte(DataToWrite); //发送字节 IIC_Wait_Ack(); IIC_Stop(); //产生一个停止条件 HAL_Delay(10); } //设置PCF8574某个IO的高低电平 //bit:要设置的IO编号,0~7 //sta:IO的状态;0或1 void PCF8574_WriteBit(uint8_t bit,uint8_t sta) { __IO uint8_t data; data=PCF8574_ReadOneByte(); //先读出原来的设置 if(sta==0)data&=~(1<<bit); else data|=1<<bit; PCF8574_WriteOneByte(data); //写入新的数据 } //读取PCF8574的某个IO的值 //bit:要读取的IO编号,0~7 //返回值:此IO的值,0或1 uint8_t PCF8574_ReadBit(uint8_t bit) { uint8_t data; data=PCF8574_ReadOneByte(); //先读取这个8位IO的值 if(data&(1<<bit))return 1; else return 0; } 3.

[c语言]c语言中的#和##作用、参数表省略号作用

1. c语言中的# c语言中的# 用于字符串化参数 #123 相当于 “123” #define STR(X) #X print(STR(123));// 输出字符串 “123” 2. c语言中的## c语言中的## 用于将两个语言符号组合成单个语言符号 #define N(x) N##x int N(1) = 1; //N1 = 1 int N(2) = 2; //N2 = 2 3. c语言函数参数… ...和 __VA_ARGS__ 一般用在一起,用于表示可变参数 #define PR(...) printf(__VA_ARGS__) int main() { int wt=1,sp=2; PR("hello\n"); PR("weight = %d, shipping = %d",wt,sp); return 0; } 输出结果: hello weight = 1, shipping = 2 省略号只能代替最后面的宏参数。 #define W(x,...,y)错误! ##__VA_ARGS__宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错

CSAPP大作业-hello的一生

CSAPP大作业-hello的一生 摘 要 本文通过介绍一个简单程序Hello的一生,详细分析了一个程序由诞生到执行再到消亡的典型过程。虽然程序执行的过程在程序员眼中只是屏幕上的显示的字符串,但在短短几ms内,程序却经历了预处理,编译,汇编链接,进程管理,IO管理,内存分配与回收等等一系列复杂的流程。同时也在本文中梳理了书本的知识,由hello的一生将整本书的内容连贯起来。 关键词:程序人生;计算机系统;程序分析;预处理;编译;汇编;链接;进程 第1章 概述 1.1 Hello简介 程序hello由键盘键入,经历P2P的过程后由文本文件hello.c一步步变成可执行文件hello,再由shell经历了O2O过程:分配内存,执行,再到消亡,被回收,由此完成一个程序复杂又奇妙的一生。 P2P:From Program to Process 指的是程序由一个项目变成一个进程的过程,程序键入键盘并保存为一个名为hello.c的program,之后gcc编译器读取该program,经历预处理得到hello.i文件,再由编译器将文本文件hello.i翻译成汇编程序hello.s,之后通过汇编器将hello.s翻译成机器语言,生成可重定位文件hello.o,最后一步由链接器得到可执行文件hello。生成可执行文件后,program:hello即准备就绪,通过shell安排上岗,为其准备执行的进程process O2O:From OS to IO 指的是可执行程序经过系统os,shell通过execve为其fork子进程加载hello,为hello创建工作场所:代码段,数据段,bss,栈区等等,通过映射共享预取和设置程序计数器,进入main函数。CPU控制其上岗时间,执行逻辑控制流,UnixI/O管理hello的工作,使其产生屏幕上的输出。最后shell将退休的hello回收,OS中的hello将被删除,至此为止hello完成了它的一生 1.2 环境与工具 1.2.1 硬件环境: 处理器:Corei7-1065G7 CPU 1.30GHz 1.50GHz;16GB;1T disk 1.2.2 软件环境: Windows 10 64位;Ubuntu18.04 LTS 64位;codeblocks 1.2.3 开发工具 Codeblocks,gdb,odjdump,edb,readelf等 1.3 中间结果 Hello.c Hello的c语言代码 Hello.i 预处理之后的文本文件 Hello.s 编译之后产生的汇编文件 Hello.ld 链接后的文件 Hello.o 可重定位的目标文件 Hello 可执行文件hello Helloo.objdump Hello.o反汇编文件 Hello.elf Hello的ELF格式 Hello.objdump Hello的反汇编文件 1.4 本章小结 对hello从诞生到执行到消亡的P2P和O2O过程进行了简介,梳理全文脉络,同时介绍了整个过程中所使用的环境和工具。 第2章 预处理 2.1 预处理的概念与作用 预处理的概念:是c语言的一个重要功能,由预处理程序负责完成,将源文件.c预处理成.i文件,主要处理#开始的预编译指令 作用:合理使用预处理功能编写的程序便于阅读,修改,调试,有利于模块化设计 主要功能:1.将源文件中include包含的文件复制到源文件中,例如#include<stdio.h>高速预处理器将文件stdio.h加入到源文件中

jar包完全解读

本文抄自:jar包的一些事儿 前言: 作为java程序员,日常工作就是打jar包,可是对jar包的了解有多少呢? 一、什么是jar包 jar包就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一种文档格式,是一种与平台无关的文件格式,可将多个文件合成一个文件。jar 包与 zip 包非常相似——准确地说,它就是 zip 包,所以叫它文件包。jar 与 zip 唯一的区别就是在 jar 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,该文件是在生成 jar 文件的时候自动创建的,作为jar里面的"详情单",包含了该Jar包的版本、创建人和类搜索路径Class-Path等信息,当然如果是可执行Jar包,会包含Main-Class属性,表明Main方法入口,尤其是较为重要的Class-Path和Main-Class。 此外,值得注意的是,因为jar包主要是对class文件进行打包,而java编译生成的class文件是平台无关的,这就意味着jar包是跨平台的,所以不必关心涉及具体平台的问题。说到jar里面的文件,咱们来看看最普通的一个带有静态页面的springboot项目jar里面的内容,就会发现解压出来的jar并不简单,为了贴近实际咱们未做任何删减,可以看到有很多东西 只需要运行如下指令,就能看到jar里面的内容(调用jar指令的前提是已经配置了jdk的环境变量) jar -tf springbootdemo-0.0.1-SNAPSHOT.jar 其中-tf 后接的jar就是我们要查看的jar。 大致看看里面的东西我们可以发现,除了.MF以及.class文件之外,jar还能打包静态资源文件如.html、.css以及.js等项目所需的一切,这也就意味着咱们能将自己的项目打成jar,即不管是web应用还是底层框架,都能打成jar包。 有的jar包是可以直接通过 java -jar 指令来执行的。我们都知道,有的类之所以能够执行,是因为它用你有main函数,该函数是程序的入口,同理,可执行的jar包中肯定是有某个.class文件提供了main函数才使得其可执行。那么问题来了,一个jar里面可能存在多个.class文件都有main函数的情况,我怎么知道该执行哪个?其实答案非常简单,就是看前面说的MANIFEST.MF里面的Main-Class属性,它会指定函数入口。 二、为什么要打jar包 当我们开发了一个程序以后,程序中有很多的类,如果需要提供给别人使用,发给对方一大堆源文件是非常不好的,因此通常需要把这些类以及相关的资源文件打包成一个 jar 包,把这个 jar 包提供给别人使用,同时提供给使用者清晰的文档。这样他人在拿到我们提供的jar之后,就能方便地进行调用。而且安全。能够对JAR文件进行数字签名,只让能够识别数字签名的用户使用里面的东西。 因此,建议大家在平时写代码搬砖的时候,注意把自己代码的通用部分抽离出来,主键积累一些通用的util类,将其逐渐模块化,最后打成jar包供自己在别的项目或者模块中使用,同时不断打磨jar里面的内容,将其做得越来越容易理解和通用,这样的好处是除了会对你的代码重构能力以及模块抽象能力有很好的帮助之外,更是一种从长期解放你的重复工作量,让你有更多的精力去做其他事情的方式,甚至当你抽象出业内足够通用的jar之后,jar包还能为你带来意想不到的利润(当然公司里该保密的东西还是得保密的)。这也是java发展得如此之好的原因,无论出于盈利或者非盈利的目的,将自己的通用工具或者框架抽取出来,打成jar包供他人调用,使得整个java生态圈变得越来越强大–几乎很多业务场景都能找到对应的jar包。 三、如何打jar包 1、通过jdk命令、 A:含有多个类的jar,类之间存在调用关系 先创建一个java项目,编写两个非常简单的类,Welcome.java和Teacher.jar,其中Welcome类在main函数里调用了Teacher类的静态方法greeting Welcome.java package com.imooc.jardemo1; import com.imooc.jardemo1.impl.Teacher; public class Welcome { public static void main(String[] args) { Teacher.greeting(); } } Teacher.java package com.

网管实战①:H3C S5130 series 交换机配置

今天晚上需要更换楼层交换机,将原来的CISCO设备换成H3C S5130 series 的交换机。 第一次独自配置交换机,开始心里很紧张,担心出问题影响生产,到网上查资料,很快完成了配置,经过实际运行,情况正常,心里才踏实下来。 记录下来,以备后查。 第一步:配置Console的权限 <sysname>Sys //进入系统配置 [sysname]Sysname H3C_7 //这是第7台交换机 [H3C_7]line aux 0 //进入AUX用户视图 [H3C_7-line-aux0]authentication-mode scheme //设置Console口登录的用户进行AAA认证 [H3C_7-line-aux0]quit [H3C_7]local-user admin class manage //进入本地用户视图,创建名称为admin的用户 [H3C_7-luser-manage-admin]password simple 4334 //密码为4334 [H3C_7-luser-manage-admin]service-type terminal //本地用户服务类型为Terminal [H3C_7-luser-manage-admin]authorization-attribute user-role network-admin //设置为网络管理员 [H3C_7-luser-manage-admin]undo authorization-attribute user-role network-operator //删除默认角色 [H3C_7-luser-manage-admin]quit 第二步:配置telnet [H3C_7]telnet server enable //进入系统视图,启用telnet服务 [H3C_7]line vty 0 4 //设置通过VTY用户登录使用AAA认证方式 [H3C_7-line-vty0-4]authentication-mode scheme //AAA认证 [H3C_7-line-vty0-4]quit [H3C_7]local-user userA class manage //创建本地用户userA,类型为manage [H3C_7-luser-manage-userA]authorization-attribute user-role network-admin //角色 [H3C_7-luser-manage-userA]service-type telnet //服务类型 [H3C_7-luser-manage-userA]password simple 4334 //密码为4334 [H3C_7-luser-manage-userA]undo authorization-attribute user-role network-operator //删除默认角色 [H3C_7-luser-manage-userA]quit 配置访问IP [H3C_7]acl number 2000 [H3C_7-acl-basic-2000]rule 10 permit source 1.

Windows10下安装使用tensorflow2.0

1 下载Anaconda Anaconda3-2019.10-Windows-x86_64 2 点击Anaconda安装包进行安装 3 手动将Anaconda添加到系统环境变量中 在安装目录中我们可以找到conda可执行文件的路径: 然后将conda所在的目录添加到环境变量的用户变量中: 用户变量与系统变量的区别: (1) 用户变量为当前账号登陆操作系统所配置的环境变量,如果换了账号登陆则所配的环境变量不起作用; (2) 系统环境变量为全局环境变量,换了账号登陆,所配置的环境变量同样起作用; 扩展知识点:Linux系统下的用户环境变量和系统环境变量 (1) linux用户环境变量,~/.bashrc 与 ~/.profile (2) linux系统环境变量,/etc/bashrc 与 /etc/profile 这样你就可以在任何目录中使用conda命令了。 测试anaconda是否成功添加到环境变量中: conda知识点: (1) 当前系统有哪些虚拟环境:conda info --envs 或者 conda env list; (2) 进入某个环境:activate your_env_name 或者 conda activate your_env_name; (3) 退出某个环境:deactivate your_env_name 或者 conda deactivate your_env_name; (4) 创建虚拟环境:conda create -n your_env_name python=python_version(如3.5),或者 conda create -name your_env_name python=python_version(如3.5) (5) 删除虚拟环境:conda remove -n your_env_name --all 4 安装tensorflow (1) 查看当前存在的环境

c++实现计算器

c++学习告一段落,今天完成了课程设计,很简单的计算器的设计,就把自己的代码分享给大家。` #include #include using namespace std; void A(); /简单数的运算/ template class count1 { t a; t b; public: count1(); void add(); void cut(); void ride(); void exc(); }; void B(); /复数的运算/ class complex { double a, b; public: complex(double c, double d) :a©, b(d) { } complex() {} complex operator +(complex bl); complex operator -(complex bl); complex operator *(complex bl); complex operator /(complex bl); void print(); }; void C(); /矩阵的运算/

2019-12-26-LeetCode【830. 较大分组的位置】

830. 较大分组的位置 在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组。 例如,在字符串 S = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。 我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。 最终结果按照字典顺序输出。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/positions-of-large-groups 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 示例 1: 输入: "abbxxxxzzy" 输出: [[3,6]] 解释: "xxxx" 是一个起始于 3 且终止于 6 的较大分组。 示例 2: 输入: "abc" 输出: [] 解释: "a","b" 和 "c" 均不是符合要求的较大分组。 示例 3: 输入: "abcdddeeeeaabbbcd" 输出: [[3,5],[6,9],[12,14]] 说明: 1 <= S.length <= 1000 思路 双指针,一个确定每一组的头,一个确定每一组的尾巴。如果出现J和J+1不相等的情况(如果这一段长度>=3,就将这一段的头和尾存放起来),则将头部的指针置为J+1,使尾部的指针遍历整个数组。 代码 class Solution { public: vector<vector<int>> largeGroupPositions(string S) { int len = S.

Android Studio 使用夜神模拟器查看apk打印日志

Android Studio 使用夜神模拟器查看apk打印日志步骤: 1、打开Android Studio 创建 一个新的Android 项目。 此时点击运行,查看模拟器可知没有夜神模拟器设备 2、打开夜神模拟器 3、使用adb命令连接夜神模拟器 adb connect 127.0.0.1:62001 4、再次点击Android Studio 的运行,就可以看见夜神模拟器了,选择、OK。 5、执行夜神模拟器中的app,查看Android Studio 中是否有日志输出。 这样就可以了!

18.Python爬虫之Scrapy框架

scrapy 框架 01. Scrapy 链接02. Scrapy 的爬虫流程03. Scrapy入门04. setting.py文件中的常用设置4.1. logging模块的使用4.2. ==scrapy项目中的setting.py常用配置内容(待续)== 05. scrapy框架糗事百科爬虫案例06. scrapy.Request知识点07. 思考 parse()方法的工作机制08. CrawlSpider爬虫微信小程序crawlspider爬虫 09. Scrapy 发送post请求案例(人人网登录案例)10. scrapy框架豆瓣网登录案例(验证码识别技术)(待爬)11. scrapy 下载图片和文件方法(汽车之家宝马五系高清图片下载)12. crawl spider 下载图片和文件方法(汽车之家宝马五系高清图片下载)13. 下载器中间件-设置随机请求头14. [ip代理中间件(快代理)](https://pan.baidu.com/s/1U6KnIFOYhS9NT7iXd4t84g)15. Scrapy Shell16. 攻克Boss直聘反爬虫(待调整)17. 动态网页的数据爬取17.1.安装Selenium17.2. 安装chromedriver17.3 第一个小案例17.4. 定位元素17.5. selenium 操作表单元素17.6. 行为链17.7. cookie的操作17.8. 页面等待17.9. 切换页面17.10. selenium 使用代理WebElement元素 18. Selenium 拉勾网爬虫19. Scrapy+Selenium爬取简书网整站,并且存入到mysql当中20. selenium设置代理和UserAgent21. [http://httpbin.org 测试接口解析](https://blog.csdn.net/chang995196962/article/details/91362364) 01. Scrapy 链接 Scrapy中文维护站点Scrapy框架官方网址 02. Scrapy 的爬虫流程 Scrapy Engine(引擎) 总指挥: 负责数据和信号的在不同模块之间的传递(Scrapy已经实现) Scheduler(调度器) 一个队列, 存放引擎发过来的request请求(Scrapy已经实现) Downloader(下载器) 下载把引擎发过来的requests请求,并发回给引擎(Scrapy已经实现) Spider(爬虫) 处理引擎发来的response,提取数据, 提取url, 并交给引擎(需要手写) Item Pipeline(管道) 处理引擎传过来的数据, 比如存储(需要手写) Downloader Middlewares(下载中间件) 可以自定义的下载扩展,比如设置代理, 请求头,cookie等信息 Spider Middlewares(中间件) 可以自定义requests请求和进行response过滤 03.

自然语言处理(机器翻译IBM模型 系列)

机器翻译方法概述 直接转换法基于规则的翻译方法基于中间语言的翻译方法基于语料库的翻译方法 - 基于事例的翻译方法 - 统计翻译方法 - 神经网络机器翻译 基于规则的翻译过程分成6个步骤: (a) 对源语言句子进行词法分析 (b) 对源语言句子进行句法/语义分析 © 源语言句子结构到译文结构的转换 (d) 译文句法结构生成 (e) 源语言词汇到译文词汇的转换 (f ) 译文词法选择与生成 对基于规则的翻译方法的评价: 优点: 可以较好地保持原文的结构,产生的译文结构与源文的结构关系密切,尤其对于语言现象已知的或句法结构规范的源语言语句具有较强的处理能力和较 好的翻译效果。 弱点: 规则一般由人工编写,工作量大,主观性强,一致性难以保障,不利于系统扩充,对非规范语言现象缺乏相应的处理能力 统计机器翻译 噪声信道模型 一种语言T 由于经过一个噪声信道而发生变形,从而在信道的另一端呈现为另一种语言 S (信道意义上的输出,翻译意义上的源语言)。翻译问题实际上就是如何根据观察到的 S,恢复最为可能的T 问题。这种观点认为,任何一种语言的任何一个句子都有可能是另外一种语言中的某个句子的译文,只是可能有大有小[Brown et. al, 1990]。 统计翻译中的三个关键问题: (1)估计语言模型概率 p(T); (2)估计翻译概率 p(S|T); (3)快速有效地搜索T 使得 p(T)×p(S | T) 最大 翻译概率计算 实际上,p(S, A|T) 可以写成多种形式的条件概率的乘积,上式只是其中的一种。在上式的基础上,IBM 的研究人员通过采用不同的假设条件得到了5个翻译模型,分别称作 IBM 翻译模型1、2、3、4 和 5。 最大熵模型(生成式) 最大熵方法的基本思想 任务: 对于一个随机事件,假设已经有了一组样例,我们希望建立一个统计模型来模拟这个随机事件的分布 目标: 对于一组特征,使得统计模型在这一组特征上的模型分布与样例中的经验分布完全一致,同时不对未知事件作任何假设,即保证这个模型尽可能的“均匀”(也就是要求模型的熵值达到最大)

架构师成长路线

程序员到架构师的技术成长之路分为几个典型的阶段:工程师 - 高级工程师 - 技术专家 - 初级架构师 - 中级架构师 - 高级架构师 工程师 【阶段描述】 成为一个合格的工程师需要1 ~ 3年时间,其典型特征是“在别人的指导下完成开发”,这里的“别人”主要是“高级工程师”或者“技术专家”,通常情况下,高级工程师或者技术专家负责需求分析和讨论、方案设计,工程师负责编码实现,高级工程师或者技术专家会指导工程师进行编码实现。 【成长指导】 工程师阶段是最原始的“基础技能积累阶段”,主要积累基础知识,包括编程语言、编程工具、各类系统的基本使用。以Java后端工程师为例,工程师阶段需要积累的经验和技能有: Java的语法、基本数据结构的使用。 Eclipse、IDEA、Maven、Linux命令行等各种工具。 数据库CRUD操作、缓存的基本使用等。 业务系统的基本流程。 工程师阶段最好的学习方法就是找经典的书籍系统地学习,而不要遇到一个问题到网上搜搜然后就解决了事。以Java为例,《Java编程思想》《Java核心技术》《TCP/IP协议》这类大部头,一定要完整地看一遍,即使里面很多内容当前工作暂时用不上。 高级工程师 【阶段描述】 成长为高级工程师需要2 ~5年时间,其典型特征是“独立完成开发”,包括需求分析、方案设计、编码实现,其中需求分析和方案设计已经包含了“判断”和“选择”,只是范围相对来说 小一些,更多是在已有架构下进行设计。以Java后端工程师为例,高级工程师需要完成的工作包括: MySQL数据库表如何设计,是设计成两个表还是三个表? 是否要用缓存,缓存的Key和Value如何设计,缓存的更新策略是什么? 产品提出的需求是否合理?是否有更好的方式来满足? 【成长指导】 从普通工程师成长为高级工程师,主要需要“积累方案设计经验”,简单来说就是业务当前用到的相关技术的设计经验。以Java后端高级工程师为例,包括:表设计经验、缓存设计经 验、业务流程设计经验、接口设计经验等。当接到一个业务需求的时候,高级工程师能够组合这些设计经验,最终完成业务需求。 高级工程师阶段相比工程师阶段,有两个典型的差异: 深度:如果说工程师是要求知道How,那高级工程师就要求知道Why了。例如Java的各种数据结构的实现原理,因为只有深入掌握了这些实现原理,才能对其优缺点和使用场景 有深刻理解,这样在做具体方案设计的时候才能选择合适的数据结构。 理论:理论就是前人总结出来的成熟的设计经验,例如数据库表设计的3个范式、面向对象的设计模式、SOLID设计原则、缓存设计理论(缓存穿透、缓存雪崩、缓存热点)等。 针对技术深度,我的建议还是系统地学习,包括看书和研究源码。例如,研究Java虚拟机可以看《深入理解Java虚拟机》、研究MySQL可以看《MySQL技术内幕:InnoDB存储引 擎》、研究Memcache可以去看其源码。 针对设计理论,由于涉及的点很多,没有一本书能够涵盖这么多的设计点,因此更多的是依靠自己去网上搜索资料学习。那我们怎么知道哪些地方会有设计理论呢?简单来说,就是 假设每个设计环节都有设计理论,然后带着这种假设去搜索验证看看是否真的有很熟的设计理念。 技术专家 【阶段描述】 成长为技术专家需要4 ~ 8年时间,其典型的特征是“某个领域的专家”,通俗地讲,只要是这个领域的问题,技术专家都可以解决。例如:Java开发专家、PHP开发专家、Android开 发专家、iOS开发专家、前端开发专家等。通常情况下,“领域”的范围不能太小,例如我们可以说“Java开发专家”,但不会说“Java多线程专家”或“Java JDBC专家”。 技术专家与高级工程师的一个典型区别就是,高级工程师主要是在已有的架构框架下完成设计,而技术专家会根据需要修改、扩展、优化架构。例如,同样是Java开发,高级工程师 关注的是如何优化MySQL的查询性能,而技术专家可能就会考虑引入Elasticsearch来完成搜索。 【成长指导】 从高级工程师成长为技术专家,主要需要“拓展技术宽度”,因为一个“领域”必然会涉及众多的技术面。以Java后端开发为例,要成为一个Java开发专家,需要掌握Java多线 程、JDBC、Java虚拟机、面向对象、设计模式、Netty、Elasticsearch、Memcache、Redis、MySQL等众多技术。常见的拓展技术宽度的方法有: 学习业界成熟的开源方案,例如,Java开发可以去学习Redis、Memcache、Netty等,Android开发可以去研究Retroft、Fresco、OkHttp等。 研究业界的经验分享,例如BAT、FANG等大公司的经验,可以通过参加技术大会等方式去近距离了解。 需要注意的是,拓展技术宽度并不意味着仅仅只是知道一个技术名词,而是要深入去理解每个技术的原理、优缺点、应用场景,否则就会成为传说中的“PPT技术专家”。例如, 以Java开发为例,知道Netty是个高性能网络库是远远不够的,还需要学习Netty的原理,以及具体如何使用Netty来开发高性能系统。 初级架构师 【阶段描述】 成长为初级架构师需要5 ~ 10年时间,其典型特征就是能够“独立完成一个系统的架构设计”,可以是从0到1设计一个新系统,也可以是将架构从1.0重构到2.0。初级架构师负责的系 统复杂度相对来说不高,例如后台管理系统、某个业务下的子系统、100万PV量级的网站等。 初级架构师和技术专家的典型区别是:架构师是基于完善的架构设计方法论的指导来进行架构设计,而技术专家更多的是基于经验进行架构设计。简单来说,即使是同样一个方案,初级架 构师能够清晰地阐述架构设计的理由和原因,而技术专家可能就是因为自己曾经这样做过,或者看到别人这样做过而选择设计方案。 但在实践工作中,技术专家和初级架构师的区别并不很明显,事实上很多技术专家其实就承担了初级架构师的角色,因为在系统复杂度相对不高的情况下,架构设计的难度不高,用 不同的备选方案最终都能够较好地完成系统设计。例如,设计一个日PV 100万的网站,MySQL + Memcache + Spring Boot可以很好地完成,MongoDB + Redis + Nginx +

'cnpm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

安装node总是出现这个问题,见图 起初我以为是安装过程中出现某些问题,反反复复卸了装,装了卸,最后经过度娘的指导,解决了,笨方法: 根据提示找到cnpm的文件位置:将cnpm和cnpm.cmd拷贝到你安装的node的文件夹中,说不清,见图 还有,没完,又出现了这个错误,注意标红区域,我个人理解,就将\node_modules\文件夹中的cnpm文件拷贝到node里的同名文件夹下,就成了,哈哈

19. 卫健委官网医院查询爬虫+验证码识别(云打码)综合案例

1. 主类Spider import os import random import requests import xlrd from lxml import etree from pymongo import MongoClient from retrying import retry from com.medchat.Settings import * from com.medchat.util.dama import indetify class OrganizationTypeSpider: """机构类型搜索的爬虫""" def __init__(self): self.url = "http://zgcx.nhfpc.gov.cn:9090/unit/index" self.code_url = "http://zgcx.nhfpc.gov.cn:9090/CaptchaGenerate/Generate/" self.headers = { "User-Agent": "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, " "like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"} self.session = None self.client = MongoClient(host="192.168.1.27", port=27017) self.collection = self.

MintUI中的mt-popup中嵌套mt-popup

常用的vue移动端组件库:官网 需求场景:弹窗上还有一层弹窗(如弹窗上的日期组件),使用MintUI中的mt-popup来实现 惯性思维,会这样写: <mt-popup> <mt-popup></mt-popup> </mt-popup> 这个是错误的,这样导致层级错误 正确写法: <mt-popup></mt-popup> <mt-popup></mt-popup> 还需要修改toast的堆叠层级,会被覆盖,在app.vue中修改 .mint-toast { z-index: 2043 !important; }

mysql(sqlServer) and or and执行顺序

关系型运算符优先级高到低为:NOT >AND >OR 如果where 后面有OR条件的话,则OR自动会把左右的查询条件分开。 也就是说,在没有小括号()的干预下,总是先执行AND语句,再执行OR语句。 例: select * from table where 条件1 AND 条件2 OR 条件3 等价于 select * from table where ( 条件1 AND 条件2 ) OR 条件3 select * from table where 条件1 AND 条件2 OR 条件3 AND 条件4 等价于 select * from table where ( 条件1 AND 条件2 ) OR ( 条件3 AND 条件4 ) 

将数据库中数据导出为excel表格

public class Excel { private static Logger logger = LoggerFactory.getLogger(Excel.class); /** * 导出项目列表 * * @param jsonArray * @param request * @param response * @return */ public static Result createCloudServerXls(JSONArray jsonArray, HttpServletRequest request, HttpServletResponse response) { try { // 创建HSSFWorkbook String sheetName = "报表导出"; //表头,根据自己需求更改 String[] cellTitle = new String[]{"学号","姓名","年龄","班级"}; String[][] rows = null; List<Student> list = JSONArray.parseArray(jsonArray.toJSONString(), Student.class); if (!ListTool.isEmpty(list)) { rows = new String[list.size()][4]; for (int i = 0; i < list.

图解TCPIP-传输层 端口

1.数据链路:MAC地址 2.网络层:IP地址 3.传输层:端口(port)可称为程序地址. 1.标准既定端口号,知名端口号(Well-Known Port Number):0-1023. 其他端口:1024- 2.时序分配法.客户端没必要确定端口号,由系统来确定. 49152-65535 3.端口号,与传输协议无关,TCP和UDP可以发送到同一个端口处理

排列问题的重参数技巧

近日研读了一篇发表在ICLR 2018上的文章:《LEARNING LATENT PERMUTATIONS WITH GUMBEL- SINKHORN NETWORKS》, 其介绍了一种能够将二维张量以可微分的形式转变为转置矩阵的方法。使得指派、重排等不可微分操作能够以可微分的形式结合到神经网络当中。由此,我们便可使BP算法学习这些操作,以实现神经网络的数字排序、拼图等算法。 BP之痛 直面评价指标? 其实我在最初使用神经网络分类时有一个很幼稚的想法,对于最后的分类。能否设计这样一个损失函数: l o s s _ s i n g l e = { 0 p r e d i c t = = y 1 p r e d i c t ! = y loss\_single = \begin{cases} 0 & predict == y \\ 1 & predict \ != y \end{cases} loss_single={01​predict==ypredict !=y​ 最后,我们取所有样本损失的平均为最终的loss。这样我们就可以直接优化最终的指标:准确率,不是很美好吗?实现见以下代码: import torch x = torch.

html——标签分类

标签分类 文件标签:构成html最基本的标签 html:html文档的根标签head:头标签。用于指定html文档的一些属性。引入外部的资源title:标题标签。body:体标签 文本标签:和文本有关的标签 注释:< !-- 注释内容 --> < h1> to < h6>:标题标签 h1~h6:字体大小逐渐递减 < p >:段落标签 < br>:换行标签 < hr>:展示一条水平线 1. 属性: 2. color:颜色 3. width:宽度 4. size:高度 5. align:对其方式 6. center:居中 left:左对齐 right:右对齐 7. < b>:字体加粗 8. < i>:字体斜体 9. < font>:字体标签 属性: color:颜色 size:大小 face:字体 10. < center>:文本居中 属性定义: color: 1. 英文单词:red,green,blue 2. rgb(值1,值2,值3):值的范围:0~255 如 rgb(0,0,255) 3. #值1值2值3:值的范围:00~FF之间。如: #FF00FF width: 1. 数值:width=‘20’ ,数值的单位,默认是 px(像素) 2. 数值%:占比相对于父元素的比例

干货分享!骨灰级宅男珍藏的6大资源网站,个个都很强大

2020元旦假不想出门浪,这6个资源丰富的网站,让你宅家也精彩 高福利的6大资源网站都在这里了,你绝对用得着,建议收藏 小说、电影、办公……这6个高效资源网站,让你相见恨晚! 节假日不想出去看“人头”,宅在家又怕无聊?想看好一点的电影小说,但动不动要收费?四处找资源,浪费时间浪费精力?今天分享5个高效干货级的资源网站,为你解决这些烦恼! 1、纪录片网站——纪录片天地 这里面有科学探索、社会生活、生态地理、文化历史等非常难得的纪录片。更新速度快,支持下载和保存,资源强大,如果你爱看纪录片,一定会相见恨晚。 2、办公网站——办公资源 一款能够下载PPT、Excel、Word模板的资源网,建议职场的朋友去这个网站看看,白领在工作时很多模板可以套用,能提高效率。另外,学生、老师都可以找到适合的PPT模板。 3、电影网站——字幕库 字幕库是一个电影字幕搜索网站。它支持电影字幕,美剧字幕搜索,可以下载,也可以直接播放,让你不再东寻西找,浪费时间。 4、 动漫网站——喵搜 一款搜索动漫资源的的网站,里面不仅有动漫、漫画、音乐以及字幕、萌图等,还提供下载,在线漫画观看,因有尽有。 5、音乐网站——音乐搜索器 音乐与生活是密不可分的,但现在很多歌分散在不同平台,还有要开通VIP,要收费才可以播放和下载,这个网站多站合一,支持在线播放和下载。 以上这些资源丰富、种类齐全的网站建议大家收藏,方便更高效的找到自己想要的东西。 6、小说网站——免费小说 诸葛小说(网址)是一个精品实用的网站,上面有不少热门的免费小说,包括玄幻小说、网游小说、怪本小说,言情小说、穿越小说、都市小说等各类型高质量的作品,资源丰富,齐聚纵横,更新快,阅读体验也不错,学生党上班族都可以找到你爱看的小说。

解决Error creating bean with name 'redisTemplate' defined in class path resource [org/异常问题

问题描述 最近使用Springboot 整合Redis出现了这类问题: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘redisTemplate’ defined in URL [org…; nested exception is java.lang.NoSuchMethodError: org.springframework.core.serializer.support.DeserializingConverter 这是由于jedis 和spring-boot-starter-data-redis 的maven依赖的版本不兼容导致, 是经常会出现的问题。 出现JedisConnectionFactory 无法创建也是一样。 解决如下 为了修改版本号,尝试了很久的,终于找到了两个可以兼容的版本,使用如下依赖,起码笔者没有问题。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.1.3.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.1</version> </dependency>

vue的安装

为了提高我们的效率,可以使用淘宝的镜像:http://npm.taobao.org/ 输入:npm install -g cnpm –registry=https://registry.npm.taobao.org,即可安装npm镜像,以后再用到npm的地方直接用cnpm来代替就好了。 可以使用vue -h 来查看帮助文档 看看vue 是否安装好 可以使用 vue list 来查看打包支持的模板 说明: Vue build ==> 打包方式,回车即可; Install vue-router ==> 是否要安装 vue-router,项目中肯定要使用到 所以Y 回车; Use ESLint to lint your code ==> 是否需要 js 语法检测 目前我们不需要 所以 n 回车; Set up unit tests ==> 是否安装 单元测试工具 目前我们不需要 所以 n 回车; Setup e2e tests with Nightwatch ==> 是否需要 端到端测试工具 目前我们不需要 所以 n 回车; 1、build:构建脚本目录 1)build.js ==> 生产环境构建脚本; 2)check-versions.js ==> 检查npm,node.

解决IDEA加载Maven依赖缓慢问题(使用阿里Maven仓库)

老是找别人的笔记,太不方便了,自己记录一下。 1、查找maven配置文件的路径 2、idea内置的maven貌似没有setting.xml配置文件,我这里直接复制本地下载了的maven的setting.xml,存到上图中的路径,并进行修改。 这里我把maven3.6.3的setting.xml贴出来: <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.

Fiddler 配置抓app包的流程(含模拟器、真机)

做个笔记,加深印象。 一、抓模拟器上的app请求(夜神模拟器) 1、打开Fiddler,配置参数 2、进行上述配置后,打开夜神模拟器的 设置 ——> 点击 WLAN ——> 长摁 WiredSSID 弹出修改网络(如图2.1) ——> 点击修改网络 ——> 点击高级选项;点击手动代理,配置代理服务器主机名和端口(如图2.2) ——> 保存。 (图 2.1) (图2.2) 参数注明: 代理服务器主机名填写本机的IP地址代理服务器端口端口号对应Fiddler中设置的端口 3、使用野生模拟器访问" IP地址:8888/ " ,进行证书的下载。 拉到底部,点击下载Fiddler证书 4、下载好后,退出浏览器 ——> 手机设置 ——> 安全 ——> 从SD卡安装(如图4.1) ——> 为证书命名(如图4.2) ——> 按提示填写个密码啥的 ——> 确定。 (4.1) (4.2) ok,现在代理弄好了,夜神模拟器的网络请求都会由本机转发出去,Fiddler可以抓到包了。 二、真机抓app包 想用电脑端的Fiddler抓手机真机的包,和上面的虚拟机相同原理,不过有一点不同,就是需要两部设备处于同一局域网,简单的说就是连接同一个wifi,然后将手机WIFI的高级设置中的,手动代理的IP填写成电脑端的IP地址,端口填写Fiddler中的端口,就O了。 -------------------------------------------------------------------------------------------------------------- 补充:Fillder如果只想抓应用的发出的请求,可以通过Fillder设置。

vue 点击按钮获取60秒倒计时

html <div class="button"> <van-button type="info" v-show="show" @click="getCode">获取验证码</van-button> <van-button type="info" v-show="!show" class="count">{{count}} s</van-button> </div> data return { show: true, count: '', timer: null, } js getCode(){ const TIME_COUNT = 10; if (!this.timer) { this.count = TIME_COUNT; this.show = false; this.timer = setInterval(() => { if (this.count > 0 && this.count <= TIME_COUNT) { this.count--; } else { this.show = true; clearInterval(this.timer); this.timer = null; } }, 1000) } }