安装VMware Tools
有时候当我们在VMware虚拟机上安装成功了一个系统镜像之后,你会发现VMware在全屏时,系统桌面在VMware中不能通过调节自动适应客户机,因此我们需要安装VMware Tools 工具,在此我以Ubuntu系统为例,其他的一些操作也类似,亲测Linux也有效果:
1、此时可以点击界面底部提醒我们安装VMware Tools的弹框的“安装Tools”按钮,或者,点击VMware 导航栏上的“虚拟机”,然后在下拉框中点击“安装VMware Tools”;
2、完成后进入Ubuntu,桌面可能会出现VMware Tools的光盘,有则点击进入其中,没有则自行进入主目录寻找
3、进入后看到一个压缩文件VMwareTools-10.25-8068393.tar.gz(中间数组不同的虚拟机版本可能会不同),复制文件到主目录下面(即home 个人用户名的目录下)
4、按【Ctrl+Alt+T】调出终端命令界面,输入命令
tar -zxvf VMware Tools-10.25-8068393.tar.gz 然后回车,解压文件是快捷方式输入括号里的【tar -zxvf 】后按Tab 会自动补全文件名字
5、解压完成后会出现一个vmware-tools-distrib的文件
6、输入命令
cd vmware-tools-distrib 回车后输入命令
sudo ./vmware-install.pl 回车后输入密码,然后就开始安装,按照[中括号]里的提示输入,遇到yes就输入yes,其他一律回车
7、如图显示VMware tools安装成功
以上就是解决VMware虚拟机无法自适应全屏的教程
————————————————
版权声明:本文为CSDN博主「刘小小小小刘」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39478237/article/details/83084515
1
案例描述:
设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反
案例分析:
分析问题:分析问题的计算部分;
确定问题:将问题划分为输入、处理及输出部分;
设计算法:计算部分的核心(输出 = 输入 / 汇率);
代码:
""" 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助, 群里还有不错的视频学习教程和PDF电子书! """ # 汇率 USD_VS_RMB = 6.77 # 人民币的输入 rmb_str_value = input('请输入人民币(CNY)金额:') # 将字符串转换为数字 rmb_value = eval(rmb_str_value) # 汇率计算 usd_value = rmb_value / USD_VS_RMB # 输出结果 print('美元(USD)金额是:', usd_value) 补充说明:
1、#用于单行注释
2、以三个单引号开始三个单引号结束用于多行注释
#单行注释说明 ''' 用于多行注释说明 ''' 或 """ 用于多行注释说明 """ 2
新增功能:
根据输入判断是人民币还是美元,进行相应的转换计算
案例分析:
输入:带单位的货币金额
代码:
""" 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助, 群里还有不错的视频学习教程和PDF电子书! """ # 汇率 USD_VS_RMB = 6.
A2J: Anchor-to-Joint Regression Network for 3D Articulated Pose Estimation from a Single Depth Image 简介: 这是我们在ICCV 2019的一篇论文,文章主要解决的是基于单张深度图像的手势以及人体的3D姿态估计问题,我们首次提出了将经典目标检测的anchor的概念应用到姿态估计任务中来,设计了一种简洁有效的方法,最终在包括三个手势姿态估计数据集(HANDS2019,ICVL,NYU)以及两个人体姿态估计数据集(ITOP,K2HPD)上取得了state-of-the-art的效果。
这里对文章做一个简要的介绍,欢迎大家讨论,相互学习,同时,如果你对我们的工作有兴趣,可以下载阅读我们的论文:https://arxiv.org/abs/1908.09999。同时,代码也即将给出:https://github.com/zhangboshen/A2J。
Anchor-to-Joint: 首先给出两张paper中的示意图。左图是我们技术方案的一个流程示意,对于一张给定的输入深度图片(这里假设输入仅包含单个手或人体,前面需要一个检测器的预处理步骤,类似于human pose的Top-down思路),我们密集的在图像上设立anchor point,如右图所示,每隔 s t r i d e = 4 stride=4 stride=4个像素点就会设立一个anchor point,最终的关节点预测将会通过这些anchor point去完成。具体而言,每个锚点需要针对所有关节点预测一个图像坐标下的偏移量(左图中的绿色箭头)以及一个深度值,最终的关节点坐标将由所有锚点加权投票得出(权重是可学习的,左图中红色的anchor point就是权重值比较大的点,我们称之为informative anchor point)。
技术实现: 为了实现上面的思路,我们采取的技术流程如下图所示。Backbone我们在实验中主要基于ResNet50,也对比进行了其他的网络结构。输出包含三个分支,一个是图像坐标系下面的偏移量输出,一个是深度值输出,最后一个是对anchor point进行加权的anchor proposal分支输出。第三支的输出结果经过softmax之后直接乘在前面两支的输出结果上对anchor point投票进行权重赋值。
上面的技术方案有几个特点:
1)Anchor proposal分支可学习,对于不同的关节点,Informative anchor point的分布是不一样的,因此,A2J具有针对不同关节点的自适应性;
2)网络中不包含Deconv层,这里区别于目前主流的Heatmap的做法,不需要上采样使得我们的算法速度更快,结构更简单;
3)End-to-end training,我们最终的loss来自于anchor point加权投票之后的预测输出以及GT之间的差异,不需要对GT进行任何形式的变换。
4)快。网络结构简单,前向推理的速度很快,我们在NVIDIA 1080Ti的实测速度超过100fps。
网络结构 上面提到Backbone基于ResNet来提取特征,事实上我们对ResNet的结构进行了一些小的调整,使得最终编码得到的特征是经过16倍下采样的(而不是32倍)。对于三个输出分支,我们的结构选择如下所示,即4个3×3的卷积就直接进行输出。最终的输出是对于每一个anchor point都会有上面提到的offset、depth以及置信度输出。
损失函数 对于损失函数的选择,我们使用SmoothL1作为距离衡量标准,最终的损失包括 l o s s 1 loss_1 loss1和 l o s s 2 loss_2 loss2两项, l o s s 1 loss_1 loss1用于衡量预测值与GT之间的差异:
下载源码
官网地址:https://cmake.org/files/
wget https://cmake.org/files/LatestRelease/cmake-3.15.3.tar.gz 解压
tar -vxf cmake-3.15.3.tar.gz 安装
cd cmake-3.15.3 ./bootstrap --prefix=/usr/local gmake gmake install 查看编译后的版本
/usr/local/bin/cmake --version 移除原来的cmake版本
yum remove cmake -y 新建软连接
ln -s /usr/local/bin/cmake /usr/bin/ 查看最终版本
cmake --version 参考:
http://www.360doc.com/content/18/0123/10/14679766_724362110.shtml
一、什么是screen?
screen命令用于新建一个或多个“命令行窗口”,在新建的这“窗口”中,可以执行命令;每个“窗口”都是独立并行的。
二、安装screen
要想使用screen,当然得有screen了,不是所有的linux系统都安装了screen,如果木有安装,可以使用一下命令安装:
yum install screen -y
三、使用screen
1.创建会话:最简单的就是直接输入screen回车,一个新会话就完成了(debian下会有提示,再按一次回车就可以了),但偶还是推荐用下面的命令来创建会话:
screen -S php
上面命令的意思就是新创建一个名为php的会话,这时你可以继续输入其它命令,如编译php,费时很长,不用管它,喝杯茶先;
2.离开会话,按住键盘上的ctrl,然后依次按a和d,好了,又回到主会话了,这时你可以继续创建其它会话或者执行其它命令,对我们创建的会话内容没有任何影响,你甚至可以退出会话;
3.恢复创建的会话:如果还记得会话名称,可以输入命令:
screen -r php
上面命令的意思就是恢复名为php的会话,如果你只创建了一个会话,直接如入命令
screen -r
就可以恢复了,如果不记得会话名称或者我直接输入screen创建的会话,怎么办呢,那就要用到下面的命令;
四.查看已经创建的会话:
screen -ls
上面的命令的意思就是查看本机已经创建的会话,可以查看会话的名称和id,恢复时可以使用id代替名称;
五.有时在恢复screen时会出现There is no screen to be resumed matching ****,遇到这种情况咋办呢?输入命令
screen -d ****
然后再使用恢复命令恢复就ok了
六.退出screen,使用screen会耗费一定的系统资源,所以当screen中的命令执行完毕之后,最好退出screen,直接输入命令
exit
就可以退出了。
七.其它命令
Ctrl + a,d #暂离当前会话
Ctrl + a,c #在当前screen会话中创建一个子会话
Ctrl + a,w #子会话列表
Ctrl + a,p #上一个子会话
Ctrl + a,n #下一个子会话
转载于:https://www.cnblogs.com/jim-xu/p/11532862.html
每篇一句 罗斯:选秀状元可能有水货,但MVP绝对没有
前言 在上篇文章(讲解@LoadBalanced负载均衡)的末尾,我抛出了一个很重要的问题,建议小伙伴自己深入思考一番;本文主要针对此问题,作出一个统一的答复和讲解。
由于本人觉得这块知识点它属于Spring Framework的核心内容之一,非常的重要,因此单拎出来作专文讲述,希望对你有所帮助。
背景案例 说到@Qualifier这个注解大家并不陌生:它用于“精确匹配”Bean,一般用于同一类型的Bean有多个不同实例的case下,可通过此注解来做鉴别和匹配。
本以为@Qualifier注解使用在属性上、类上用于鉴别就够了,直到我看到LoadBalancerAutoConfiguration里有这么应用:
@LoadBalanced @Autowired(required = false) private List<RestTemplate> restTemplates = Collections.emptyList(); 它能把容器内所有RestTemplate类型并且标注有@LoadBalanced注解的Bean全注入进来。
这个用法让我非常的惊喜,它给我提供额外一条思路,让我的框架多了一种玩法。为了融汇贯通它,使用起来尽量避免不采坑,那就只能揭开它,从底层原理处理解它的用法了。
QualifierAnnotationAutowireCandidateResolver详解 它是依赖注入候选处理器接口AutowireCandidateResolver的实现类,继承自GenericTypeAwareAutowireCandidateResolver,所以此类是功能最全、最为强大的一个处理器(ContextAnnotationAutowireCandidateResolver除外~),Spring内默认使用它进行候选处理。
它几乎可以被称为@Qualifier注解的"实现类",专门用于解析此注解。
带着上面的疑问进行原理分析如下:
// @since 2.5 public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwareAutowireCandidateResolver { // 是个List,可以知道它不仅仅只支持org.springframework.beans.factory.annotation.Qualifier private final Set<Class<? extends Annotation>> qualifierTypes = new LinkedHashSet<>(2); private Class<? extends Annotation> valueAnnotationType = Value.class; // 空构造:默认支持的是@Qualifier以及JSR330标准的@Qualifier public QualifierAnnotationAutowireCandidateResolver() { this.qualifierTypes.add(Qualifier.class); try { this.qualifierTypes.add((Class<? extends Annotation>) ClassUtils.forName("javax.inject.Qualifier", QualifierAnnotationAutowireCandidateResolver.class.getClassLoader())); } catch (ClassNotFoundException ex) { // JSR-330 API not available - simply skip.
快捷键总结,随时更新
Mac android studio 常用快捷键
1、command + delete 删除一行
2、command + option + L 格式化代码
3 control + option + i 格式化代码
4、shift + shift 查找文件或者类
5、command + shift + O 查找文件
6、option 然后拖住鼠标左键 多行操作
7、shift + F6 重命名
Xcode 常用快捷键
1、control + I (i) 格式化代码
2、option 然后拖住鼠标左键 多行操作
3、command + shift + O 查找文件
4、command + option + [ / ] 上下移动
5、 command + ] / [ 左右移动
文章目录 通过pecl 安装问题: ` fatal error: ‘openssl/ssl.h‘ file not found`问题:`#error "Enable openssl support, require openssl library"`成功信息安装成功后依赖提示缺少`swoole`库 通过pecl 安装 参考官方文档
pecl install swoole 问题: fatal error: ‘openssl/ssl.h‘ file not found 如果没安装openssl的话, 先安装openssl
`brew install openssl` 如果已安装 , 则做一个链接
ln -s /usr/local/opt/openssl/include/openssl /usr/local/include/openssl 问题:#error "Enable openssl support, require openssl library" 安装提示 enable openssl support?[no] 时 , 直接使用brew安装的openssl目录即可 , 输入
yes --with-openssl-dir=/usr/local/Cellar/openssl/1.0.2q/ 参考链接: https://www.cnblogs.com/xiaobaiskill/p/11062024.html
成功信息 Build process completed successfully Installing '/Applications/MAMP/bin/php/php7.3.8/include/php/ext/swoole/config.h' Installing '/Applications/MAMP/bin/php/php7.
洛谷 P1064 金明的预算方案 题解 洛谷 P1064
金明的预算方案
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:
主件附件电脑打印机,扫描仪书柜图书书桌台灯,文具工作椅无 如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为555等:用整数1−5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是10元的整数倍)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
请你帮助金明设计一个满足要求的购物单。
输入格式
第1行,为两个正整数,用一个空格隔开:
N,m (其中N(<32000)表示总钱数,m(<60)为希望购买物品的个数。) 从第2行到第m+1行,第jjj行给出了编号为j−1的物品的基本数据,每行有3个非负整数v、p、q(其中v表示该物品的价格(v<10000),p表示该物品的重(1−5),q表示该物品是主件还是附件。如果q=0,表示该物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号)
输出格式
一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<200000)。
输入输出样例
输入 #1
1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0
输出 #1
2200
说明/提示
NOIP 2006 提高组 第二题
题目解释 这题就是一道经典的01背包,求最大的价值。只不过情况有点多
1.不选
2.只选主件
3.选主件&1号附件
4.选主件&2号附件
5.选主件&所有附件
能不能选在于空间大小的判断啦。
预处理 2个一维数组,存储主件的质量(w),主件的价值(q);
2个结构体,分别存储1、2号附件的质量与价值。
不会结构体的蒟蒻,6个一维数组也可以,我就是刚学,练练手
for (int i=1;i<=n;i++) { scanf("%d%d%d",&x,&y,&z); if (z!=0) { if (v1[z].w==0) { v1[z].
1.编辑配置文件
vim ~/.bash_profile 2.配置环境变量
export PATH="/Applications/MAMP/bin/php/php7.3.8/bin:$PATH" 3.刷新配置文件, 使其生效
source .bash_profile 4.查看PHP版本的引用路径
which php 5.查看PHP版本
php -v 备注:
如果shell使用的是zsh,那么编辑和刷新的文件改为~/.zshrc即可
文章目录 基础环境插件安装系统设置Publish over SSH 全局工具配置新建任务常见问题Jenkins needs to know where your Maven is installedJenkins 无法取得SVN最新版本 todo 基本的使用在此不再记录, 参考以下链接即可正常安装, 图文并茂,很不错. https://blog.csdn.net/wuruijie321/article/details/84134763 https://www.cnblogs.com/fengwenzhee/p/10448474.html https://my.oschina.net/tonystark/blog/1920889 https://www.cnblogs.com/ityouknow/archive/2017/11/26/7899349.html 唯一需要注意的就是初始的用户名和端口的修改了
基础环境 服务器环境: Cenos7.4
所需工具:
Jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key yum install jenkins Maven
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo sudo yum install -y apache-maven mvn -version JDK
... 插件安装 位置: 系统管理->插件管理->可选插件
Maven Integration plugin : maven插件
Subversion Plug-in : svn插件
一、2018年清华论文《An Asynchronous Energy-Efficient CNN Accelerator with Reconfigurable Architecture 》
platform:Xilinx VC707
摘要:
1.全局时钟被局部时钟替代,在时钟下形成异步流水线
2.每个计算单元全连接5*5的寄存器,保证输入数据被重复使用
3.提出集成化 卷积和池化,减少访问中间数据,减少访问片外内存
二、网络结构()
1、为了获得良好的灵活性和能源效率;一些CNN加速器采用粗粒度,动态可重构的异步加速器;
缺点:FPGA显示良好性能,但其细粒度的计算和路由资源,限制了不同的CNN能效和运行时重新配置。
2、数据和控制流在异步电路控制下运算,这不同于全局时钟驱动的同步设计,这不同于全局时钟驱动的同步设计流程。这个特性使异步电路的不同模块能够在各自理想频率下运行,在需要的时候工作或停止;时钟选通,只有在需要的时候才选通,异步逻辑,被看作一种降功耗的方法
三、计算结构(why)
Mesh Network 它是一个动态的可以不断扩展的网络架构
1、每个计算核心有25个寄存器阵列;每个计算单元包括:一个寄存器和一个乘法器;每个运算单元都能实现乘法和存储;所有的PE都是网状连接,每个PE可以从它临近单元的任意方向接受数据;全连接网络使数据重用成为可能;计算核心的数据size和通路可以根据不同模型和卷积层配置,每个PE单元可以单独工作或者一起协同工作;使用握手协议代替全局时钟确保数据流正常,由于异步握手协议的特性,当没收到请求信号时,处理单元会被关闭;因此会降低功耗;将每个乘法器结果累加,并产生请求信号,将数据发送到可配置的池化单元做下次计算
2、Bundled-data是这种机制的一个标准术语,其含义是数据和控制信号捆绑在一起,而其中控制信号则起到了在同步电路中时钟信号所起的作用;(http://www.elecfans.com/d/662787.html)采用两阶段异步握手协议,在四阶段协议中,请求和确认信号需要返回到零,而在两阶段协议中,请求和确认的每个转换都代表一个事件,两阶段在速度和功耗上胜过四阶段;当请求信号到来,产生门控并使能寄存器;
3、点击之间的延迟匹配电路(图5中未示出。使每个阶段都是自计时的,而不管。通过匹配组合逻辑的延迟来实现整个电路。
没有请求信号,异步电路将被关闭;当请求信号到达,信号fire1有效,配置数据被写到DFF1;——》中间的click电路使fire2信号有效,从其中一个方向读取输入数据存入DFF2。并同时将其作为操作数发送到乘法器;——》最终,fire3信号有效,使输入数据存入DFF3。以便相邻PE单元可以复用。
*************
Fire信号产生逻辑没搞懂(电路图没搞懂)
没搞清楚运算单元电路在计算核心框图中的位置;
*************
4、从一个核中所有PE单元的输出req信号都连接到异步Muller电路(当两个输入同时为0或者同时为1时,输出才变化成两个输入值,否则维持原输出值。) 换句话说,当所有request信号到来,Muller单元会产生下一个request信号;确保PE单元准备好乘法结果,然后池化单元开始工作;激活函数,池化方式和size根据配置信息动态修改, 最后采用256KB的ROM存储激活函数的结果,通过激活函数,输入定点数据被认为地址去寻找输出数值;因为避免了复杂计算过程,所以此方法会更快
四、卷积-池化集成计算和数据重用方法
1、在传统加速器中,卷积核需要按从左到右和从上到下的顺序读取输入数据;卷积结果必须临时存储并等待池化
2、相反,在异步电路中,使用事件驱动功能。读取输入数据的方向与每个池化结果相匹配。
3、池化时需要A、B、H、G;A,B先被存储等H,G准备;当卷积池化集成后,通过设置卷积核的移动方式,四个操作数会同时进行池化,换句话说,没有存储中间数据过程;当四个卷积后,每个池化结果将被计算;最大值池化时,最大的卷积结果将代替最小的;平均池化时,我们需要一个个求和,在求和之前已经一个个被划分了,因此最终求和结果是平均池化结果,总之,池化层的中间结果减少为0
B:数据复用
1、在两个相邻的卷积运算中,相邻的输入数据,可以复用,一次卷积,权重是固定的,只需要读入一次;所以我们选择权重不变方法,四次卷积后得到四个结果,因为这四个PE单元由Mesh网络连接,没有数据复用时,需要读取数据66.4KB,采用卷积-池化集成计算和数据重用方法,读取数据7.8 KB,降幅88%
**********
1、在oblivious算法中每个电路元件会在每一个模拟时刻进行求值。而在事件驱动算法中 电路中元件状态的改变被记录下来 并且在给定的模拟时刻只有这些元件
2、88% decrease 下降的是能量or时间
**********
4、fixed-point number:定点数
二、2018越南论文《FPGA Platform applied for Facial Expression Recognition System using Convolutional Neural Networks》
1、架构非常清晰,弄清楚使用DMA原因(https://blog.csdn.net/weixin_39290638/article/details/81155489)
三、2015年北大论文《Optimizing fpga-based accelerator design for deep convolutional neural network》
直接百度搜索js滚动到最底部,得来的代码是:
var ele = document.getElementById('id'); ele.scrollTop = ele.scrollHeight; 改了之后,代码是这样的
var div = document.getElementsByTagName('body')[0]; div.scrollTop = div.scrollHeight; 这段代码经过测试,并没有任何卵用,无法做到滚动到body元素的最底部。
后来又发现了一个scroll相关的方法,经测验,是可以滚动到最底部的。
element.scrollIntoView({block: "end"}); 元素的成员方法scrollIntoView,允许加入一个object数据体选项参数,这个参数中只要如代码中所述,指定block:"end",这行代码即可成功滚动到最底部。详情方法描述请参见API文档链接:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView
顺便总结一下,代码提示对我们的学习、寻找很重要。比如当我需要滚动页面代码时,百度搜出来的虽然不抵用,但是它给了我一个scroll的关键字,于是我就可以打开浏览器页面console控制台,寻找一个元素的含有scroll关键字的方法,代码提示将会给出含有scroll关键字的成员,这将很有可能帮助我们解决问题。
表单输入绑定 基础用法 你可以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。
v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:
text 和 textarea 元素使用 value 属性和 input 事件;checkbox 和 radio 使用 checked 属性和 change 事件;select 字段将 value 作为 prop 并将 change 作为事件。 对于需要使用输入法 (如中文、日文、韩文等) 的语言,你会发现 v-model 不会在输入法组合文字过程中得到更新。如果你也想处理这个过程,请使用 input 事件。
文本 <input v-model="message" placeholder="edit me"> <p>Message is: {{ message }}</p> Message is:
多行文本 <span>Multiline message is:</span> <p style="
前言
本文主要给大家带来一些我面试的经历和经验,希望对正在求职的同学有所帮助。我先大致说下面试之前的个人情况:2017年7月正式入职海康威视数字技术股份有限公司,使用Vue.js技术栈。
我写的篇幅可能有点长,如果只想看成功的面试请直接从阿里企业智能事业部(一面)开始,大家见谅哈。
这里推荐阅读之前写的文章(前面两篇实用型,后面两篇对面试应该会有帮助):
Vue CLI 3结合Lerna进行UI框架设计
Cz工具集使用介绍 - 规范Git提交说明
你真的理解$nextTick么
基于Vue实现一个简易MVVM
关于海康
小提示:这是我自己偷偷给导师打广告,大家如果没有求职意愿的可以直接忽略。
对于离职的公司海康,我还是有非常深厚的感情的,毕竟是我入职的第一家公司。同时在这里我也要感谢我的导师兼领导,是他一点点将我培养成一个合格的Web前端开发。由于我的突然离职,造成了团队内部的人员空缺,也给团队的建设造成了一些影响。我们团队的Vue.js技术栈虽然只在两年前才起步,但是团队的技术体系建设一直在飞速发展(之前发的文章Vue CLI 3结合Lerna进行UI框架设计就是其中的一个的UI框架设计方案),如果大家正在求职,可以在Boss直聘上给他投简历(我偷偷去查了他的招聘信息),目前正在招Web前端实习和Web前端正式岗位(工作地点在杭州市滨江区阡陌路555号):
Web前端实习
Web前端
Web前端
简历
我的简历只是简单的用MD做了一份,大致包含了以下几个部分:
基本资料
专业技能
工作经历
实习经历(可选)
项目经历
小提示:在基本资料里一定要填写正确的邮箱地址,我在前期面试的时候都没有打开邮箱查看面试情况,导致一些面试的时间点和面试结果都不清楚(一直以为会发短信通知)。
如果去现场面试,一定要记得带上笔和简历。一方面你给面试官的简历必定是最新的(在不断面试的过程中你必定会修改简历),另一方面这也会给面试官一种非常舒心的感觉。
对于简历这里提一点,在写自己的专业技能和项目经历时尽量不要给自己挖坑,这里展示一下我的专业技能(我会的不多):
熟悉嵌入式C、JavaScript、Node.js
熟悉Vue.js框架
切忌写一大堆让人感觉花里胡哨的技能,尤其是一些很浅显的技能(基本技能除外)。如果你有一些别人很难替代的技能,那这些技能就是亮点了,我这里就没什么亮点技能。有些技能你会但是不熟练,你可以适当的在你的项目经历中体现出来。对于项目经历尽量挑自己觉得非常有技术含量的项目进行说明(宁缺毋滥),对于自己参加过但不是特别熟悉的项目尽量不要填写,防止给自己挖坑。
小提示:这里附上的我的面试简历供大家参考。感谢jsliang的文章2019 面试系列 - 简历,大家制作简历时也可以参考这篇文章。
在投递简历时大家千万不要被招聘信息中的要求吓到,记得有一次投递简历时我对招聘者说自身不太符合要求,招聘者当时说要求都是唬人的,觉得有兴趣就投,有些招聘要求可能正是你未来学习或者深入的领域。
面试
简历制作完后我大概投了四家公司:有赞、滴滴、51信用卡和阿里。其中有赞挂在二面,滴滴挂在一面,51信用卡挂在一面,阿里两个部门挂在一面,一个部门面试成功。很多面试者的经历可能都是像我这样,在一次次的面试失败中不断的总结进步,最终拿到理想的Offer。
小提示:建议大家在投递简历时可以先投递一些试水的小公司,先检验一下自己是不是可以胜任这些公司的面试。同时在每一次面试完后记得把面试官提问的问题记录下来,对于没有答上来的问题还是要好好搞懂或者实践一下,因为很有可能下一家的面试官会问同样的问题。
在面试的过程中,这里我给出几点意见:
心态放平稳,假设第一题你答不上来很正常,面试官不会因为第一题你不会就PASS你
不会的题目一定不要瞎猜,往往面试官给你挖的坑就是希望你往错的方向猜,一定要答不知道
不要说太多跟当前面试题无关的内容,问你什么问题尽量就答什么问题,除非面试官指定你发散一下思维
如果没有听懂面试题可以试着询问面试官,您要问的是关于xxx的问题么
对于某些问题一定要自己先提前精炼一下(例如作用域链、继承以及原型链等问题)
如果面试官问的某项技术自己在某些场景使用过或看到别的场景有使用,可结合这些场景进行讲解(让面试官知道你不仅仅理解它,你还会很好的使用它)
如果是Vue技术栈希望可以深入源码或者至少理解一些别人的源码分析
如果面试阿里那么面试之前一定要好好准备这样一个问题:你觉得你最擅长什么
面试一定要真诚,切勿投机取巧
面试态度一定要谦虚
接下来我会按照面试顺序给出面试题以及自己理解的一些答案:
大部分答案都是借鉴别人的博客
有些答案不一定合理
有些答案写的很零散
有些答案会举一反三
有些题目太基础或者重复了就没有写答案
有些题目太宏观或者不知道怎么回答合理,希望大家可以在评论中补充答案供更多的人受益
有赞(一面)
说说CSS选择器以及这些选择器的优先级
!important
内联样式(1000)
ID选择器(0100)
类选择器/属性选择器/伪类选择器(0010)
元素选择器/关系选择器/伪元素选择器(0001)
通配符选择器(0000)
你知道什么是BFC么
小提示:这个问题重点是BFC是什么,BFC触发的条件有哪些,BFC可以干什么。这里我试着讲解了一下Boostrap的清除浮动(display:table创建匿名table-cell间接触发BFC),如果有看到别的场景使用或者自身有使用的场景可以尝试讲解一下使用技巧。这样可以让面试官觉得你不仅仅知道他问的东西是什么,你还能很好的使用它。
本文中使用的是mac上的抓包工具charles进行抓包,手机是华为荣耀8
下载并安装Charles for Mac
Charles for Mac(HTTP信息抓包工具) V4.2.5 苹果电脑版
要想抓取到微信小程序的数据首先要解决的第一个问题件就是如何通过charles抓取手机上的数据具体配置过程如下:
MAC上的Charles设置
第一步,charles上通过proxy->proxy setting进入代理设置,入口如下图所示
点击后进入如下所示界面
记住此处的port,默认为8888,也可以进行修改,只要不冲突就可以,勾选上Enable transparent HTTP proxying,到此为止完成charles上的初步设置。
到此为止,完成了MAC上的charles设置
手机端设置
第二步,设置手机代理,注意要保证手机所连接的wifi跟电脑在一个局域网内(就是连接同一个wifi就好了)
首先,需要知道电脑的ip地址,我的电脑上通过系统偏好设置->网络可以查看
注意此处电脑连接的是PHICOMM_air的wifi
手机上进入wifi设置,一般按住你正在连接的wifi一会会弹出一个菜单,点击修改网络就到如下界面,勾选“显示高级选项”,点击代理
注意此处手机连接的也是PHCOMM_air的wifi
点击代理后进入如下界面,服务器主机名处填写刚才查到的电脑的ip地址即可,服务器端口填写第一步中charles处设置的端口,默认是8888,如果做了修改,填写设置charles时修改的端口值。
点击保存,此时charles上会弹出一个对话框,点击allow即可。此时就可以抓取手机上的http数据包了(注意现在抓取的还不是https数据包)
如下图所示,点入一个应用后,抓取到的http包
4.试试关掉电脑防火墙,在重新连接
5.重新打开charles,重新设置手机连接 手机端HTTPS数据包抓取
以上设置只能抓取HTTP数据包对于HTTPS数据抓包工具上的列表部分会显示一堆unknown的地址
那么对于手机端HTTPS数据包的抓取又该如何设置呢请往下看
首先是MAC的配置,进入charles的Help->SSL Proxying->Install Charles Root Certificate
点击Install Charles Root Certificate之后,会弹出mac的钥匙串访问页面
(正常第一次进去这个证书应该是一个红叉,我这里由于已经进行过设置所以显示正常)
右键点击该证书,选择菜单中的“显示简介选项”,接着进入信任栏目,将其全部置为“始终信任”
完成这一步的设置后,这个根证书应该会跟我上面一个截图一样,而不会显示红叉
接着点击Proxy->SSL Proxy Settings,弹出如下页面
弹出的对话框中,勾选Enable SSL Proxying,然后点击add添加Host为*和Port为443,点击ok(此处将host设置为*的意思是主抓取全部的http是数据包,如果想针对某个域名抓取可以在此设置)
到此为止,完成了MAC的设置
手机端设置(重要)
接着需要在手机端安装证书,点击Charles上的Help->SSL Proxying->Install Charles Root Certificate on a Mobile Device or Remote Browser
点击之后弹出如下对话框:
接着在手机浏览器上访问charlesproxy.com/getssl这个地址(此处请注意,最好不要用自带的浏览器),我的手机让我输入锁屏密码,输入之后,会弹出如下界面:
输入一个名字比如charlesproxy之后点击确定,会有一个一闪而过的提示,就ok了
此时进入小程序,可以看到charles上能够看到https的接口的地址和数据了
win7 显示未连接 连接可用。实际上是可以上网,上QQ,但是u3d提示无网络。如图1-3所示。
解决办法:
1、按下“Win + R”快捷键打开运行窗口,输入“services.msc”,然后点击确定;
2、进入服务后,找到“DHCP Client的服务”查看其是否已经启动;
3、在服务列表中找到“Network List Service”服务,此时这个服务多半已经停止,点击启动可能会提示无法启动;
4、再次打开运行,输入“dcomcnfg”并点击确定进入“组件服务”;
5、进入组件服务后,点击“计算机--我的电脑”;
4、点击“DOCM配置”,然后在右侧的列表中找到“netprofm”,右键点击它打开菜单,选择“属性”;
5、进入属性后,切换到“安全”选项卡,在“启动与激活权限”下方选择“自定义”,然后点击后面的“编辑”按钮;
6、进入“启动和激活权限”后,点击组或用户名下方的“添加”按钮;
7、在“输入对象名称来选择”中输入“LOCAL SERVICE”,点击“检查名称”,点击确定;
8、回到“启动和激活权限”窗口后,选中“LOCAL SERVICE”,将其下方的“本地启动”和“本地激活”设置为允许,点击确定;
9、再次打开服务,启动“Network List Service”服务,并将启动类型设置为自动即可。
show index from table_name这个命令有助于诊断性能低下的查询,尤其是查询是否使用了可用的索引。
下面介绍下 这个命令显示的结果列的含义
Table:表的名称。Non_unique :如果索引不能包括重复词,则为0。如果可以,则为1。Key_name:索引的名称。Seq_in_index: 索引中的列序列号,从1开始。Column_name :列名称。Collation: 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。Cardinality: 索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。Sub_part:如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。Packed:指示关键字如何被压缩。如果没有被压缩,则为NULL。Null:如果列含有NULL,则含有YES。如果没有,则该列含有NO。Index_type: 索引类型(BTREE, FULLTEXT, HASH, RTREE)。Comment:多种评注。Index_comment:索引评注。
文章目录 介绍OSS 内网上传OSS内网访问,依靠Nginx代理缺点 介绍 OSS如果通过外网访问,流量费用不菲,本着为客户省钱的原则,使用Nginx内网请求转发来访问OSS。
前提
ECS 和 OSS 的Bucket必须处于同一地域 OSS 内网上传 使用内网Endpoint,例如: oss-cn-shanghai-internal.aliyuncs.com 注意: 本地无效,必须在同地域的ECS上才能正常上传 参考:https://help.aliyun.com/knowledge_detail/39584.html?spm=5176.2000002.0.0.5be425a7vjEOP2 OSS内网访问,依靠Nginx代理 注意:必须使用下面这种配置方式,否则反向代理会出现The specified key does not exist 导致外网可访问, 反向代理内网无法访问
server { listen 1234; server_name 47.88.123.123; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/www.test.com; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 error_page 404 /404.html; error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 include enable-php-72.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 include /www/server/panel/vhost/rewrite/www.test.com.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \.
文章目录 文档流程说明添加依赖集成步骤常见问题 文档 蚂蚁金服官方文档
https://docs.open.alipay.com/54/103419/ https://docs.open.alipay.com/291/105974 秘钥生成
https://docs.open.alipay.com/291/105971/ 验签
https://docs.open.alipay.com/200/106120 流程说明 参考 http://www.crocutax.com/blog/application-process-records-of-alipay 应用公钥上传支付宝,生成支付宝公钥,上传后,官方弹窗提示:应用公钥(SHA256withRsa)已经上传成功,请查看支付宝公钥 支付宝公钥用于发起支付及验签 添加依赖 Maven依赖地址
https://search.maven.org/search?q=g:com.alipay.sdk%20AND%20a:alipay-sdk-java&core=gav 最新Maven
<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.4.27.ALL</version> </dependency> 集成步骤 1.准备参数
//----------------------------支付宝账号-------------------------------- private static final String ALI_APP_ID = "2018102561798725"; //应用私钥 private static final String APPLICATION_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCK5cB6lDMhQvZar902GE70iXZhXNXR0+Ep9LC4UQqQhy0pQfNFcj/aBtPfAl7m/7txoKsqewy8jAt60hyh+pD/rQXo1WWbDlXa24wdVNr2zJQTVvD7pFwzdwtDLxXFZDjMngU00lc0na1XwM+02Fmb94OCa7/CWHuFze2S79kCBNLrnfKaOucu2l6OYdxhPPp2u+czwBg0Gq/gwhP6MXh0TlKwSAYk93NLONMvindUzSudi499YVQGQ1D3Ke1FFSeZ4VCcfiZLDVKjBkNaItECtnbBNSGoJbY9OWjvQCOPI/dLIiIYXV+x1gZPTCj44MenxBKyUx4XIjpGb+cZXsDnAgMBAAECggEBAIh3b4N/9DRr3CwBufAaNgjgviSu143PBNz6Al81kJGrnl145JGIzN9j8eqcI64F+J6NY17bgwoE9op3wZYL30a1MqcucyPDE+tx5dozsubk3V+a/i3fsI8IGVKrAlLsQzoWz7q0JuYVPWiIkgp2vqQUrWsIfmFuGf6+8vp5GNd3fNVIDi5EFRgR5bvWGNEJBLpChjKHNxcnb8BO+rv226H1S79OyNCcjT1+bMz5kiFU1EY+RKhIGYrudQDbRpLhaX7MKV/1lMLvNr/2XEiUBI/dSgCG/t+LHl3HP8nTJhmf6X/f5uTpIONdOBU04p0ndSsGw6BGtKD5CUPmSod/v8ECgYEA07XJB58blFdhqsggcUziVDhOpgOluYdadMJ7Ux/CIyA8ezpAhFTTT6hPanAKWC7pazd8O/Hiles4bWLD3aaIk5nVHGM5Wn8P9uTLwpQtW1Rr7Ik0ufr54iM+kLwMfyzO+Uzpu/bJx2u/wNbNDJO8NH99g+LJyfU42kA6zkjJolcCgYEAp/R1Ydjp7G7hgR/IXIH9m/s1F0+V5AE97u11fQXYEJFxqLAKq9rzKIS4l+1Mxi66W31CpFy6omPxOsdwQ95J7UFlE+ZzGFYbrcpXnt/Esj+K6olbmohKvpbH6J2dEGMKJdK8Vfx9jc696HWzoa/KrGK6Sj2Ja6N1o7AsZ3joW/ECgYB8F5uj2gECbE2VGwTZJGWtU+vVp2GmY84DjlNXH9BdYnHREQ3sAwRxNoiGLPIDSkwLSlSJlnhnw54pj7Ca5Rg82/hsUUS25K9o2icNAGmtlMhFtw6uzItXn6z2jSMOECepPQnr4PXY7DFTSRSbgKTaaLgba/03YYNXejp923BEtQKBgQCcVoVdS1iT6LKoSzlqQuYbZ76HsGFKF43a9dbDRclVws0VxKhqSCjHsqNRaGZqo9x8hSCfdmGT/4vwtuzdf/E4lALOf1jrclvZbdwZ2xlxAo0AvFM0iWFp/1ieQviM5GPxyTPepmUIt0U3OTi4bLYvuMbHjHh6ZXF/qOHsfzNrQQKBgG/KS3/uBblZpNQy81Q+lOORZO+TiZjd+WM/u8sk/Rtr0nX6CxkcEU+UVULYff3Xf/Qki6un8IU4GI6yexz1ioXgBRA7AaMnVNihmCGNFjP2g958oBortrMqdwCsX/2p1cZG6onPWyqB27YzU7uYapzvltT+jQLzWfu0V2/JcBCi"; //应用公钥 (上传支付宝后得到 [支付宝公钥] , 项目里用不上这个,代码里只使用支付宝公钥) public static final String APPLICATION_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiuXAepQzIUL2Wq/dNhhO9Il2YVzV0dPhKfSwuFEKkIctKUHzRXI/2gbT3wJe5v+7caCrKnsMvIwLetIcofqQ/60F6NVlmw5V2tuMHVTa9syUE1bw+6RcM3cLQy8VxWQ4zJ4FNNJXNJ2tV8DPtNhZm/eDgmu/wlh7hc3tku/ZAgTS653ymjrnLtpejmHcYTz6drvnM8AYNBqv4MIT+jF4dE5SsEgGJPdzSzjTL4p3VM0rnYuPfWFUBkNQ9yntRRUnmeFQnH4mSw1SowZDWiLRArZ2wTUhqCW2PTlo70AjjyP3SyIiGF1fsdYGT0wo+ODHp8QSslMeFyI6Rm/nGV7A5wIDAQAB"; //支付宝公钥 public static final String ALI_PAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2k9K23V7rZeGNdqFmN/DajW8E9jyNafRzdDkA/pBAygyppUv13U7canYMc68OKCNEG1cyoPi7DNIHDM8mOPwPDVN9TgH4QuP0VFJRNwgJYrE59wZCSeoCd8DJXYnNJt5K0+zkqwFUbiIOhN7ZnBwmEO+lgxeECxQ42mp+hLp7R5ztZBTcNVRHRTfpN9PN8FF9d7/VWaU7IX9wygc+LPUi8tA3L4fOJPhRqG+fsXmGUoiz/JTWmi4+TGymesYPZ/NF7whv28abt2Y62EWRrKtLnjcOclN52N47ln7JYgNb4J8L7L9j3RZik0rzM5+Fd8VM0sOT0oggctl0xcS3cBBEQIDAQAB"; private static final String CALLBACK_URL_ALI = "http://47.99.172.109:8080/anbao/order/alipaySuccessCallBack"; 2.
https://blog.csdn.net/yuleidnf/article/details/81541736
TCP与UDP基本区别
基于连接与无连接TCP要求系统资源较多,UDP较少;UDP程序结构较简单流模式(TCP)与数据报模式(UDP);TCP保证数据正确性,UDP可能丢包TCP保证数据顺序,UDP不保证 UDP应用场景
面向数据报方式网络数据大多为短消息拥有大量Client对数据安全性无特殊要求网络负担非常重,但对响应速度要求高 具体编程时的区别
socket()的参数不同UDP Server不需要调用listen和acceptUDP收发数据用sendto/recvfrom函数TCP:地址信息在connect/accept时确定UDP:在sendto/recvfrom函数中每次均 需指定地址信息UDP:shutdown函数无效 编程区别
通常我们在说到网络编程时默认是指TCP编程,即用前面提到的socket函数创建一个socket用于TCP通讯,函数参数我们通常填为SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),这表示建立一个socket用于流式网络通讯。
SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,也是双向的,即任何一方都可以收发数据,协议本身提供了一些保障机制保证它是可靠的、有序的,即每个包按照发送的顺序到达接收方。
而SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的,因为通讯双方发送数据后不知道对方是否已经收到数据,是否正常收到数据。任何一方建立一个socket以后就可以用sendto发送数据,也可以用recvfrom接收数据。根本不关心对方是否存在,是否发送了数据。它的特点是通讯速度比较快。大家都知道TCP是要经过三次握手的,而UDP没有。
基于上述不同,UDP和TCP编程步骤也有些不同,如下:
TCP:
TCP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、接收客户端上来的连接,用函数accept();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
8、关闭监听;
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
UDP
与之对应的UDP编程步骤要简单许多,分别如下:
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;
TCP和UDP是OSI模型中的传输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
UDP补充:
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中如果出现了丢包,UDO也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交给由采用UDO的应用程序去处理。换句话说,UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。
TCP补充:
TCP充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
Visual Studio 2010下载完成之后,打开安装包:
点击setup
点击Next
由于我们不需要全部的组件,所以点击“自定义”单选项,再点击“下一步”按钮:
在左边选择需要的开发组件即可,取消不需要安装的项:
根据所选项的不同,接下来正式安装时会耗时较长,很需要耐心等待了:
根据安装的程序异同,在安装过程中可能会要求重启
重启电脑后同样要以管理员帐号登录电脑,然后继续安装,完成后会提示安装成功,直接点击“完成”按钮即可:
返回安装程序的安装界面,点击“退出”按钮:
点击开始:
安装成功!!!
Assignment :
Open a .obj file which contains v(vertices) and f(faces) and render it using OpenGL!
Sample can be found at : https://groups.csail.mit.edu/…/models/
In this assignment I am using python as my language. Unfortunately, OpenGL module is not included by default so we need to install it first using pip. I also include pygame to help me creating the window so we need to install that too.
pip install PyOpenGL PyOpenGL_accelerate pip install pygame If you are using Windows as your OS make sure that PyOpenGL installed properly as there are cases where the installation doesn’t behave correctly.
from scipy.misc import imread, imsave, imshow, imresize 报错 ImportError: cannot import name 'imread' from 'scipy.misc' scipy 和 pillow版本问题
先卸载旧版本:
pip uninstall scipy pip uninstall pillow 重新安装
pip install pillow==5.2.0 pip install scipy==1.1.0 再尝试:
from scipy.misc import imread, imsave, imshow, imresize 就没有错误了
最先发现出现异常的位置,然后去检查客户端是否能正常连接。如下图:
然后再navicat上测试连接,也是失败,再去pgAdmin上测试:
然后出现这样的错误。根据提示去改没有作用,然后开始百度,发现了一堆方法,包括该postgres.conf和另外一个conf文件,但是其实改了后并没有什么作用,包括在这些回答下面的网友也直接说没有用,我测试了也不例外。
然后再准备重装的时候,突然看到有个文章说要创建一个账户,没错,是以postgresql为名的账户!!!突然想起在连接出错之前我确实发现有这样一个账户!并且并不是我手动创建的!这个时候我就在想,会不会是我删除了这个账户的原因。然后我卸载了电脑上的macpostgresql,用安装包重新装了一遍。这个时候我看账户并没有被创建,然后我重启了电脑!重点来了!!!重启后,我立马到账号里去看,果然有这么一个账号生成了!!如下图:
然后我继续去连接数据库,发现各种问题都没有了!成功解决!
问题:
我 CSS 你 CSS 转载于:https://www.cnblogs.com/--3q/p/11496647.html
前言
NBA是世界上最成功的体育联盟之一。为了制定合理的运作规范,联盟会与球员工会签署劳资协议,协议里规定了球队的工资帽(一支球队球员工资总额的上限),顶薪(球员薪水的上限),底薪 (球员的最低薪水)和其他规范。2011年,经历了停摆事件,联盟和工会签署了长度为10年的劳资协议;2017年,再一次签署新的劳资协议。由于2014年 NBA 和电视台达成新的转播合同,总金额为 9年 240 亿美元,新的劳资协议使球员的薪水大幅度上涨,联盟中涌现出多个亿元合同。下面通过MicroStrategy 的 dossier 图标来分析一下 2018- 2019 赛季常规赛,NBA高收入球员的表现,为打出身价的球员打call,给高薪低迷的球员开会。 球队的薪资状况
这张柱状图是球队的薪资状况,设定两条基准线,下面一条是工资帽(一支球队球员工资总额的上限),上面一条是奢侈税起征点,也就是当球员薪资水平超出这条线,还要额外向联盟缴税。进一步说明这两个名词: 工资帽:设置工资帽的原因是为了平衡球队实力,限制豪门球队的交易,保持比赛的竞争性。在没超过工资帽的情况下,球队可以签约自由球员,在超出工资帽低于奢侈税起征点的范围内,无法签约自由球员,只能使用一些特殊条款进行续约,也就是超了工资帽问题不大。 奢侈税起征点:超过这条线就要向联盟按一定比例缴纳奢侈税。 2018 至 2019的奢侈税起征点是1.237亿美金,工资帽是1.01 亿美金,可以看到球队薪资的水平比较平均,大部分球队都落在合理的区间之内。 第二张柱状图是球队的胜场和薪资状况,可以看到超过50胜的球队中, 猛龙、 勇士、 开拓者三支球队的薪资已经超过奢侈税起征点。勇士队(Golden State Warriors)和开拓者(Portland Trail Blazers)近几年的主力阵容都比较稳定,并且球队中明星球员很多,因此薪资总体比较高。鉴于勇士队已经连续五次进入总决赛,开拓者连续进入季后赛二轮和西部决赛,这笔钱花得还是很有价值的。超过50胜的球队中,雄鹿队(Milwaukee Bucks)战绩联盟第一,掘金队(Denver Nuggets)战绩西部第二,可以说是性价比最高的两支球队了。这两只球队主要由年轻球员组成,部分已经打出身价的球员还处在新秀合同之内,因此球队薪资总体低于明星云集的球队。雷霆队(Oklahoma City Thunder)和凯尔特人(Boston Celtics)在得到了一些大牌球员之后都没有达到预期。 球队中最高薪资球员的表现
通过每支球队单赛季薪资最高的球员以及BPM值(用来衡量球员每100回合的表现相对于联盟平均水平的正负值)来比较每支球队内头号球星的表现,将BPM值划分为 (-∞,0),[0,5), [5,+∞) 三个区间。 绿色区域(BPM >= 5):稳定输出
排名第一位的是赛季的最有价值球员 扬尼斯·阿德托昆博 (Giannis Antetokounmpo)A.K.A 字母哥,以下称字母哥, 本赛季字母哥在内线进攻和防守方面,表现极为突出,带领球队获得60胜(东部第一)并且进入东部决赛。同时效率值在5以上的球员本赛季都有突出表现,詹姆斯(LeBron James)依旧稳定,鲁迪戈贝尔(Rudy Gobert)是联盟的最佳防守球员,韦斯特布鲁克(Russell Westbrook)场均有接近三双的数据,库里(Stephen Curry)延续了高效的表现,场均命中5个三分球,而利拉德(Damian Lillard)则是人狠话不多的典型。 黄色区域 (0 <= BPM < 5):可圈可点
然后关注一下黄色区域,德安德鲁乔丹(DeAndre Jordan)和“白边”怀特塞德(Hassan Whiteside),作为两名典型的蓝领内线,功能比较单一,身高弹跳优势突出,自助进攻能力差, 能拿到2000万以上年薪,充分说明了当下优秀内线球员的稀缺。戈登海沃德(Gordon Hayward)在2017年签下大合同之后遭遇伤病,因此表现远低于预期。点名表扬 格里芬(Blake Griffin),转会活塞之后,当年以身体素质超强著称的他开发了中远投技术,成为活塞队新的领军人物。 红色区域(BPM < 0):众矢之的
0、前期准备 禁用BIOS的secure boot,即disable它,如果不关闭,使用第三方源安装显卡驱动会安装后不能使用。
1、禁用nouveau 1、创建文件,如果没有下载vim编辑器,将vim换成gedit即可
$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf 2、在文件中插入以下内容,将nouveau加入黑名单,默认不开启
blacklist nouveau options nouveau modeset=0 3、输入以下命令使禁用生效然后重启
$ sudo update-initramfs -u $ sudo reboot 4、重启后验证
lsmod | grep nouveau 如果回车后无反应,则禁用成功
2、安装显卡驱动 先完全卸载之前安装的显卡驱动:
ppa源文件卸载:
$ sudo apt-get remove --purge nvidia* runfile源文件卸载:
$ sudo ./NVIDIA-Linux-x86_64-384.59.run --uninstall 现在介绍最简单的安装方法----ppa源驱动安装
查询电脑最适合的显卡驱动版本
ubuntu-drivers devices 如图,我的电脑最佳显卡驱动版本为nvidia-driver-435
随后用命令行进行安装
$ sudo add-apt-repository ppa:graphics-drivers/ppa $ sudo apt-get update $ sudo apt-get install nvidia-driver-435 #此处数字要对应上面查询到的版本号 $ sudo apt-get install mesa-common-dev 注意: 如果前面没有禁用secure boot,则在安装过程中会提示设置一个密码,在重启时需要输入密码验证以禁用secure boot,重启后会出现蓝屏,这时候不能直接选择continue,而应该按下按键,选择Enroll MOK, 确认后在下一个选项中选择continue,接着输入安装驱动时设置的密码,开机。
QtCreator的安装
搜索网址:http://mirrors.ustc.edu.cn/qtproject/archive/qt/ 下载
下载好安装包后 安装
这一步:可以选择 ① 填写信息;也可以选择 ② 跳过(skip)我一般选择 ② 。
我在插件的勾选上:
顺序为:
① 全选,
② 和MSVC、Android、UWP有关的插件取消勾选,WEB可以随意,MinGW必须下载。
下载完成后,需要进行配置环境变量才能新建项目,不然新建的项目运行不起来。
配置环境变量:
计算机->右键->属性->
新增两个环境变量,根据自己安装QtCreator的目录而定。
最后点击“确定按钮”
至此,QtCreator就配置完成了。
此安装过程需要注意两个关键点:
1、插件(组件)的勾选上
2、环境变量的配置上
失信被执行人信息 失信被执行人信息分两部分:
个人信息出生月份及日期四位数是掩码展示,本博文爬取的是原始的掩码信息,如果想要进一步获取到不含掩码的个人身份信息,也不难,只是工作量大点而已
月份是01-12,日期根据月份拼接,需要额外365或者366次校验根据身份证号码规则 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;将这17位数字和系数相乘的结果相加;用加出来和除以11,看余数是多少;余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;
校验合格后的身份证信息传入进行二次验证,有效减少请求量 组织机构代码明文展示
代码实现: # 处理请求地址 def url_num(n): return "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=6899&query=%E8%80%81%E8%B5%96&pn=" + str(n*10) + "&rn=10&ie=utf-8&oe=utf-8&format=json" # 请求报文头 header = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "
1. 相似对角化的另一推论:方阵与对角矩阵相似的充要条件有:
1)任一特征值的代数重数等于几何重数
2)方阵的某个k重特征值构成的特征方程组由k个解向量组成
3)方阵的某个k重特征值对应的“特征矩阵(特征值数量阵与方阵的差)”的秩等于n-k
2. 相似判定示例1
3. 相似判定示例2
4. 相似判定示例3
5. 相似判定示例4
说明 网上关于C#获取总物理内存大小和当前可用物理内存大小的方法有很多,但是多是从国外某网站抄过来,不仅没有测评和验证,甚至连代码排版都是乱七八糟。就C#内存操作的方法,本文对这些进行了一些测试,并从中选择了比较好的一种实现方式进行了实现和代码重写,并对实现后的源代码后进行了测试。
实现原理 基于 System.Memanement.ManagementClass 实现。这个类是对硬件信息WMI的具体封装,具体相关内容可以参见 Windows Management Instrumentation。
函数说明 long GetTotalPhysicalMemory()
用于获得当前总物理内存大小,单位是字节。如果获取失败,返回 -1。long GetAvailablePhysicalMemory()
用于获得当前可用物理内存大小,单位是字节。如果获取失败,返回 -1。double ToFileFormat(long filesize, [FileSizeUnit unit])
根据指定的文件大小和单位,对输入的文件大小(字节表示)进行转换。单位是可选参数,默认值为FileSizeUnit.MB。 使用方法 把函数的源代码复制至实际的项目;在引用中添加系统自带的 System.Memanement 类库;在函数定义的类文件顶部添加 using System.Memagement。 示例 static void Main() { long total = GetTotalPhysicalMemory(); long free = GetAvailablePhysicalMemory(); long used = total - free; Console.WriteLine("Total memory: {0} bytes, {1} GB.", total, ToFileFormat(total, FileSizeUnit.GB).ToString("0.00")); Console.WriteLine("Used memory: {0} bytes, {1} MB.", used, ToFileFormat(used).ToString("0.00")); Console.WriteLine("Free memory: {0} bytes, {1} KB.
官网教程:
Docker搭建项目的文档:https://docs.sentry.io/server/installation/docker/
Python搭建项目的文档:https://docs.sentry.io/server/installation/python/
但是这两种有时候不好用。可以参考下,下面的教程实用一点。
看到网上好多教程都是说搭建的,很少讲使用的。首先我要跟你们gang(讲),我不是一个运维工程师,所以不能只管搭建不管使用。
一、First,Sentry的搭建有两种方式,一种docker的,一种python的。
docker的我就不讲了,很esay,用下面的教程即可:
https://blog.csdn.net/nimei31/article/details/80864370
python的方式我这里 讲一下。
二、Python方式搭建sentry 准备sentry的环境:
Python2.7 pip8.1+ redis PostgreSQL
准备好上述环境后,
安装 virtualenv Python包管理工具 pip install -U virtualenv
选择项目工程的位置 virtualenv /www/sentry/
activate virtualenv source /www/sentry/bin/activate
下载安装 sentry pip install -U sentry
安装过程中可能出现某些lib库没有安装,导致安装失败,因为电脑环境不一样,可能缺少的库文件也不同,需要自己重新安装某些lib库。如果安装成功,输入sentry命令会出现如下界面:
上面基本是sentry的一些命令,我也没怎么研究过,有空你们可以试试某些命令。
初始化sentry的配置文件: sentry init /etc/sentry
配置数据库postgresql 编辑 /etc/sentry/sentry.conf.py 文件
修改下端口和host主机名
2.配置redis
编辑/etc/sentry/config.yml
如果redis有密码,可以在port下面加一行password。
编辑 /etc/sentry/sentry.conf.py 文件
找到 BROKER_URL 修改后面的值为:redis://密码@主机地址:端口号
3.如果想修改项目运行的端口可以在sentry.conf.py中找到SENTRY_WEB_PORT,修改后面的值,默认是9000端口。
4.配置邮箱:
编辑 config.yml
如果邮箱配置不成功,这里有两套方案:1>搭建自己的邮箱系统,postfix+dovocot+mysql,前提是得有自己的域名。
2>跳过邮箱的设置,手动激活新注册用户账号。
这里是针对某些特殊的内网环境做的设置。
6.初始化sentry数据库
createdb -E utf-8 sentry
MOC 从qt继承而来的类只要用了关键字 Q_OBJECT,都必须生成其对应的moc文件,命令如下
moc.exe myclass.h -o mac_myclass.cpp 其中myclass.h中有类有Q_OBJECT属性。在vs项目中只需要添加mac_myclass.cpp文件即可。
UI 虽然不使用designer来设计界面,但在编译一个demo项目时都会用*.ui文件,这时得先将其用uic.exe进行转化
uic.exe app.ui -o ui_app.h 其中app.ui是用designer设计好的界面文件, ui_app.h是生成的头文件。然后在c++项目中#include "ui_app.h"即可。
RCC rcc 工具的两种用途:
(1)生成独立的二进制资源文件 *.rcc
对于太大的图片、音频、视频等文件,不适合集成到目标程序内部,可以放到操作系统文件路径,或者单独编译成外挂资源 *.rcc 。举例来说,myresource.qrc 包含了很多图片和视频,没法编译成目标程序内嵌资源时,可以打开 Qt 命令行,进入 myresource.qrc 所在的文件夹,执行命令:
rcc -binary myresource.qrc -o myresource.rcc
rcc 会把 myresource.qrc 里面描述的所有图片、视频等文件,都压缩打包,生成一个二进制的 myresource.rcc 文件,这个 myresource.rcc 包含了所有的资源,这样程序发布时就不需要带一堆乱七八糟的碎文件了,一个 myresource.rcc 搞定。
那么代码中如何使用 myresource.rcc 呢?需要在 main 函数开始的位置注册这个独立的二进制资源文件:
QResource::registerResource("/path/myresource.rcc");
(2)应用程序内嵌资源
如果希望一个资源描述文件 application.qrc 在程序编译时内嵌到目标程序里,需要在 *.pro 文件里加一句话:
RESOURCES += application.qrc
qmake 会自动根据这句话,为 application.qrc 添加编译脚本,其编译过程如下图所示:
基本概念 在图像处理中,高斯滤波一般用高斯模板。除此之外,还有递归高斯滤波、FFT法、重复卷积法等。
1、直接卷积法 2、重复卷积法 3、FFT实现法 原理很简单out = IFFT2(FFT(in)*FFT(h)),其中in是输入图像,h为卷积核,out是平滑后图像。
4、递归实现法 文献《Recursive implementation of the Gaussian filter》提出该方法,其产生一个IIR滤波器,比上面三种方法都快,其运行时间与σ无关。推导过程大致是,将高斯公式g(t)的傅里叶变换G(w)进行泰勒公式展开,阶数到6取近似,将其拉普拉斯变换G(s),在变换到z域时,用前后差分技术代替双线性法。最终结论如下。
q的选择如下
以上可以认为串行方式,还有并行方式,详细见文献《Recursively implementing the Gaussian and its derivatives》,在ITK中, itkRecursiveGaussianImageFilter实现了该算法。
示例演示 对图像进行高斯滤波而言,假设滤波器半径为r,我们常用的高斯模板则对于图像每个像素的算法复杂度是O(r^2)。高斯滤波器的kernel是可分离的(separable),也就是说,可以将2D的高斯kernel分解为两个1D的kernel,先沿x方向对图像进行1D高斯kernel的卷积,然后沿y方向对图像进行1D的高斯kernel卷积,最后的结果和使用一个2D高斯kernel对图像卷积效果是一样的。这样一来,针对每个像素,滤波器的算法复杂度降为O(r)。下面实现递归高斯滤波法,即上面第四种方法。完整工程代码。
/********************************************************************** Copyright (c) Mr.Bin. All rights reserved. For more information visit: http://blog.csdn.net/webzhuce **********************************************************************/ #include <opencv2/opencv.hpp> using namespace cv; typedef struct { int N; float sigma; double B; double b[4]; } GaussCoefs; /* * Calculate the coefficients for the recursive filter algorithm * Fast Computation of gaussian blurring.
一、
1. JWT是什么
JSON Web Token (JWT),它是目前最流行的跨域身份验证解决方案
2. 为什么使用JWT
JWT的精髓在于:“去中心化”,数据是保存在客户端的。
3. JWT的工作原理
1. 是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户,示例如下:
{"UserName": "Chongchong","Role": "Admin","Expire": "2018-08-08 20:15:56"}
2. 之后,当用户与服务器通信时,客户在请求中发回JSON对象
3. 为了防止用户篡改数据,服务器将在生成对象时添加签名,并对发回的数据进行验证
4. JWT组成
一个JWT实际上就是一个字符串,它由三部分组成:头部(Header)、载荷(Payload)与签名(signature)
它是一个很长的字符串,中间用点(.)分隔成三个部分。注意,JWT 内部是没有换行的,这里只是为了便于展示,将它写成了几行。
二、实践、操作
2.1 JwtUtils 类
package com.zking.vue.util; import java.util.Date; import java.util.Map; import java.util.UUID; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; /** * JWT验证过滤器:配置顺序 CorsFilte->JwtUtilsr-->StrutsPrepareAndExecuteFilter * */ public class JwtUtils { /** * JWT_WEB_TTL:WEBAPP应用中token的有效时间,默认30分钟 */ public static final long JWT_WEB_TTL = 30 * 60 * 1000; /** * 将jwt令牌保存到header中的key */ public static final String JWT_HEADER_KEY = "
之前想了很多种办法来解析PDF文件内容(Python 读取PDF文件),一般针对电子版word或者Excel转化为PDF的PDF文件具有不错的效果,但是依然不能解析图片(图片中文字)内容,如果PDF是扫描版呢,那种方法就不行了。
所以我又想了另一个办法,就是先把PDF文件转化为图片,然后再将图片进行OCR识别,得到最终PDF的内容。
1 把PDF转化为图片 可以参考博文:windows下用Python把pdf文件转化为图片
代码如下:
import fitz PDF_path = "你的PDF文件路径" imgs_save_path = "图片保存文件夹路径" def PDF_to_imgs(PDF_path, save_path): # 打开PDF文件,生成一个对象 doc = fitz.open(PDF_path) # 将PDF文件的每一页都转化为图片 for pg in range(doc.pageCount): page = doc[pg] rotate = int(0) # 每个尺寸的缩放系数为2,这将为我们生成分辨率提高4倍的图像。 zoom_x = 2 zoom_y = 2 trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate) pm = page.getPixmap(matrix=trans, alpha=False) pm.writePNG(save_path + '%s.png' % pg) PDF_to_imgs(PDF_path, imgs_save_path) 2 将图片进行OCR识别 pytesseract模块的安装参考博文:基于python的OCR字符识别
代码如下:
import os import pytesseract from PIL import Image imgs_save_path = "
redis安装部署 文章目录 redis安装部署一、Redis介绍二、Redis的安装三、Redis的部署四、Redis 操作常用命令五、redis配置文件常用配置 一、Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。
和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。
二、Redis的安装 redis下载请往http://download.redis.io/releases/
# 下载redis的安装包并解压至/usr/local [root@localhost ~]# cd /usr/src/ [root@localhost src]# wget http://download.redis.io/releases/redis-4.0.14.tar.gz [root@localhost src]# ls debug kernels redis-4.0.14.tar.gz [root@localhost src]# tar xf redis-4.0.14.tar.gz -C /usr/local/ # 编译redis [root@localhost src]# cd /usr/local/redis-4.0.14/ [root@localhost redis-4.0.14]# make # 编译完成之后,可以看到解压文件redis-3.0.7 中会有对应的src、conf等文件夹 [root@localhost redis-4.0.14]# ls 00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-sentinel src utils BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster sentinel.conf tests # 进入到src 目录,执行 make install ; 通过这个命令,会把src目录下便宜生成的6个命令安装到/usr/local/bin下 [root@localhost redis-4.
LaTex在线编辑器
https://private.codecogs.com/latex/eqneditor.php
LaTeX公式转MathType公式步骤:
方式一:
打开链接,复制编写的LaTex公式,加入$$中,右键选择如图,复制代码到word的MathType公式编辑器里面即可。
https://www.zybuluo.com/mdeditor
方式二:
类似地,打开链接http://engenharialivre.com/latex-para-word/
一、前言: 报错:AS 3.5 The given artifact contains a string literal with a package reference 'android.support.v4.con
使用背景:
我的 Android 项目采用的是 AndroidX;我首先使用的是butterknife 8.5.1版本,报错,提示我用butterknife 9.0 以上;我使用butterknife 9.0,继续报上面的错误;解决方法:使用butterknife 10.1.0 即可; 二、butterknife 10.1.0 使用 1. 首先安装插件: Android Studio - >设置/首选项 - >插件 - >浏览存储库,搜索Android ButterKnife Injections(作者是ParfoisMeng)安装并重启可用。
2. 添加依赖到项目中: project依赖
buildscript { repositories { mavenCentral() google() } dependencies { classpath 'com.jakewharton:butterknife-gradle-plugin:10.1.0' } } 3. mouble 依赖 也就是 app 依赖:
头部添加:
apply plugin: 'com.jakewharton.butterknife' jar 包依赖:
文章目录 距离计算1. 闵可夫斯基距离(有序属性)1.1 曼哈顿距离1.2 欧氏距离 2. VDM 距离(无序属性)3. MinkovDM 距离(混合属性)4. 加权距离(重要性不同)参考资料 相关文章: 机器学习 | 目录
机器学习 | 聚类评估指标
无监督学习 | KMeans与KMeans++原理
无监督学习 | KMeans之Skleaen实现:电影评分聚类
距离计算 对函数 d i s t ( ⋅ , ⋅ ) dist(\cdot,\cdot) dist(⋅,⋅) ,若它是一个“距离度量”(distance measure),则需满足一些基本性质:[1]
(1) 非 负 性 : d i s t ( x i , x j ) ≥ 0 ; 同 一 性 : d i s t ( x i , x j ) = 0 当 且 仅 当 x i = x j ; 对 称 性 : d i s t ( x i , x j ) = d i s t ( x j , x i ) 直 递 性 : d i s t ( x i , x j ) ≤ d i s t ( x i , x k ) + d i s t ( x k , x j ) 【 三 角 不 等 式 】 \begin{aligned} &非负性:dist(x_i,x_j) \geq 0; \\ &同一性:dist(x_i,x_j)=0 当且仅当 x_i=x_j;\\ &对称性:dist(x_i,x_j) = dist(x_j,x_i)\\ &直递性:dist(x_i,x_j)\leq dist(x_i,x_k)+dist(x_k,x_j) 【三角不等式】\\ \end{aligned}\tag{1} 非负性:dist(xi,xj)≥0;同一性:dist(xi,xj)=0当且仅当xi=xj;对称性:dist(xi,xj)=dist(xj,xi)直递性:dist(xi,xj)≤dist(xi,xk)+dist(xk,xj)【三角不等式】(1)
当一个excel文件的sheet比较多时候,这时候可能需要获取所有的sheet的名字
xl = pandas.ExcelFile(你的Excel文件路径) sheet_names = xl.sheet_names # 所有的sheet名称 df = xl.parse(sheet_name) # 读取Excel中sheet_name的数据 也可以直接读取所有的sheet,将sheetname设置为None,这时候得到的是一个dict结果
df = pandas.read_excel(你的Excel文件路径, None) “df”都是作为DataFrames字典的工作表,您可以通过运行以下方法对其进行验证:
df.keys()
1、错误:The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. Libraries using reflection such as annotation processors need to be updated manually to add support for androidx.
方案:将butterkinfe的引用改为10.0.0
2、错误:Error: Static interface methods are only supported starting with Android N (--min-api 24)
方案:添加
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
修改Chrome谷歌浏览器默认安装路径 前提: 首次安装Chrome就安装时默认运行过一次且还没有登陆账号前1和2不符合的只要Chrome的安装目录是 "C:\Users\Max Brain\AppData\Local\Google"就行,也就是User Data文件夹和主程序在共同父文件夹就行Windows10 还没装Chrome的人 直接看最后两行就行 注意 在进行操作期间不要启动Chrome操作完成后C盘文件夹仍然在并且大小信息也在,但是并不占用C盘的空间,大小信息是D盘的,不要误以为操作失败 操作如下: 安装Google Chrome
安装完毕后关闭Google Chrome
任务管理器终止所有Google开头的进程
记住自己的Google Chrome安装路径,我的Chrome默认安装路径为 “C:\Users\Max Brain\AppData\Local\Google”
把Google 文件夹(包含Google)直接剪切到D盘相应位置,我的位置是D:\Program Files\Google
然后执行以下命令(system32)看路径自己修改
mklink /d "C:\Users\Max Brain\AppData\Local\Google" "D:\Program Files\Google"
我是没有文件冲突的情况下 Merge branch ‘master’ of 是在版本冲突的情况下发生的 在你 push 的时候已经有人先 push 了,导致线上的版本高于本地版本 发生的冲突TortoiseGit -> Rebase…
选中 force rebase 可以解决这个问题
start rebase 后 ,log 里的 Merge branch ‘master of’ 消失了,然后 pull ,再 push 。原因 可能是header 头指向的不一样导致冲突了,希望这篇文章能帮到你
Issue: systemd does not create new machine-id file if none is present It is not what you really want to run systemd-firstboot [1] at every firstboot so you flush it status and have it run again? 1. https://www.freedesktop.org/software/systemd/man/systemd-firstboot.html So if we put an empty /etc/machine-id file in place (say "touch /etc/machine-id" it will regenerate a new machine-id in the empty file, if the file isn't there it won't do anything.
在 .idea/workspace.xml 文件中找到
<component name="RunDashboard"> <option name="ruleStates"> <list> <RuleState> <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> </RuleState> <RuleState> <option name="name" value="StatusDashboardGroupingRule" /> </RuleState> </list> </option> </component> 添加配置节点
<option name="configurationTypes"> <set> <option value="SpringBootApplicationConfigurationType" /> </set> </option> 完整配置
<component name="RunDashboard"> <option name="configurationTypes"> <set> <option value="SpringBootApplicationConfigurationType" /> </set> </option> <option name="ruleStates"> <list> <RuleState> <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> </RuleState> <RuleState> <option name="name" value="StatusDashboardGroupingRule" /> </RuleState> </list> </option> </component> 运行项目就出来了
没有数据库的事务隔离,会出现以下各种问题:
脏读 一个客户端读取到另一个客户端尚未提交的写入。读已提交或更强的隔离级别可以防止脏读。
脏写 一个客户端覆盖写入了另一个客户端尚未提交的写入。几乎所有的事务实现都可以防止脏写。
读取偏差(不可重复读) 在同一个事务中,客户端在不同的时间点会看见数据库的不同状态。快照隔离经常用于解决 这个问题,它允许事务从一个特定时间点的一致性快照中读取数据。快照隔离通常使用多版本并发控制(MVCC) 来实现。
更新丢失 两个客户端同时执行读取-修改-写入序列。其中一个写操作,在没有合并另一个写入变更情况下,直接覆盖了另一个写操作的结果。所以导致数据丢失。快照隔离的一些实现可以自动防止这种异常,而另一些实现则需要手动锁定(SELECT FOR UPDATE )。
写偏差 一个事务读取一些东西,根据它所看到的值作出决定,并将决定写入数据库。但是,写入的 时候,决定的前提不再是真实的。只有可序列化的隔离才能防止这种异常。
例子:会议室预订、多人棋盘游戏、抢注用户名、防止双重开支。
Alice和Bob是两位值班医生。两人都感到不适,所以他们都决定请假。不幸的是,他们恰好在同一时间点击按钮下班。
在两个事务中,应用首先检查是否有两个或以上的医生正在值班;如果是的话,它就假定一 名医生可以安全地休班。由于数据库使用快照隔离,两次检查都返回 2 ,所以两个事务都进 入下一个阶段。Alice更新自己的记录休班了,而Bob也做了一样的事情。两个事务都成功提 交了,现在没有医生值班了。违反了至少有一名医生在值班的要求。
幻读 一个事务中的写入改变另一个事务的搜索查询的结果,被称为幻读。
事务读取符合某些搜索条件的对象。另一个客户端进行写入,影响搜索结果。快照隔离可以 防止直接的幻像读取,但是写入歪斜环境中的幻影需要特殊处理,例如索引范围锁定。
参考 https://www.jianshu.com/p/69fd2ca17cfd
https://www.jianshu.com/p/db334404d909
目录
下载源码:
安装 Android Studio:
编译
调试手机连接问题
应用安装
主要参考文献:
测试环境: Ubuntu 18.04
下载源码: 实际只是用examples/android文件夹下的,但是tensorflow没有提供单独的文件夹下载,所以这里要下载整个tensorflow
git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git 安装 Android Studio: 在AS官网下载页面https://developer.android.com/studio#downloads 选择相应系统版本的压缩包下载.
参考https://developer.android.com/studio/install?hl=zh-cn 安装 AS, SDK和NDK
NDK不需要单独下载,在选择好要使用的版本的SDK后,在SDK tools 里勾选NDK即可,如下图
编译 打开前面下载的tensorflow中的android文件夹为工程文件夹
将 Gradle Scripts/build.gradle中的第45行
def nativeBuildSystem = 'bazel' 修改为 def nativeBuildSystem = 'none' 然后就可以编译了.
调试手机连接问题 编译成功后,在用手机调试安装时,我又遇到了AS无法识别手机的情况(尽管开启了USB调试),然后参照https://blog.csdn.net/w19961009/article/details/54952777这篇博文进行设置
首先在未连接手机的情况下,在terminal 中输入lsusb,获取当前usb设备列表
然后将手机与电脑连接,再次输入lsusb获取新的usb列表,前后对比即可找到自己的手机usbid,主要找到 xxxx:yyyy一共八位字符,然后
sudo vim /etc/udev/rules.d/90-android.rules 新建90-android.rules文件(此处推测前面的数字与手机的系统版本有关,之前试过51不起作用,换成90就可以了,我的系统是安卓9.0),将上面找到的xxxx:yyyy 分别写入下面的位置
SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", MODE="0666" 然后保存退出,修改文件权限
chmod a+x /etc/udev/rules.d/90-android.rules 随后执行下面命令,重启udev
sudo /etc/init.d/udev restart 然后在AS上面工具栏手机列表位置下拉选择Troubleshoot device connections