发表于: 2020-06-10 18:10:40
2 1536
今日作为:1.根据阿里巴巴Java开发文档修改了代码主要是如下几个点
命名不以下划线_ 和 $开始和结束
_name x $name x
类名使用UpperCamelCse风格,简答来说就是首字母大写后面的单次字母大写
UserInsert √ TestMysqlDelete √
但是有例外 DO / BO / DTO / VO / AO / PO / UID等
UserDo x UserDO √
方法名、参数名、成员变量、局部变量统一使用LowerCamelCase,简单来说就是首字母小写 后面的单词首字母大写
localValue √
常量名全部大写,单次间用下划线隔开,力求语义完整,能自我注释(猜的)
MAX_STOCK_COUNT √
这些是最常用的。。。还有一些现在我还用的不多比如注释什么的到时候再去翻 OVO
2.在改代码命名的时候发现XML文件都有一个一样的开头。。。于是去了解了一些XML的知识
配置文件都是以这个开头的很好奇,所以去查了一下XML
<?xml version="1.0" encoding="UTF-8" ?>
根据资料这是XML 1.0版本 用UTF-8编码,然后有很好奇这东西为什么Spring、Mybatis都是用这个玩意配置的继续深入的了解了一下
XML是W3C组织(一个很NB的组织。。。)的推荐语言
XML是自我注释的语言?(自己理解的,他的标签一眼就能看明白是啥意思。。。)
XML主要用来传输数据和配置(好像我看任务里面没说要学呀,百度了一下说现在都用JSON传输?配置的话说是现在都用注释替代? 这里请教一下师兄为啥Spring、Mybatis都还是用的XML。。。)
还一些记不住了。。。明天再看看
3.根据昨天日报问师兄的问题又动手做了一下实验
多线程单次插入用时40分钟40W左右(快了不少)。。。。。。 多线程批量插入1分钟不到233333
多线程单次插入遇不到那个4M大小的问题,但是多线程又遇见了,尝试了一下不修改Mysql完成插入
我用了33个个线程,一个线程批量3W 一共99W(差1W不要在意 OVO)一分钟搞定
但是CPU占用快100了。。。吓死个人
我感觉还能比1分钟更快,怀疑是连接池的数据库连接没有那么多(33条),由于我没配置这个属性所以改了一下配置又试了一下感觉没有快好多呀。。。那应该是在做实验的时候没用完数据库连接
这里请教一下师兄默认的Mybatis连接池里面有多少条连接,工作中需要显示的配置么?百度查不到
还有就是还有比这更快的方法么?!!!!!
多线程单次插入:
public class TestThreadInsertOneByOne {
@Test
public static void main(String[] args) {
insertIntoDataBase insertIntoDataBase = new insertIntoDataBase();
// 5个线程单次插入 一个线程20W数据
new Thread(insertIntoDataBase).start();
new Thread(insertIntoDataBase).start();
new Thread(insertIntoDataBase).start();
new Thread(insertIntoDataBase).start();
new Thread(insertIntoDataBase).start();
}
}
class insertIntoDataBase implements Runnable{
public void run(){
SqlSession sqlSession = MybatisUtil.getSeesion();
Student student = new Student();
student.setNameInMysql("无敌");
student.setSchoolInMysql("矮子");
student.setOnlineOrUnInMysql("天上");
student.setNumberInMysql(788);
student.setCityInMysql("跑路");
Integer rows = 0;
// 一个线程20W数据
for (int i = 0; i <= 200000;i++) {
rows = rows +sqlSession.insert("com.jnshu.dao.StudentMapper.insert", student);
sqlSession.commit();
}
/**
* 少用if-else方式
*/
if (rows > 0) System.out.println("添加数据" + rows + "条");
if (rows == 0) System.out.println("添加数据失败");
sqlSession.close();
try{
Thread.sleep(1);
}catch (InterruptedException e){
e.printStackTrace();
}
}
多线程批量插入:
public class ThreadInsertAllTest {
public static void main(String[] args) {
insertAll all = new insertAll();
//33个线程 一个3W数据 一共99W 差1W。。。
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
new Thread(all).start();
}
}
class insertAll implements Runnable{
public void run(){
SqlSession sqlSession = MybatisUtil.getSeesion();
List<Student> user = new ArrayList<Student>();
Integer rows = 0;
for (int i = 0; i <= 30000; i++) {
Student student = new Student();
student.setNameInMysql("无敌");
student.setSchoolInMysql("矮子");
student.setOnlineOrUnInMysql("天上");
student.setNumberInMysql(788);
student.setCityInMysql("跑路");
user.add(student);
}
rows = sqlSession.insert("com.jnshu.dao.StudentMapper.insertAll", user);
System.out.println(rows);
sqlSession.commit();
sqlSession.close();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
10
20
1分钟.......................100W条
然后我又想起来个问题。。。如果我把List集合做成公共资源是不是占用的内存会少一些。。。
然后我发现并没什么卵用,占用的内存基本一致!!!!
请教一下师兄这是啥情况?
代码:
我用构造方法在主函数new的时候对List集合进行初始化,是我思路不对么?
为啥占用的内存还是一样的?
讲道理不应该啊,这次只需要在new的时候初始化一次List集合,后面33个线程直接用就应该没问题了啊!!!
class testMemory implements Runnable{
//设置成公共资源
private List<Student> user = new ArrayList<Student>();
public testMemory(){
for (int i = 0 ; i <= 30000 ; i++){
Student student = new Student();
student.setNameInMysql("无敌");
student.setSchoolInMysql("矮子");
student.setOnlineOrUnInMysql("天上");
student.setNumberInMysql(788);
student.setCityInMysql("跑路");
user.add(student);
}
}
public void run(){
SqlSession sqlSession = MybatisUtil.getSeesion();
sqlSession.insert("com.jnshu.dao.StudentMapper.insertAll", user);
sqlSession.commit();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
sqlSession.close();
}
}
}
顺带一提之前听别的师兄说多线程基本不用学。。。所以下午还看书学了3个多小时的多线程
临时抱佛脚2333
还有就是任务2师兄能给个头绪么,我是两眼一抹黑的看任务里面的小任务,不知道应该从哪里开始下手!
还一个就是师兄能发我一个你这边Java项目目录的截图么,百度出来的标准目录结构千奇百怪。。。。
评论