1. tomcat启动报错

报错内容:ERROR RUNNING 'TOMCAT': UNABLE TO OPEN DEBUGGER PORT (127.0.0.1:38667): JAVA.NET.SOCKETEXCEPTION "SOCKET CLOSED

原因:tomcat 1089端口被占用

解决办法:

netstat -ano | find "1099"

// 查看是被哪个进程占用

tasklist|findstr "20856"

taskkill -f -pid 20856

2.@CrossOrigin(origins="*")

@CrossOrigin中的2个参数:

  • origins: 允许可访问的域列表
  • maxAge:准备响应前的缓存持续的最大时间(以秒为单位)

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。

所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。不明白没关系,举个栗子:

http://www.123.com/index.html 调用 http://www.123.com/server.php (非跨域)

http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

跨域会阻止什么操作?

浏览器是从两个方面去做这个同源策略的,一是针对接口的请求,二是针对Dom的查询

1.阻止接口请求比较好理解,比如用ajax从http://192.168.100.150:8020/实验/jsonp.html页面向http://192.168.100.150:8081/zhxZone/webmana/dict/jsonp发起请求,由于两个url端口不同,所以属于跨域,在console打印台会报No 'Access-Control-Allow-Origin' header is present on the requested resource

值得说的是虽然浏览器禁止用户对请求返回数据的显示和操作,但浏览器确实是去请求了,如果服务器没有做限制的话会返回数据的,在调试模式的network中可以看到返回状态为200,且可看到返回数据

3.一篇通俗易懂的git介绍

git为啥不需要网络就能用git_Army-海军的博客-CSDN博客

SVN更新的原则是要随时更新,随时提交。当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交。

 如果在修改的期间别人也更改了svn的对应文件,那么commit就可能会失败。

4.vscode 下载慢问题

将下载链接中的az764295.vo.msecnd.net更换为vscode.cdn.azure.cn,实际上是切换为了国内镜像

5. mybatis中foreach遍历问题

  <select id="selectOnlineRecordG100ByIds" resultMap="OnlineRecordG100Result" parameterType="string">
<include refid="selectOnlineRecordG100Vo"/>
where vin is not null
and id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</select>

当查询结果是有条件时,会获取符合条件对应得数据

    <delete id="deleteOnlineRecordG100ByIds" parameterType="String">
delete from online_record_g100 where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>

当删除时,只有全都符合,才会删除,否则都不删除

5. sql语句 case when then end

SELECT id,made_status,made_date FROM g100_produce_queue
order by made_status desc ,
case when made_status = 'FM' then made_date end asc,
case when made_status = 'UM' then made_date end asc,
case when made_status = 'WM' then made_date end asc; SELECT id,made_status,made_date FROM g100_produce_queue
order by case when made_status = 'WM' then 0
when made_status = 'UM' then 1
when made_status = 'FM' then 2 end asc,made_date asc; SELECT id,made_status,made_date FROM g100_produce_queue ORDER BY made_status desc , made_date asc;

先根据made_status按照WM、UM、FM的顺序显示,再按照made——date显示,以上三条sql效果一样

第一种鸡肋

第二种可应对made_status字母无法排序的状态

第三种适用于需求是状态首字母恰好排序出来的数据

6. log日志中加号和占位符

// 加号是最终会拼接为一个字符串
void error(String var1); // 占位符是一个字符串,一个throwable异常
void error(String var1, Throwable var2);

示例:

// 下面这个是调用的纯字符串那个方法,其中e.getMessage()可能会报空指针
log.error("XXXX异常:" + e.getMessage()); // 下面这个是调用的字符串和异常那个方法,如果e为null,只会显示字符串
log.error("XXXX异常:{}",e.getMessage());

7. 将java项目由GBK格式编码改为UTF-8格式编码

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.util.Collection; public class tt {
public static void main(String[] args) {
//GBK编码格式源码路径
String srcDirPath = "D:\\Program Files\\JetBrains\\OtherProjects\\design-pattern\\src";
//转为UTF-8编码格式源码路径
String utf8DirPath = "D:\\Program Files\\JetBrains\\OtherProjects\\design-pattern\\src2"; //获取所有java文件
Collection<File> javaGbkFileCol = FileUtils.listFiles(new File(srcDirPath), new String[]{"java"}, true); for (File javaGbkFile : javaGbkFileCol) {
//UTF8格式文件路径
String utf8FilePath = utf8DirPath + javaGbkFile.getAbsolutePath().substring(srcDirPath.length());
//使用GBK读取数据,然后用UTF-8写入数据
try {
FileUtils.writeLines(new File(utf8FilePath), "UTF-8", FileUtils.readLines(javaGbkFile, "GBK"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
// 所需依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>

8. 云服务器上的数据库被勒索比特币

起因:nacos页面报mysql连接被拒绝(Access denied for user 'root'@'xx.xx.xx.xx' (using password: YES)),使用navicat连接mysql也是这个错

第一步:以为mysql版本自动更新了,导致root用户权限不够,所以重新查看当前root权限并赋权

第二步:之后是可以连接了,用了navicat发现数据库里的数据表都没了,且每个数据库都有一个命名为readme的数据库表,内容是告诉我数据被他删了,需要0.003比特币(网上换算了下约966rmb),支付他给恢复(这种人好脏)

第三步:思考,有三个途径破解,第一种是通过gitee上我的公开代码中找到的mysql配置信息,直接就登上去了;第二种是通过刷ip和密码,由于我的mysql端口是3306,密码简单,被刷出来了;第三种认识且知道我ip的人作案(概率不大)

第四步:吸取教训,重置mysql库,改端口,改密码,重新导入数据(因为有备份),将gitee仓库私有(开发完了统一清理下敏感信息再打开吧),恰好用到了腾讯的cos存储,遇到这个事件给了提醒,如果放到公有仓库,被盗刷的风险很大

以下是此次重新安装过程用到的资料:

查看当前mysql的root权限并赋权:https://blog.csdn.net/ichen820/article/details/117130736

docker安装mysql:https://blog.csdn.net/mameng1988/article/details/83782831

nacos_config数据库sql脚本:https://blog.csdn.net/AOSIDIN/article/details/115059725

9. 修改commit备注

git commit --amend

10. 使用了startPage(),但是分页不成功bug

只显示10条数据,总条数是10,但其实数据库中不止10条,查看若依文档

  • 常见坑点2:添加了startPage方法。也没有正常分页。例如下面这段代码
startPage();
Post post = postService.selectPostById(1L);
List<User> list = userService.selectUserList(user);
return getDataTable(list);

原因分析:只对该语句以后的第一个查询(Select)语句得到的数据进行分页。

上面这个代码,应该写成下面这个样子才能正常分页。

Post post = postService.selectPostById(1L);
startPage();
List<User> list = userService.selectUserList(user);
return getDataTable(list);

以为是这个原因,经过多次尝试,原来是select方法中使用了stream流遍历后重新Collections.toList()方法,这个新生产的list不是interface page,所以在getDataTable(list)方法中校验失败,total也就成为了第一页list的长度(10条),所以才会只有10条

        return userMapper.selectUserList(User).stream().peek(user -> {
user.setName("zhangsan");
}).collect(Collectors.toList());

改为以下的写法:

        List<User> list = userMapper.selectUserList(User);
for (User user : list) {
user.setName("zhangsan");
}
return list;

更新:

又遇到这个问题,这次的需求查询大量的数据发送给第三方并更新发送状态,采用分页查询数据防止oom,但是当执行完第一页查询后,更改了前十页的某个字段状态,导致再进行第二页查询时总条数对不上,所以第二页始终查不到数据

总结:

  1. startPage() 后只会对第一个select生效
  2. startPage()后的list不能更改,不能从新new一个list,也不能使用stream流中的Collectors.toList()方法,
  3. startPage()后的list查完第一页后不能更改list的条数,改了要重新查询总条数,否则会有问题

第四周(实际是n+周)的更多相关文章

  1. g第十四周,十五周作业

    1.数组中偶数的和 #include <stdio.h> int main(){ ; ]; ;i<=;i++) { scanf("%d ",&a[i]); ...

  2. 20145330《Java程序设计》第四周学习总结

    20145330<Java程序设计>第四周学习总结 一周两章新知识的自学与理解真的是很考验和锻炼我们,也对前面几章我们的学习进行了检测,遇到忘记和不懂的知识就再复习前面的,如此巩固也让我对 ...

  3. 第四周学习总结-HTML

    2018年8月5日 这是暑假第四周,这一周我在菜鸟教程网学到了许多HTML的知识.HTML编写网页不像C语言.Java语言那必须有主方法.主函数什么的,它基本上都是标签(元素),但是它可以与CSS(层 ...

  4. 20155310 2016-2017-2 《Java程序设计》第四周学习总结

    20155310 2016-2017-2 <Java程序设计>第四周学习总结 一周两章新知识的自学与理解真的是很考验和锻炼我们,也对前面几章我们的学习进行了检测,遇到忘记和不懂的知识就再复 ...

  5. StackOverflow 周报 - 第四周高质量问题的问答(Java、Python)

    这是 Stack Overflow 第三周周报,由于本周周四外出,所以只有三篇内容.两篇 Java.一篇 Python.公众号「渡码」为日更,欢迎关注. DAY1. 枚举对象 == 和 equals ...

  6. 软件产品案例分析----K米app

    第一部分 调研.评测 1.1评测 1.1.1 第一次上手体验 1.1.2 bug 1.1.2.1 bug定义 1.1.2.2 栗子 1.1.2.2.1 A级 1.1.2.2.2 B级 1.1.2.2. ...

  7. K米点歌APP评测

    K米APP评测 产品简介 K米点歌是一款免费的社交K歌手机应用,其手机点歌功能主要在KTV.夜总会,酒吧等K歌场所中使用,当前提供iPhone版本及安卓版本下载使用.——百度百科 评测版本 K米点歌4 ...

  8. gantt甘特图的制作过程

    甘特图主要是用来做项目管理的,可以清楚的看到任务间的逻辑关系,任务与时间关系和任务间并行关系. 在甘特图中,横轴方向表示时间,纵轴方向并列着活动列表.图表内可以用线条.数字.文字代号等来表示计划(实际 ...

  9. 【机器学习】神经网络实现异或(XOR)

    注:在吴恩达老师讲的[机器学习]课程中,最开始介绍神经网络的应用时就介绍了含有一个隐藏层的神经网络可以解决异或问题,而这是单层神经网络(也叫感知机)做不到了,当时就觉得非常神奇,之后就一直打算自己实现 ...

  10. Coursera 机器学习笔记(三)

    主要为第四周.第五周课程内容:神经网络 神经网络模型引入 之前学习的线性回归还是逻辑回归都有个相同缺点就是:特征太多会导致计算量太大.如100个变量,来构建一个非线性模型.即使只采用两两特征组合,都会 ...

随机推荐

  1. Tapdata 实时数据融合平台解决方案(四):技术选型

    作者介绍:TJ,唐建法,Tapdata 钛铂数据CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 常见搭建数据中台的技术产品 数据中台包括: ...

  2. Git 中的回退操作:reset 和 revert

    Git 中回退有 reset 和 revert,这两个的区别就是是否保留更改记录 假设当前的提交情况是:A <- B <- C <- D <- HEAD,如下图: 当前是 D, ...

  3. 使用try_catch_finally处理流中的异常和JDK7流中的异常处理

    在jdk1.7之前使用try_catch_finally处理流中的异常 格式: try{ 可能会出现异常的代码 }catch(异常类变量 变量名){ 异常的处理逻辑 }finally{ 一定会执行的代 ...

  4. list集合的介绍和常用方法

    List接口介绍 java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象成为List集合.在List集合中允许出现重复的元素,所 ...

  5. 面试突击71:GET 和 POST 有什么区别?

    GET 和 POST 是 HTTP 请求中最常用的两种请求方法,在日常开发的 RESTful 接口中,都能看到它们的身影.而它们之间的区别,也是一道常见且经典的面试题,所以我们本文就来详细的聊聊. H ...

  6. electron 应用开发优秀实践

    vivo 互联网前端团队-Yang Kun 一.背景 在团队中,我们因业务发展,需要用到桌面端技术,如离线可用.调用桌面系统能力.什么是桌面端开发?一句话概括就是:以 Windows .macOS 和 ...

  7. 记一次 ClickHouse 性能测试

    前言 在工作场景中,我们会采集工厂设备数据用于智能控制,数据的存储用了 InfluxDB,随着数据规模越来越大,InfluxDB 的性能越来越差,故考虑引入 ClickHouse 分担 InfluxD ...

  8. Vue组件的继承用法

    Vue组件的继承用法 点击打开视频讲解 vue组件的继承适用于UI几乎一样,只是数据不一样的情况下,但是这种情况通过统一封装组件也是能实现的,小功能建议用封装,大功能建议用组件继承,因为大功能在结合搜 ...

  9. centos7.6内核之cfs_bandwidth下的distribute_cfs_runtime hard lockup

    接到业务兄弟报障,出现多例crash,堆栈大多数如下: KERNEL: /usr/lib/debug/lib/modules/3.10.0-957.27.2.el7.x86_64/vmlinuxDUM ...

  10. redis-zset命令

    一.BZPOPMAX key [key ...] timeout BZPOPMAX 是有序集合命令 ZPOPMAX带有阻塞功能的版本. 在参数中的所有有序集合均为空的情况下,阻塞连接.参数中包含多个有 ...