Other

源代码管理工具介绍

前言: 为了解决软件开发出现的种种问题,现在又越来越多的源代码管理工具来方便我们管理、编写代码,目前常见的源代码管理工具有TFS、Github、CVS、VSS等等,本文将简单介绍一下一些常见的源代码管理工具,并结合自己的项目重点介绍其中的Github。 几种常见的源代码管理工具 1、TFS TFS作为Microsoft下的一款产品,使用起来十分方便,可以与Vs无缝衔接,而且功能不仅限于源代码管理,也有项目管理,支持团队中的各种不同分工,能让团队配合更紧密。现在还有TFS online自动部署配置解决了TFS部署困难的问题。 2、CVS CVS作为早期的免费开源工具,能够帮助我们将过去的许多版本以某种方式消耗少量内存储存起来,但是由于出现较早,存在编码问题,最终被SVN所替代。 3、SVN SVN也是开源的代码管理工具,它会将每一次改动的代码放入一个中央的代码库,方便我们在有bug的时候恢复到早期的版本,让我们省去了频繁备份的工作,而且节省了许多空间。 4、Github Github作为当今开发管理软件开发的首选,具有强大的功能,要在Github上推送代码十分简单,只需要将写好的代码通过“fork”按钮提交到代码库中,然后刷新之后就可以看到,除了版本控制等,也可以看见每段代码出自于谁手,方便项目经理进行管理。Github就像一个远程服务器,开发者需要把代码上传到服务器,其他人也可以在服务器上下载查看代码,并且还附带了各种库的合并,复制等功能,方便开发者使用。 我的团队将如何使用Github 我们的项目是一款健康管理的项目,编写的语言是java,因此也采用了最主流的Github,在团队管理这方面Github给了我们很大的帮助,我们可以清晰地看到谁写了哪一部分,出了问题之后可以直接让对应的人去修改,让团队管理变得更清晰,每个人的工作量也直观的反映了出来,除了团队管理外,我们写的代码在拼接的时候经常性的会出一些bug,而Github可以将源代码返回到先前,帮助我们解决处理各种bug。而且操作起来也十分简介,只要在eclipse上安装git插件,然后创建一个库,就可以把java的代码放进Git的库里了,也可以很方便的把库里的东西导入进入eclipse。同时我们还可以在Github的官网上搜索公开的代码,让我们有了借鉴和参考的对象。  创建Github库 搜索  

<a>标签rel属性详解

<a>标签rel有哪些取值? <a>标签有如下取值: nofollow external noopener noreferrer SEO相关:nofollow和external 浏览器安全相关:noopener和noreferrer rel值的含义和作用 nofollow nofollow用于告知搜索引擎,当前链接不需要追踪,其内容是没有价值的,不传递权重。 SEO的作用 调整网页链接的权重,集中站点权重 添加nofollow后,爬虫不会追踪有此标记的链接。并且,不会传递当前站点的权重到新的链接,避免被分散。 可以把权重引导到更重要的页面,有利于提升网站的排名。 反垃圾链接 网站通常有留言功能,一些人会利用这个功能,在评论的时候,留下自己站点的链接。加上nofollow进行屏蔽后,可以防止当前站点的权重流失。 节约蜘蛛资源 每个站点,搜索引擎每天派出的爬虫数是一定的。尽量把爬虫引导到有用的链接上,有利于重要页面的收录。 加了nofollow的链接页面会不会被收录? 链接页面还是会被收录和索引,只是没有分配该页面权重。因为爬虫还是可以通过站点地图、内链、外链等方式,访问到链接页面。 与robots的区别 robots是搜索引擎协议文件,nofollow是HTML标签的一个属性值。 robots主要用于屏蔽动态链接,让搜索引擎不爬取动态链接的内容。 nofollow让搜索引擎不要跟踪标记了该属性的链接,使其不传递权重。 external rel=external和target=_blank的作用一样,都是在新窗口中打开当前链接。 如果网点采用严格的DOCTYPE声明,则target=_blank会失效。而rel=external仍可以正常工作。 SEO的作用 告知搜索引擎,当前链接是外部链接。 noopener noopener用于浏览器安全防护,防止钓鱼攻击。 当链接使用target=_blank打开新页面时,新页面可以使用以下语句控制父页面: if (window.opener) { window.opener.location=https://wangxiaokai.vip?referrer=+document.referrer; } 链接加上rel=noopener后,则新页面被限制访问window.opener。 noreferrer 与noopener类似,设置了rel=noreferrer后,链接的新页面被限制访问window.opener。同时,新页面无法获取document.referrer信息,该信息包含了来源页面的地址。 因为一些旧的浏览器不支持noopener,所以为也兼容,会同时设置两个属性值rel=noopener noreferrer。 参考 nofollow是什么意思及nofollow作用 聊聊rel=external nofollow和rel=noopener noreferrer noopener, noreferrer 及 nofollow 的用法

JavaSE_多态

多态 多态性主要表现在两个方面: 重载:一个类中定义多个名字相同而实现不同的成员方法 要求与父类的方法名必须相同 方法的参数列表一定不一样 访问修饰符和返回值类型可以相同但也可以不同,但仅修饰符和返回值类型不同不构成重载 重写:对继承父类的某个成员方法进行重新实现 方法名与返回值类型必须与父类相同 参数列表必须相同 访问权限不能比父类中被重写的方法的访问权限低 子类若跟父类在同一个包中,父类中除了private和final的方法均可被重写 构造方法不能被重写,每个方法均有属于自己的构造方法 多态中成员访问特点 成员变量:编译看左边,执行看左边 成员方法:编译看左边,执行看右边 为什么成员方法和成员变量的访问不一样 因为成员方法有重写,而成员变量没有 多态的利弊 好处 提高了程序的扩展性 定义方法的时候,使用父类型作为参数,在将来使用时,使用具体的 子类型参与操作 弊端 不能使用子类所特有的功能 上转型对象不能访问其子类对象新增加的成员变量和方法,只能访问被子类继承并重写的变量或方法 抽象类 抽象类特点 抽象类和抽象和方法必须使用abstract关键字修饰 抽象类中不一定有抽象方法,有抽象方法的一定是抽象类 抽象类原则上必须被继承,抽象方法必须被重写 抽象类的子类 要么重写抽象类中的所有抽象方法、 要么该子类也是抽象类 抽象类不能实例化 若一定要实例化抽象类,可参照多态的方式,通过子类对象实例化,这叫抽象类多态 抽象类的成员特点 抽象类中有成员变量

ubuntu-server升级内核

一、概述 目前系统信息: 版本:ubuntu-18.04.6-server-amd64 内核版本:4.15.0-156-generic  由于需要安装k8s某个组件,需要内核版本>= 4.9,因此需要做一下升级。  二、操作 要升级 Ubuntu 的内核,打开 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 并选择列表中需要的版本(此文使用的内核是 5.2.21) 链接如下:https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.2.21/  接下来,根据你的系统架构下载 .deb 文件,由于我的是amd架构,查看此区域    注意:并不是每一个文件都要下载,只需要下载几个核心文件即可,如下: linux-headers-5.2.21-050221_5.2.21-050221.201910111731_all.deb linux-headers-5.2.21-050221-generic_5.2.21-050221.201910111731_amd64.deb linux-image-unsigned-5.2.21-050221-generic_5.2.21-050221.201910111731_amd64.deb linux-modules-5.2.21-050221-generic_5.2.21-050221.201910111731_amd64.deb 直接下载会比较慢,建议开启迅雷下载,几分钟就搞定了。  下载内核文件后,将它们放到一个文件夹中,然后安装 dpkg -i *.deb  安装完成后,立即重启系统 reboot  重置之后,再次查看内核版本 # uname -r 5.2.21-050221-generic 看到这个信息,说明升级成功了。  本文参考链接: https://blog.csdn.net/weixin_40837318/article/details/123591042  

MyBatis中XML当集合中的数据为java自带类型时配置方式

Bean @Data public class AdminDetailsVO implements Serializable { private Long id; private String username; private String password; private List<String> permissions; } XML配置 <resultMap id=DetailsResultMap type=cn.tedu.csmall.passport.pojo.vo.AdminDetailsVO> <id column=id property=id /> <result column=username property=username /> <result column=password property=password /> <collection property=bean中的名称 ofType=java.lang.String> <constructor> <arg column=sql中的字段名称 /> </constructor> </collection> </resultMap>

Linux安装(二十一)之supervisorctl安装

supervisorctl安装介绍 Supervisor 是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制 安装 yum install -y epel-release && yum install -y supervisor 开机自启supervisord systemctl enable supervisord 启动supervisord systemctl start supervisord 检查启动状态 systemctl status supervisord   开启web访问 vim /etc/supervisord.conf 将如下图中信息改为下下图中信息    去掉注释,修改ip端口,用户名,密码 重新加载配置文件 supervisorctl reload nginx映射配置 server { listen 80; server_name test-xxx.xxx.com;//自己的域名,写localhost也可以 location /supervisor/{ proxy_pass http://192.168.9.102:9001/; } } 查看配置文件 cat supervisord.conf 新增ini文件,让supervisorctl管理 cd /etc/supervisord.d/ 新增文件 vim project-web.ini 内容如下 [program:project-web] directory = /home/project ;启动目录 command = java -jar project-web.

Java项目实战——瑞吉外卖Day05

瑞吉外卖开发笔记 五 笔记内容为黑马程序员视频内容 套餐管理业务开发 新增套餐 需求分析 套餐就是菜品的集合。 后台系统中可以管理套餐信息,通过新增套餐功能来添加一个新的套餐,在添加套餐时需要选择当前套餐所属的套餐分类和包含的菜品,并且需要上传套餐对应的图片,在移动端会按照套餐分类来展示对应的套餐。 数据模型 新增套餐,其实就是将新增页面录入的套餐信息插入到setmeal表,还需要向setmeal_dish表插入套餐和菜品关联数据。所以在新增套餐时,涉及到两个表: setmeal 套餐表 setmeal_dish 套餐菜品关系表 代码开发-准备工作 在开发业务功能前,先将需要用到的类和接口基本结构创建好: 实体类SetmealDish(直接从课程资料中导入即可,Setmeal实体前面+ 课程中已经导入过了) DTO SetmealDto(直接从课程资料中导入即可) Mapper接口SetmealDishMapper 业务层接口SetmealDishService 业务层实现类SetmealDishServicelmpl 控制层SetmealController 代码开发-梳理交互过程 在开发代码之前,需要梳理一下新增套餐时前端页面和服务端的交互过程: 1、页面(backend/ page/comboladd.html)发送ajax请求,请求服务端获取套餐分类数据并展示到下拉框中 2、页面发送ajax请求,请求服务端获取菜品分类数据并展示到添加菜品窗口中 3、页面发送ajax请求,请求服务端,根据菜品分类查询对应的菜品数据并展示到添加菜品窗口中 在DishController添加list方法 //根据条件查询对应菜品数据 @GetMapping(/list) public R<List<Dish>> list(Dish dish){ //构造查询条件 LambdaQueryWrapper<Dish> lambdaQueryWrapper=new LambdaQueryWrapper<>(); //添加条件,查询状态为1的(起售状态) lambdaQueryWrapper.eq(Dish::getStatus,1); lambdaQueryWrapper.eq(dish.getCategoryId()!=null,Dish::getCategoryId,dish.getCategoryId()); //条件排序条件 lambdaQueryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime); List<Dish> list=dishService.list(lambdaQueryWrapper); return R.success(list); } 4、页面发送请求进行图片上传,请求服务端将图片保存到服务器 5、页面发送请求进行图片下载,将上传的图片进行回显 6、点击保存按钮,发送ajax请求,将套餐相关数据以json形式提交到服务端 在SetmealServiceImpl实现saveWithDish方法:新增套餐,同时要保持与菜品的关联关系 @Service public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService{ @Autowired private SetmealDishService setmealDishService; //新增套餐,同时要保持与菜品的关联关系 @Override @Transactional public void saveWithDish(SetmealDto setmealDto) { //保存套餐基本信息,操作setmeal,执行insert操作 this.

Linux系统sed命令常用参数实战

Linux系统sed命令常用参数实战 常用参数 -n 输出第n行的文本内容,通常与p联合使用, -e 命令行模式下进行sed的动作编辑,输出编辑后的内容,源文件不会发生变化 -f 以命令中指定的script文件来处理输入的文本文件 -i 直接编辑源文件 常用动作参数 a 行后追加行 c 替换 d 删除 i 行前插入行 p 打印 s 查找并替换 插入操作 行前插入 [root@localhost data1]# sed -i -e '2itest' test.txt 行后插入 [root@localhost data1]# sed -i -e '2atest' test.txt 尾行插入 [root@localhost data1]# sed -i -e '$a123' test.txt 插入多行\n表示换行,\t 表示一个制表位 [root@localhost data1]# sed -i -e '2i123\n123\t123' test.

Java程序运行机制

Java程序运行机制 编译型:全部完成编译后才可以在平台上运行 解释型:运行期间才发生编译 编译型的运行速度快,解释型的跨平台性好 程序运行机制

SpringBoot项目连接ElasticSearch时报错:None of the configured nodes are available

在项目中用到了ElasticSearch,后台使用org.elasticsearch.client.transport.TransportClient连接,使用本机的es测试没问题,但是用部署到公司服务器上的es创建索引报错:None of the configured nodes are available 网上找了好多种解决方案都不适用,最后无意中看到了client.transport.sniff这个参数的介绍,把它设置成false,或者在连接的时候不加这个参数就可以了。看来我们不能只一味地面向百度编程,还要理解每个参数的意思才行。client.transport.sniff为true时,客户端会自动去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中。一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器,但是要注意的一点,当ES服务器监听(publish_address )使用内网服务器IP,而访问(bound_addresses )使用外网IP时,不要设置client.transport.sniff为true。不设置client.transport.sniff时,默认为false(关闭客户端去嗅探整个集群的状态)。因为在自动发现时会使用内网IP进行通信,导致无法连接到ES服务器。因此此时需要直接使用addTransportAddress方法把集群中其它机器的ip地址加到客户端中(此段话转自“Kevin-林”)。 总结一下,再遇到此类问题的解决方案: 1:检查es集群名称是否正确,检查es的ip和端口号是否正确,端口号是9300tcp协议端口号 2:阿里云等服务器是否已将9300端口号增加到安全组 3:es是否启用了用户名密码登录:.put(xpack.security.user, 用户名:密码) 4:client.transport.sniff参数是否设置正确