CentOS7端口已开但ssh连接不上

问题:有一台云主机,已经有公网IP,无法SSH连接。 首先用22端口尝试,发现不能连接。通过vnc登录到后台了,查看/etc/ssh/sshd_config发现22端口是被注释掉的,所以不能访问: #Port 22 于是将22端口前面的注释去掉,重启sshd服务: systemctl restart sshd 即可远程登录: ssh user@ip -p 22 但22端口不安全,于是新增一个端口: Port 4567 重启sshd服务后,发现ssh并不能访问,搞了好一会没有发现是什么问题,突然想起防火墙还没有放通,郁闷。 放通端口: firewall-cmd --list-ports # 查看当前放通的端口 firewall-cmd --zone=public --add-port=4567/tcp --permanent # 放通端口 firewall-cmd --reload # 重启防火墙后生效 再尝试ssh就可以连接了。 参考: [1] https://www.cnblogs.com/eaglezb/p/6073739.html

idea maven项目dependencies红线 解决办法

方法一:根据提示检查pom文件,找到问题点,pom文件不用处理, 根据提示找到问题出现的文件夹。这个是同事自己打包的一个依赖包。我的本地maven仓库里没有,所以,将这个文件夹拷贝到maven仓库里。 从这里可以找到本地的仓库。 然后,这三个按钮都点一下 如果还报错,就重启idea试试。如果不行就试试方法二。 方法二:直接打开该打包文件 查看新打开项目的maven仓库,将地址配置的和上面的一样。 然后这些按钮都点一下, 重新打开我们的工作项目,刷新maven查看是否已解决,如果仍然报错,重启idea,问题解决OK

Syntax error: Bad for loop variable

如果会报错,没有则跳过: Syntax error: Bad for loop variable 原因:代码对于标准bash而言没有错,因为Ubuntu为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼。 解决方法:取消dash dpkg-reconfigure dash 出现弹框,选择NO 或者这样执行: bash xxx.sh

解决PyTorch报错“no CUDA-capable device is detected”

在进行PyTorch调用GPU进行计算时,出现如下错误: THCudaCheck FAIL file=/opt/conda/conda-bld/pytorch_1511304568725/work/torch/lib/THC/THCGeneral.c line=70 error=38 : no CUDA-capable device is detected ... RuntimeError: cuda runtime error (38) : no CUDA-capable device is detected at /opt/conda/conda-bld/pytorch_1511304568725/work/torch/lib/THC/THCGeneral.c:70 解决方法: S1. 新建终端窗口,运行命令sudo nvidia-settings,在弹出的NVIDIA窗口中查看自己的显卡编号,如下图所示: S2. 打开相应的Python源码文件,查找形如os.environ["CUDA_VISIBLE_DEVICES"]的代码行,将右边的数字改为上述查看的显卡编号,如下图所示: 至此,问题解决。

Postgressql获取当前系统的年份及上一年和下一年

一、以下是获取系统当前年份的三种方法,根据需求选择使用 1、第一种为 character varying格式:select to_char(current_date,'yyyy') 2、第二种为double precision 格式类型:select extract(year from now()) 3、第三种 为character varying格式类型: select to_char((SELECT now()::timestamp),'yyyy') 二、在分享一个获取上一年的和获取下一年的年份 两种方法均为character varying格式类型: 1、获取上一年:select to_char((SELECT now()::timestamp+ '-1 year'),'yyyy') 2、获取下一年:select to_char((SELECT now()::timestamp+ '1 year'),'yyyy')

centos7端口无法访问端口拒绝访问解决办法

在centos7监听端口启动对外服务后可能遇到端口拒绝访问的情况。 服务确保正常运行的情况下,大家一般都会想到是防火墙搞的鬼。 而centos7自带的防火墙已经不是iptables了,改成了firewalld。 如果你仅仅是开发环境的话,可以考虑选择直接把防火墙关掉: systemctl disable firewalld systemctl stop firewalld 运行上述两条命令后防火墙就关闭了,且不会开机自启动。 注意:在生产环境切记不要随意关闭防火墙

结构体字符串的输入:

1、通过strcpy函数将字符串复制过去 #include <stdio.h> #include <string.h> struct student{ char name[10]; }; int main (void) { struct student boy1; strcpy (boy1.name, "Harry"); printf ("%s\n", boy1.name); return 0; } 使用这种方法需要注意的是: (1)需要包含头文件<string.h> (2)需要一个个进行赋值,比较麻烦 (3)在不同的编译器中对strcpy函数支持不同,比如vs2013就需要使用strcpy_s这个函数,此函数需要三个参数,中间需要加上一个复制字符串的长度。 2、定义结构体指针进行输入: #include <stdio.h> #include <malloc.h> struct student{ char name[10]; }; int main (void) { struct student *p_boy1; p_boy1 = (struct student *)malloc(sizeof (struct student)); printf ("Input your name:"); scanf ("%s", &p_boy1->name); printf ("%s\n", p_boy1->name); return 0; } 使用这种方法需要注意的是: (1)需要定义一个结构体指针,上边定义的是p_boy1这个指针;

生命在于分享

生命在于分享 在开发过程中难免会遇到一些之前没考虑到或者根本不知道的问题,一般搜索引擎会帮解决大部分。我个人有做笔记的习惯,日积月累下来发现自己的私人笔记本上已经积累了不少的知识。 最近写简历时发现,让它们烂在私人笔记里,倒不如写成博客发在网上。第一可以帮助他人,第二可以丰富下自己的简历。 哈哈所以随便写了这些东西来试用下编辑器~

Presto常用函数

Presto 0.216 官方文档 Presto 0.216 官方文档-时间 1.时间相关函数 1.1 :date_parse date_parse(String,format): 把字符格式的時間格式化為时间戳 SELECT date_parse('1995/01/07','%Y/%m/%d') 输出结果为:789408000000,即对应的时间为:1995-01-07 00:00:00 1.2 :date_diff date_diff(unit, timestamp1, timestamp2) → bigint:计算两个时间的间隔,unit为指定的间隔单位(millisecond,second,minute,hour,day,week,week,week,year)。 select date_diff('day',cast('2018-09-05' as date),cast('2018-09-07' as date)) as result ; 查询结果: result -------- 2 (1 row) 1.3:时间格式化 from_unixtime(unixtime) → timestamp format_datetime(timestamp, format) → varchar presto:systex_sbt> select format_datetime(from_unixtime(1550482809),'yyyy-MM-dd HH:mm:ss'); 查询结果: _col0 --------------------- 2019-02-18 17:40:09 (1 row) 2.字符相关函数 2.1:使用||连接其他列生成新的一列 例子: presto:systex_sbt> select 'a' || 'b' as result; result -------- ab (1 row) 2.

Ubuntu设置开机自动执行命令

赋予文件start-zk.sh文件可执行权限 sudo chmod +x start-zk.sh 执行命令,将脚本添加到初始化执行的队列中去,start-zk.sh 需要放到 /etc/init.d/ 目录下,执行如下指令,在这里90表明一个优先级,越高表示执行的越晚(空格太大容易产生insserv: missing valid name for `Provides:' please add.这个问题): sudo update-rc.d start-zk.sh defaults 90 .sh文件头部加上: #!/bin/bash ### BEGIN INIT INFO # Provides: lostphp.com # Required-Start: $local_fs $network # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: wsocket service # Description: wsocket service daemon ### END INIT INFO 或者: #!/bin/sh ### BEGIN INIT INFO # Provides: start_test.

Centos7系统中Tomcat部署web项目

1、新建一个简单的Spring MVC项目 使用IDEA 新建一个Spring MVC项目 选择Spring MVC,如下图 点击Next,如下图 勾选上Create Project from template。然后点击Next。 项目命名SpringMVCDemo,然后点击Finish。 测试SpringMVCDemo项目,如下图所示,测试成功。 通过Maven工具,打包SpringMVCDemo项目为war包。 2、将web项目部署到Tomcat下 首先,把第一步创建的SpringMVCDemo项目传输到Centos7系统的Tomcat目录:/usr/local/src/apache-tomcat-8.5.38/webapps下。 然后重启Tomcat,命令为:/usr/local/src/apache-tomcat-8.5.38/bin/startup.sh。 最后,测试web项目是否部署成功。

layuiAdmin 常见问题与解决方案

单页版缓存问题 由于单页面版本的视图文件和静态资源模块都是动态加载的,所以可能存在浏览器的本地缓存问题,事实上我们也考虑到这个,因此,为了避免改动后的文件未及时生效,你只需在入口页面(默认为start/index.html)中,找到 layui.config ,修改其 version 的值即可。 我们推荐你分场景来更新缓存: 场景一:如果项目是在本地开发。你可以设置 version 为动态毫秒数,如: version: new Date().getTime() //这样你每次刷新页面,都会更新一次缓存 场景二:如果项目是在线上运行。建议你手工更新 version,如: version: '1.0.0' //每次发布项目时,跟着改动下该属性值即可更新静态资源的缓存 动态模板中的 select 正确用法 当你试图用动态模板输出 <select>元素 的 <option></option> 时,务必注意不要将动态模板结构放在 select 内部,而应该将 select 整体放在动态模板内,然后在遍历输出 option,如: <script type="text/html" lay-url="" template> <select name="" lay-filter=""> {{# layui.each(d, function(index, item){ }} <option value="{{ item.value }}">{{ item.title }}</option> {{# }); }} </select> </script> 由于 select 标签的特殊性,很多同学将 <script type="text/html" lay-url="" template> </script> 放在了 select 标签的里面,导致无法正确输出相应视图,所以请务必纠正写法。 刷新动态模板 如果需要对一个已经渲染完毕的动态模板再次进行刷新,可以借助 view 模块的 refresh 方法。方法如下:

【vue踩坑记录】3、“Error in render: "TypeError: Cannot read property '0' of undefined"”渲染错误问题

【前提】: 搭建项目商家详情头部时,能够完整渲染出整体头部界面无问题,但开发者工具仍然报出“Error in render: "TypeError: Cannot read property '0' of undefined”错误,具体如下 【解决过程】: 首先Google翻一下: 见文之意:这里的意思就是模板在渲染时候,读取对象中的某个对象的属性值时,这个对象不存在,说通俗点就是三层表达式a.b.c,在对象a中没有对象b,那么读取对象a.b.c中的值,自然会报错。如果是两层表达式a.b则不会报错,返回的是undefined。 明白了原因之后上手排查代码发现果然下面vue模板代码中果然出现了三层表达式,十分可疑,出错的地方应该就在这里,不过为什么呢? 【根本原因】: 我们发现这里的info是vuex中state管理加载的数据,异步调用显示,然后vue渲染机制中: 异步数据先显示初始数据,再显示带数据的数据, 所以上来加载info时候还是一个空对象如下 当渲染完成后,才加载异步数据如下: 所以在渲染时,出现的三层表达式在info中取support[0]数组中的小标为0的对象还不存在,再在这个对象中取其他值自然会报错,但是渲染完成后,info中的值加载好了,自然可以取到,这也就解释了为什么界面正常显示,但开发者工具会报错的原因。 【解决方案】: 在上面一个div中添加v-if判断条件,如果info.supports取不到,则不加载该div即可解决。(注意,不能用v-show,v-show的机制是加载后,根据条件判断是否显示)

纯css实现各种箭头图片效果

我们经常会通过使用css来实现某些图片的来达到不使用真正意义上的图片的效果,今天就尝试着使用纯css来实现几个常见的箭头效果 下面的css都是使用在span标签上的 1.普通箭头 向上箭头 图片效果: 代码: .normal_top_arrow { display: inline-block; width: 80px; height: 110px; box-shadow: 0px 0px 0px 25px #ffffff inset; background-color: #ff0000; } .normal_top_arrow::after { content: ""; position: relative; top: -15px; border-bottom: 40px solid #ff0000; border-left: 40px solid transparent; border-right: 40px solid transparent; } 向下箭头 图片效果: 代码: .normal_bottom_arrow { display: inline-block; width: 80px; height: 110px; box-shadow: 0px 0px 0px 25px #ffffff inset; background-color: #ff0000; } .normal_bottom_arrow::after { content: "

架构设计(3)--架构模式

架构模式的一些要点和架构设计原则是相类似的。表示系统架构的基本结构组织方案。它提供了一组预定义的子系统、指定它们的职责,并且包括用于组织其间关系的规则和指导。 1、分层 分层:对模型中同一抽象层次上的包进行分组的一种特定方式。通过分层,从逻辑上将子系统划分成许多集合,而层间关系的形成要遵循一定的规则。通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。(层是对构架的横向划分,分区是对构架的纵向划分)。 层(layer)这个概念在计算机领域是非常NB的一个概念。计算机领域处处体现层的概念:计算机本身:(系统调用层、设备驱动层、操作系统层、CPU指令集,每个层都负责自己的职责。网络5层模型:(物理层、链路层、网络层、传输层、应用层)。 层到了软件领域也一样好用。为什么呢?我们看看使用层技术有什么好处: ● 你使用层,但是不需要去了解层的实现细节。 ● 可以使用另一种技术来改变基础的层,而不会影响上面的层的应用。 ● 可以减少不同层之间的依赖。 ● 容易制定出层标准。 ● 底下的层可以用来建立顶上的层的多项服务。 当然,层也有弱点: ● 层不可能封装所有的功能,一旦有功能变动,势必要波及所有的层。 ● 效率降低。 当然,层最难的一个问题还是各个层都有些什么,以及要承担何种责任。最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责。通过分层: 1、从逻辑上将子系统划分成许多集合,而层间关系的形成要遵循一定的规则。 2、可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。 网站一般分为三个层次:应用层、服务层和数据层,其具体结构如下图所示: 通过分层,一个庞大系统切分成不同部分,便于分工合作和维护。 应用层:主要负责具体的业务逻辑处理 服务层:提供可复用的服务 数据层:负责数据的存储和访问 但是,分层架构也有一些挑战:①必须合理规划层次边界和接口;②禁止跨层次的调用及逆向调用。 2、分割 分割是在纵向方面对软件进行切分->将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,有助于软件开发和维护,还便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。 3、分布式 ①分布式应用和服务:应用和服务模块分布式部署,便于业务功能扩展; ②分布式静态资源:JS、CSS、LOGO图片等资源独立部署,采用独立域名->动静分离; ③分布式数据和存储:传统RDBMS分布式部署和NoSQL产品; ④分布式计算:Hadoop及其MapReduce分布式计算框架,其特点是移动计算而不是移动数据。 4、集群 多台服务器部署相通应用构成一个集群,通过负载均衡设备共同对外提供服务。当某台服务器发生故障,负载均衡设备或者系统的失效转移机制将请求转发到集群中的其他服务器上,提高系统的可用性,即所谓的HA(高可用性)。 所以,在网站应用中,即使是访问量很小的分布式应用和服务,也至少要部署两台服务器构成一个小集群。 5、缓存 缓存是改善软件性能的第一手段。在复杂的软件设计中,缓存几乎无处不在。 ①CDN:内容分发网络,缓存网站的一些静态资源; ②反向代理:部署在网站的前端,最先访问到的就是反向代理服务器; ③本地缓存:在应用服务器本地缓存热点数据,无需访问数据库; ④分布式缓存:应用程序通过网络通信访问缓存数据; 网站应用中,缓存除了可以加快数据访问速度,还可以减轻后端应用和数据存储的负载压力。 6、异步 业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。 异步架构是典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,这对网站扩展新功能非常便利。 异步消息队列可以提高系统可用性、加快网站响应速度,消除并发访问高峰。 7、冗余 要想保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。 数据库除了定期备份存档保存实现冷备份之外,为了保证在线业务高可用,还需要对数据库进行主从分离,实时同步实现热备份。 8、自动化 在无人值守的情况下,网站可以正常运行,一切都可以自动化是网站的理想状态。目前大型网站的自动化架构设计主要集中在发布运维方面。 ①发布部署过程自动化; ②自动化代码管理; ③自动化测试; ④自动化安全监测; 9、安全 ①通过密码和手机校验码进行身份验证; ②对登录、交易等操作进行加密; ③使用验证码进行识别; ④对于常见的XSS攻击、SQL注入、编码转换等进行防范; ⑤对垃圾或敏感信息进行过滤; ⑥对交易转账等操作进行风险控制; 思维导图: 再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

spring boot linux部署

linux强制杀死某个端口进程命令,例如80端口: sudo fuser -k -n tcp 80 linux启动jar包,配合静态资源 java -cp static -jar ***.jar linux运行命令 //&代表在后台运行。 //特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。 java -jar XXX.jar & //nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 nohup java -jar XXX.jar &

Centos7.2安装MySQL8

1. 进入MySQL的网站下载安装包(wget) https://dev.mysql.com/downloads/mysql/ 往下拉~~~~,直到下面这儿,请看图: 2.选择系统发行版本(CentOS7),选择安装包版本(根据自己的要求选择,这儿选择的是64位版本),如果不知道系统版本是多少位,使用 uname -a 查询; 3.选择RPM Buddle,点击右侧‘download’按钮进去; 4.拉到最底下,右键红线框文字,点击复制链接地址; 5.执行下面的命令: wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.14-1.el7.x86_64.rpm-bundle.tar 6.等待下载 7.解压安装包; tar -xvf mysql-8.0.14-1.el7.x86_64.rpm-bundle.tar 8.安装开始,执行以下命令(注意自己下载安装包的版本号): # rpm -ivh mysql-community-common-8.0.14-1.el7.x86_64.rpm --nodeps --force # rpm -ivh mysql-community-libs-8.0.14-1.el7.x86_64.rpm --nodeps --force # rpm -ivh mysql-community-client-8.0.14-1.el7.x86_64.rpm --nodeps --force # rpm -ivh mysql-community-server-8.0.14-1.el7.x86_64.rpm --nodeps --force 9.查看MySQL的安装包 rpm -qa | grep mysql 10.通过以下命令,完成对 mysql 数据库的初始化和相关配置 mysqld --initialize; ## 可能会报错,如果报错如下: ## mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory ## 则执行: yum -y install numactl ## 再执行上面命令 chown mysql:mysql /var/lib/mysql -R; systemctl start mysqld.

VB中ACS()与string()函数

1.ASC()是将全角转换为半角的函数,当字符为全角时,占用两个字节,例如在文本里输入ABC,若是全角,则字母间会有空格,但是半角则只占一个字节,更加紧凑。 2.string()的功能是创建字符串,string(数量,字符), 例如string(5,b)则输出bbbbb,string后取的是字符,而不是字符串,例如string(5,bcd)输出也会是bbbbb,取第一个字符组成字符串

纯css 写右箭头,上下箭头,实心三角形,超出打省略号

1.右箭头 .right-arrow { display :inline-block; position: relative; width: 36rpx; height: 36rpx; margin-right: 20rpx; } .right-arrow::after { display: inline-block; content: " "; height: 18rpx; width: 18rpx; border-width: 4rpx 4rpx 0 0; border-color: #c7c7cc; border-style: solid; transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0); position: absolute; top: 50%; right: 6rpx; margin-top: -9rpx; } 右箭头效果 2.上下箭头 // 下箭头 .down-arrow { display :inline-block; position: relative; width: 40rpx; height: 30rpx; margin-right: 20rpx; } .down-arrow::after { display: inline-block; content: "

NVIDIA CUDA各版本下载链接(更新至2019-12-11,包含最新10.2版本)

以下是从NVIDIA官网转过来的链接,方便需要下载各种版本CUDA的同学。 CUDA Toolkit 10.2 (Nov 2019), Versioned Online Documentation CUDA Toolkit 10.1 update2 (Aug 2019), Versioned Online Documentation CUDA Toolkit 10.1 update1 (May 2019), Versioned Online Documentation CUDA Toolkit 10.1 (Feb 2019), Versioned Online Documentation CUDA Toolkit 10.0 (Sept 2018), Online Documentation CUDA Toolkit 9.2 (May 2018),Online Documentation CUDA Toolkit 9.1 (Dec 2017), Online Documentation CUDA Toolkit 9.0 (Sept 2017), Online Documentation CUDA Toolkit 8.0 GA2 (Feb 2017), Online Documentation