远程控制软件向日葵 windows连接ubutu时显示连接已断开的 解决方案

失败原因可能是因为屏幕接口插件等因素造成的,因此可以尝试安装lightdm进行解决。 百度百科: LightDM,即:Light Display Manager,是一个全新的、轻量的Linux桌面的桌面显示管理器,而传统的Ubuntu用的是GNOME桌面标准的GDM 。 LightDM是一个跨桌面显示管理器,其目的是成为 X org X 服务器的标准显示管理器。 安装方法: sudo apt-get update sudo apt-get upgrade sudo apt install lightdm 之后重启电脑。

查看端口被占用,被结束此端口占用

1、在命令窗口输入 netstat -ano 此命令是查看全部端口占用情况,也可以看到9090端口被占用 2、输入命令 :netstat -ano|findstr "9090" 确认9090端口被16724进程占用,需要结束此进程 3、打开任务管理器 详细信息,pid排序,找到pid是16724的进程,结束进程即可。

node.js的开发流程_Node.js子流程:您需要了解的一切

node.js的开发流程 by Samer Buna 通过Samer Buna Node.js子流程:您需要了解的一切 (Node.js Child Processes: Everything you need to know) 如何使用spawn(),exec(),execFile()和fork() (How to use spawn(), exec(), execFile(), and fork()) Update: This article is now part of my book “Node.js Beyond The Basics”. 更新:这篇文章现在是我的书《超越基础的Node.js》的一部分。 Update: This article is now part of my book “Node.js Beyond The Basics”. 更新:这篇文章现在是我的书《超越基础的Node.js》的一部分。 Read the updated version of this content and more about Node at jscomplete.com/node-beyond-basics. 在jscomplete.com/node-beyond-basics中阅读此内容的更新版本以及有关Node的更多信息。 Single-threaded, non-blocking performance in Node.

C++ 获取数组长度

C++ 获取数组长度 1 字符串数组 对于字符串数组,使用strlen()函数来获取字符串数组的长度。 char a1[] = "fwegweasdasdwqew"; cout << strlen(a1) << endl; 2 数字数组 例如: int arr[] = { 1,5,9,10,9,2 }; 可以用sizeof(a)/sizeof(a[0])来获取数组的长度。 原理:sizeof()函数可以返回数组所占的内存,而sizeof(a[0])返回的是数组第一个元素所占的内存。 所以式子:**sizeof(a)/sizeof(a[0])**得到的就是数组的个元素个数,也就是数组的长度。 举例说明: #include<iostream> using namespace std; template<class T> int length(T& arr) { //cout << sizeof(arr[0]) << endl; //cout << sizeof(arr) << endl; return sizeof(arr) / sizeof(arr[0]); } int main() { int arr[] = { 1,5,9,10,9,2 }; // 方法一 cout << "数组的长度为:" << length(arr) << endl; // 方法二 //cout << end(arr) << endl; //cout << begin(arr) << endl; cout << "

【环境搭建】openvino + ubuntu18.04

1,介绍 OpenVINO是英特尔基于自身现有的硬件平台开发的一种可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,支持各种英特尔平台的硬件加速器上进行深度学习,并且允许直接异构执行。 支持在Windows与Linux系统,Python/C++语言。 https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html 2,安装 # 安装准备 sudo apt -y install p7zip-full bc curl klibc-utils iproute2 genisoimage dosfstools sudo apt -y install squashfs-tools rsync unzip wget findutils xorriso # 下载和安装 下载,l_openvino_toolkit_p_2020.3.194.tgz,序列号 sudo bash l_openvino_toolkit_p_2020.3.194/install_GUI.sh # 安装openvino # 启动环境 sudo bash /opt/intel/openvino/bin/setupvars.sh # 环境依赖 cd /opt/intel/openvino_2020.3.194/install_dependencies sudo -E ./install_openvino_dependencies.sh # 配置模型优化器 cd /opt/intel/openvino_2020.3.194/deployment_tools/model_optimizer/install_prerequisites sudo ./install_prerequisites.sh # 测试 cd /opt/intel/openvino_2020.3.194/deployment_tools/demo sudo -E -H ./demo_squeezenet_download_convert_run.sh sudo -H ./demo_security_barrier_camera.sh # 车牌 3,python 安装openvino, sudo cp /opt/intel/openvino_2020.

uni-app引入官方的css库,和组件方法

第一步:先创建一个模板 创建模板的时候选择 Hello uni-app演示uni-app框架的组件、接口、模板 第二步 可以看到官方在这里映入了一个css文件,找到这个 css文件将他拷贝到自己的项目目录下面并且 在APP.VUE里面映入

[LeetCode](面试题30)包含min函数的栈

题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.min(); --> 返回 -2. 提示: 各函数的调用总次数不超过 20000 次 解题思路 设计一个元素栈用来插入删除元素,一个辅助栈用来存储与每个元素对应的最小值,使得每个元素 a 与其相应的最小值 m 时刻保持对应。 具体步骤: 1)当一个元素要入栈时,先将它插入元素栈,这时如果辅助栈为空,则直接插入;如果非空,取当前辅助栈的栈顶存储的最小值,与当前元素比较得出新的最小值,将这个新的最小值再插入辅助栈中; 2)当一个元素要出栈时,元素栈与辅助栈的栈顶元素一并弹出; 3)在任意时刻,辅助栈的栈顶元素就是栈内元素的最小值。 复杂度分析: 时间复杂度:对于题目中的所有操作,时间复杂度均为 O(1)。因为栈的插入、删除与读取操作都是 O(1),我们定义的每个操作最多调用栈操作两次。 空间复杂度:O(n),其中 n 为总操作数。最坏情况下,我们会连续插入 n 个元素,此时两个栈占用的空间为 O(n)。 注:另一种解法可参考 155. 最小栈 代码 class MinStack { Deque<Integer> stack; Deque<Integer> supstack; /** initialize your data structure here.

5T的个人云盘可真香,你确定不来?OneDrive+OneIndex无敌组合

OneIndex 个人整合了“0oVicero0”和“Zisbusy”两位大佬的2020全新版本,内附Microsoft2020最新应用API使用方法。此项目针对于国际版(反正不是世纪互联那个版本,至于怎么改世纪互联版本看简介吧),下载后需要自己改动几处地方,还差一个网站图标没有加上,后期解决了会追加。 参考项目预览地址: 0oVicero0大佬项目 Zisbusy大佬项目地址 我的项目 功能: 不用服务器空间,不走服务器流量直接列onedrive目录,文件直链下载可做图床,可预览文件,功能强大 一键安装(Debian 8): wget --no-check-certificate -qO- https://github.com/0oVicero0/oneindex/raw/master/install.sh |bash 添加 Redis 支持(Debian 8): # 安装 redis 支持 apt-get install -y redis-server php5-redis # 重启 fcgiwrap-php 进程 bash /etc/init.d/fcgiwrap-php restart # 后台选择 redis 模式, 并更新缓存. 创意整合: 极大简化安装步骤。一些样式美化修改。分页模式,加快页面预览速度。创意来自oneindex-h可后台自定义网站主标题,副标题。可后台自定义每页显示项目数量。对于flac格式音乐加入图标显示对于页面顶部添加动态效果美化添加了针对Apache服务器的伪静态配合文件(.htaccess),后台开启伪静态即可去掉/?/ 安装: 由于整合了美化,需要做一些改动,再进行安装 打开 view/nexmoe目录 下 的layout.php文件 修改 第7行 、第9行 第19行 download.99couple.top 为自己下载站的域名(或者自己引用的目录) 修改 第15行 链接里的81895257为自己QQ(或者自己引用的图片) 修改18行的99couple.top为自己的博客域名,没有就还填下载站域名呗,小问题 打开 theme目录 下 style.css 文件 修改 第97行、第103行 download.99couple.top 为自己域名(或者自己引用的目录) 至此美化改动完成 针对于拥有个人下载站域名的同学来说,我们不应该中转到别人的域名下,加以如下修改

最新版配置Microsoft Azure之后利用Aria2+AriaNg+Onedrive+OneIndex搭建私人网盘

首先账号我是某宝,你懂得,关键字搜索即可。先搭建的OneIndex+Onedrive,后部署的Aria2+AriaNg。 搭建的OneIndex+Onedrive教程:某乎教程 注意一点,我是某宝买来的国际版账号(我也不知道这么称呼对不对,反正不是世纪互联那个版本的),我不需要取消注释那两行,否则会跳转到世纪互联代理的Microsoft Azure,这个是用户库貌似和国际通用版本没有接通,因为我的国际版账户登录世纪互联的提示我没有此ID。 网上教程很多,别的地方通用,但是唯独这个教程里写明了怎么配置Microsoft Azure。其余的按照其余教程来就好。 实例网站:吃土少年的私人网盘 部署Aria2+AriaNg也很繁琐,大家需要有耐心。 教程1:Rat’s Blog,写的很详细,而且也是对应着新的微软API,旧版的API已经被强制停止了。 教程2:guaosi,结合这两个来看就足够了,其余的都可以很容易百度到。 这个我就不贴出自己的网站了,因为这个是纯私人用的,谢谢。谨记一点,教程1没有写自动上传,所以要搭配着来,一定可以成功的,细心谨慎!祝大家成功!

为什么VMware虚拟机连接不上SSH工具

用 ssh 工具连接虚拟机,出现下面内容该如何处理 ssh 192.168.xxx.xxx ssh:connect to 192.168.xxx.xxx port 22: Connect refused 情景一 用虚拟机ping自己IP,如果能ping通说明虚拟机的网卡没问题,再ping自己电脑IP,如果能ping通,说明两端网络连接没问题,但是ssh连接不上,那么查看sshd服务是否启动。如果没启动,则执行以下命令 systemctl status sshd # 查看ssh服务状态 systemctl start sshd # 启动ssh服务 systemctl stop sshd # 停止ssh服务 systemctl restart sshd # 重启ssh服务 chkconfig sshd on # 设置ssh服务为开机启动命令 chkconfig sshd off # 设置ssh服务禁止开机启动命令 情景二 如果还是连接不上,那么查看自己是否安装ssh服务,执行 rpm -qa | grep "sshd" ,若是没有安装,则执行 yum install openssh-serve 然后(在 root 用户下)执行启动的命令。 情景三 启动好还是无法连接,查看虚拟机的虚拟网卡信息,查看是否与本机分配给虚拟机的虚拟网卡在同一网段,如下: 此时,网卡信息都是192.168.139.0/24,在同一网段则正常。若不在同一段地址,手动更改,将网络地址设为同一段。即可正常连接 ssh工具。 情景四 在以上步骤都执行完成后,还是无法连接 ssh工具,那么查看防火墙是否开启,将防火墙可以做处理,放通 22 端口即可连接。

Android ANR日志实战分析指南

Android ANR日志实战分析指南 一.概述 ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。 触发ANR的过程可分为三个步骤: 埋炸弹, 拆炸弹, 引爆炸弹。对于原理性的东西,我想大家也不是非常愿意花时间去看,如果有兴趣的可以参与大神Gityuan的博客,里面有非常详细的梳理,奉上链接http://gityuan.com/2016/07/02/android-anr/ 。 二.ANR的类型 InputDispatchTimeout(常见) input事件在5S内没有处理完成发生了ANR。 logcat日志关键字:Input event dispatching timed out BroadcastTimeout 前台Broadcast:onReceiver在10S内没有处理完成发生ANR。 后台Broadcast:onReceiver在60s内没有处理完成发生ANR。 logcat日志关键字:Timeout of broadcast BroadcastRecord ServiceTimeout 前台Service:onCreate,onStart,onBind等生命周期在20s内没有处理完成发生ANR。 后台Service:onCreate,onStart,onBind等生命周期在200s内没有处理完成发生ANR logcat日志关键字:Timeout executing service ContentProviderTimeout ContentProvider 在10S内没有处理完成发生ANR。 logcat日志关键字:timeout publishing content providers 三.ANR出现的原因 主线程频繁进行耗时的IO操作:如数据库读写多线程操作的死锁,主线程被block;主线程被Binder 对端block;System Server中WatchDog出现ANR;service binder的连接达到上线无法和和System Server通信系统资源已耗尽(管道、CPU、IO) 四.ANR案例分析过程 下面我将带领大家一步一步分析ANR,这个过程更加理解如何找到问题、分析问题以及解决问题 1.查看events log 当发生ANR时可以从events log(当然前提是你有将events日志保存了下来)日志中搜索关键字:am_anr,找到出现ANR的时间点、进程PID、ANR类型。日志如下 10-26 09:36:52.873 4514 4622 I am_anr : [0,11059,com.xxx.anrproject,950582854,Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.

python查询数据信息: type(), dtype(), astype()的区别

一、用法 type() :回数据结构类型(list、dict、numpy.ndarray 等) dtype() :回数据元素的数据类型(int、float等) 注: 1)由于 list、dict 等可以包含不同的数据类型,因此不可调用dtype()函数 2)np.array 中要求所有元素属于同一数据类型,因此可调用dtype()函数 astype() :改变np.array中所有数据元素的数据类型。 注:能用dtype() 才能用 astype() 二、调用方式 type(a) a.dtype b = a.astype(np.int64) #a = a.astype(np.int64) # 转换类型要赋值

Java程序设计简单练习题

整理了一下最近做的Java练习题,编程新手请多指教 1、编写一个实现由1到k的平方和计算 package demo1.code1; import java.util.Scanner; public class Calculate_k { public static int calculation(int k) { int result = 0; for (int i = 1; i <= k; i++) { result = i * i + result; } return result; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int result; int num; System.out.print("输入一个整数:"); num = sc.nextInt(); result = calculation(5); System.out.println(result); } } 2.用Java描述一个三角形,提供计算三角形面积方法。三角形的三个边长从键盘输入。 package demo1.code1; import java.

解递归式方法

分解:将原问题划分成形式相同的子问题,规模可以不等,对半或2/3对1/3的划分。 解决:对于子问题的解决,很明显,采用的是递归求解的方式,如果子问题足够小了,就停止递归,直接求解。 合并:将子问题的解合并成原问题的解。 这里引出了一个如何求解子问题的问题,显然是采用递归调用栈的方式。因此,递归式与分治法是紧密相连的,使用递归式可以很自然地刻画分治法的运行时间。所以,如果你要问我分治与递归的关系,我会这样回答:分治依托于递归,分治是一种思想,而递归是一种手段,递归式可以刻画分治算法的时间复杂度。 解递归式: 这里有三种方法:代入法、递归树法和主方法。 代入法: 定义:先猜测某个界的存在,再用数学归纳法去证明该猜测的正确性。 缺点:只能用于解的形式很容易猜的情形。 总结:这种方法需要经验的积累,可以通过转换为先前见过的类似递归式来求解。 递归树法: 起因:代换法有时很难得到一个正确的好的猜测值。 用途:画出一个递归树是一种得到好猜测的直接方法。 分析(重点):在递归树中,每一个结点都代表递归函数调用集合中一个子问题的代价。将递归树中每一层内的代价相加得到一个每层代价的集合,再将每层的代价相加得到递归式所有层次的总代价。 总结:递归树最适合用来产生好的猜测,然后用代换法加以验证。 递归树的方法非常直观,总的代价就是把所有层次的代价相加起来得到。但是分析这个总代价的规模却不是件很容易的事情,有时需要用到很多数学的知识。 主方法: 主方法是最好用的方法,书本上以”菜谱“来描述这种方法的好用之处,它可以瞬间估计一个递推式的算法复杂度。但是我们知道,这后面肯定是严格的数学证明在支撑着,对于我们用户来说,我们只用知道怎么用就行了。 优点:针对形如T(n) = af(n/b) + f(n)的递归式 缺点:并不能解所有上述形式的递归式,有一些特殊情况,见下文分析。 分析:三种情况,如下图,着重看圈线的部分: 直觉:看 f(n) 和 n^logb ^ a 的关系,谁大取谁,相等则两个相乘,但要注意看是否相差因子 nε。对于3),还要看是否满足条件 af(n/b) <= cf(n) . 就像上面所说的,该方法不能用于所有的形如上式的递归式,f(n)和n^logb ^ a的关系必须是多项式意义上的小于大于,即渐近关系(渐近小于、渐近大于),什么是渐近,就是两者相差一个因子nε。所以,在情况1和情况2之间有一定的间隙,同样情况2和请看3之间也有一定的间隙;对于情况3,还要看是否满足正则条件。 例子: 代入法:(凭直觉、经验) 1)、习题4.3-1:T(n) = T(n-1) + n 2)、习题4.3-2:T(n) = T(n/2) + 1 递归树法: 1)、对递归式T(n) = 3T(n/2) +n,利用递归树确定一个好的渐近上界,用代入法进行验证。 2)、对递归式T(n) = T(n/2) + n2,利用递归树确定一个好的渐近上界,用代入法进行验证。 主方法: 1)、对于下列递归式,使用主方法求出渐近紧确界。 a、T(n) = 2T(n/4) + 1

【OpenGL】谢尔宾斯基(Sierpinski)地毯 OpenGL分形(七)

文章目录 效果展示原理简介大致流程:关键点: 最终代码主函数代码着色器代码包含头文件 效果展示 https://www.bilibili.com/video/BV1Ri4y1g7Gg 阴影效果不是怎么好。 原理简介 大致流程: 使用的是现代OpenGL。 主要思路是首先递归(已改为迭代)生成每个正方体的偏移位置,保存到数组里面。总共迭代了5次,产生了3200000个正方体(每次正方体*20,再迭代一次的话,GPU渲染跟不上)。 然后根据OpenGL多实例渲染的特性,传入刚刚生成的偏移位置到顶点着色器(当然这些数据在代码渲染循环前已经设置为VBO传入到显存了,所以应该是着色器从显存里取)。通过在顶点着色器里面构造平移矩阵,在绘制正方体之前都平移到相应位置。 然后就是光照了,这里用的冯氏光照模型(着色处理在片段着色器)。最终产生该效果。 关键点: 内存解决: 因为VS x86运行最多给2G内存,然后迭代6次的话光存储偏移就用了接近1G的内存,所以并没有在主函数里面计算好模型矩阵后传入,而是直接传入正方体的偏移位置在着色器里面构造平移矩阵。但是这样虽然内存可以支持6次迭代,但是我的GTX1050渲染跟不上。这里产生谢尔宾斯基(Sierpinski)地毯的迭代方法是将一个基本的谢尔宾斯基(Sierpinski)地毯分解为20个正方体(下面一层和上面一层各8个,中间一层4个),即每增加一次迭代都将上一次的谢尔宾斯基(Sierpinski)地毯构造20个。使用了背面剔除,OpenGL中使用顶点绕序(winding order)来确定。所谓绕序就是当几何对象细分为三角形时,三角形顶点相对于中心的定义顺序。左侧的三角形顶点顺序为1->2->3,右侧的三角形顶点顺序为1->2->3。当观察者在右侧时,则右边的三角形方向为逆时针方向为正面,而左侧的三角形为顺时针则为背面;当观察者转到左侧时,左侧的三角形为逆时针绕序判定为正面,而右侧的三角形为顺时针绕序判定为背面。可以看出正面和背面是由三角形的顶点定义顺序和观察者的观察方向共同决定的,而且随着观察方向的改变,正面和背面将会跟着改变。 最后,talk is cheap, show me the code,我将代码都给出了,然后在关键地方添加了注释! 欢迎大家批判指正,如果有任何优化的地方都欢迎指出! 最终代码 主函数代码 main.cpp #include <iostream> #include <vector> #include <cmath> #define GLEW_STATIC #include <GL/glew.h> #include <GLFW/glfw3.h> #include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/type_ptr.hpp> #include "Shader.h" #include "Camera.h" bool stop = true; // 空格键 控制是否旋转 const GLfloat sizeCube = 0.1f; // 正方体大小 const int pos[] = { // 20个位置,表示一个谢尔宾斯基(Sierpinski)地毯 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, 0, 0, 2, 0, 0, 1, 2, 0, 2, 1, 0, 2, 2, 0, 0, 0, 1, 0, 2, 1, 2, 0, 1, 2, 2, 1, 0, 0, 2, 0, 1, 2, 0, 2, 2, 1, 0, 2, 2, 0, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2 }; GLfloat vertices[] = { // 正方体局部坐标 法向量(用于光照) // 正方体局部坐标 法向量(用于光照) // Back face -sizeCube, -sizeCube, -sizeCube, 0.

计算机网络期末习题个人解法

总结了一下计算机网络期末考试的试题,因为有很多考研真题,试卷的难度还是很大的,值得记录一下。 当数据由主机 A 发送到主机 B,不参与数据封装工作的是_______ A. 物理层 B.数据链路层 C.网络层 D. 传输层 A物理层,因为物理层仅负责比特层次的传输工作。下列哪种交换方法最有效地使用网络带宽? A. 分组交换 B. 报文交换 C. 电路交换 D. 各种方法都一样 A分组交换,因为分组交换中每个分组可以使用链路的全部带宽,而电路交换不管是频分复用还是时分复用,都只能使用一部分若用户程序使用 UDP 进行数据传输,则_______层协议必须承担可靠性方面的 全部工作。 A. 数据链路层 B. 网络层 C. 传输层 D. 应用层 D应用层,因为UDP协议是运输层的不可靠协议,所以只能要求上层协议负责可靠性的工作,即应用层,相当于要求编写客户端的程序员编写时完成可靠性要求在 TCP/IP 体系结构中,直接为 ICMP 提供服务的协议是______。 A. PPP B. IP C. UDP D. TCP BIP协议,ICMP是internet控制报文协议,是TCP/IP的一个子协议。实际上就算不知道,也可以通过TCP协议和IP协议中两者的层次结构选择。TCP协议是运输层协议,而IP协议是网络层协议,所以为ICMP协议提供服务的应该是下层的IP协议TCP/IP 参考模型的网络层提供的是______。 A. 无连接不可靠的数据报服务 B. 无连接可靠的数据包服务 C. 有连接不可靠的虚电路服务 D. 有连接可靠的虚电路服务 DTCP是有链接的电路服务,而且是在IP不可靠传输上的可靠传输下列 TCP/IP 应用层协议中,可以使用传输层无连接服务的是______。 A. FTP B. DNS C. SMTP D. HTTP BDNS协议服务于DNS域名系统,可以使用UDP协议进行传输在以太网的二进制回退算法中,在 11 次碰撞之后,站点会在 0~______之间选 择一个随机数。

【报错】Qt报错 error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”

出现这个报错,网上搜出来的都是使用vs出现的问题,都是vs的解决方法。 找到一篇关于Qt的,地址:https://blog.csdn.net/caoshangpa/article/details/51416077 就是参照vs的设置方法,在qt设置相同的方式,只不过Qt是通过pro文件进行设置 按照文中的设置方法,我这边只需要设置: CONFIG(debug, debug|release) { QMAKE_CXXFLAGS_DEBUG += /MTd } CONFIG(release, debug|release) { QMAKE_CXXFLAGS_RELEASE += /MT } debug为/MTd,release为/MT。设置完必须清理→qmake→重新构建,方可有效,我就在这花了很多时间,因为没有清理,再重新构建。

关于pycharm在命令行git错误的解决

git push origin master 出现:error:cannotspawnsh:No such file ordirectory fatal:could not read Usernamefor & #39; https://github.com&#39;:No such file ordirectory 出现:error:cannotspawnsh:No such file ordirectory fatal:could not read Usernamefor & #39; https://github.com&#39;:No such file ordirectory) 之前我在2017版本的pycharm中将django项目push到GitHub的仓库中去,结果就出现了这样的错误;我也在网上查了许多的资料都尝试了一遍依旧没有解决,最后我卸载了17版本的pycharm,安装了新版本的pycharm结果就好了。