Java实习(1)

1.找到项目的log配置文件,一般式logback.xml

2.查看日志的保存路径

3.使用xshell或者在Linux系统下找到日志的保存路径

4.使用tail -nf [日志文件名]进行日志的查看,这里的n代表

行数,可以是任意一个数。

常用命令:

1.查看日志:tail -nf [日志文件名]

2.查看进程:ps -ef|grep [项目名称]

3.查看某个项目的堆情况:jmap -heap [进程id]

4.查看堆的占用情况:jamp -histo [进程id] | head -10 被哪些类占用了

5.查看栈的情况,是否死锁:jstack -m [进程id] | head -10

6.查看GC的情况:jstat -gcutil [进程id] n (n代表开始循环获取gc的次数)

7.查看某个进程启动的参数:jinfo -flag [进程id]

8.杀死进程:kill -9 [进程id]

六.bug的原因


在项目中找不到bug的原因时,找找看,继承接口的类中中有没有在方法的头部加上@Override ,这些低级错误会导致项目的进程中断

七.String类的方法:


7.1 subString(b,e); b从0开始,包含0,e代表结尾,不包含这个角标

7.2 是否包含某个字符contains(char a)

十一.500报错


500报错很有可能是后台代码错误!!

十一.代码规范习惯


代码规范习惯:

11.1 service层方法 读使用query,get,find开头

11.2 service层方法 写使用update,delete开头、

11.3 任何代码,具体说是Controller,Service层等类中勤于说明类或者方法的作用,参数是什么等等,养成好习惯。

十二.字符"|"的字符串spilit方法


包含字符"|"的字符串不要使用spilit方法,会出错。比如

String[] s=“20|20”.spilit(“|”);

for(int i=0;i<s.length;i++){

System.out.println(s[i]);

}

//输出结果:

2

0

|

2

0

到这里才结束,中间的这两个空格也是打印出来的。可想,这个符号不好用,最 好不要用。

解决方案:

1.修改符号

2.替换符号

  • 两个方法的区别在于如果一个系统在测试时,首先插入到数据库时使用到这个符号,那么将导致所有插入的数据在数据库中将全部包含这个符号,在客户端查看数据时,需要使用spilit方法分离该字符串,就会出错!!这时候可以用最笨的方法,就是一个一个数据去找,然后修改这个符号,这种方法可行度不好。

  • 替换符号的意思就是在客户端需要数据库的数据时,在后端程序中做出判断,如果字符串包含"|“,先用其他符号,例如”,“,” "等符号替换它,再做字符串分离,也就是使用spilit方法。

十二.SVN:


SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

十三.前后端使用HashMap和List


注意使用HashMap和List的时候,在遇到循环的话尽量把HashMap放在循环里面去new,不然会遇到很大的问题。

比如:

List<HashMap<String,Object>> list=new ArrayList<HashMap<String,Object>>();

HashMap<String,Object> map=new HashMap<String,Object>();

for(int i=0;i<10;i++){

map.put(“a”,i);

list.add(map);

}

List<HashMap<String,Object>> list=new ArrayList<HashMap<String,Object>>();

for(int i=0;i<11;i++){

HashMap<String,Object> map=new HashMap<String,Object>();

map.put(“a”,i);

list.add(map);

}

这两段代码的区别在于map的为止不同,两段代码的输出结果分别是:

1.list:[{a:10},{a:10}…{a:10},{a:10}]

2.list: [{a:0},{a:1}…{a:8},{a:9},{a:10}]

区别很明显,这种错误在前后端传输数据时尤为重要,这段代码是我亲自使用前后端工具调试的。。

十四.前端调试工具


前端调试工具的熟练使用,有助于项目的跟近。

chorme:F12打开调试工具

一般后端开发人员需要注意就是Network,这里可以看到前后端交互的数据,交互方式(POST/GET),以及

请求的url,很方便

十五.项目增改操作


一个项目脱离不了增删改查,但是呢,在这次实习项目中,我了解到在开发中很多开发人员将增和改两个功能放在业务处理service的一个方法中,具体实现是这样的,增和改的区别在于增操作建立在空白场景下,前端只需要传输数据即可,空白场景的意思是数据库还没有这条数据;而改操作建立在数据库已经存在一条即将要被操作的数据条,前端传输的数据中还包括该条数据的id,或者主键,这样以来最大的区别在于是否拥有id,而其他传输数据一致。所以,我的处理方式是加一条判断语句:

…其他数据…

if(paramMap.get(“id”)!=null){

update(…); //更改数据

else{

add(…); //增加数据

}

如果遇到多个相关联的数据表之间的数据增和改操作,比如a表的主键id是b卷的一个字段,如下:

a表:

id|content

-|:-😐:

1|“好”

b表:

id|aId|content

-|:-😐:

1|1|“哈哈哈哈”

2|1|“黑乎乎”

3|1|“嗨嗨嗨”

诸如这样的这张表相互关联,实现增和改操作,我的实现如下(先删后增):

//if语句主要用于修改操作,如果有id则是修改,否则为增加

if(paramMap.get(“id”)!=null){

a.delete(id); //a表删除数据条

b.delete(id); //b表删除数据条

}

…其他数据…

int id=a.add(数据); //a表增加数据条

b.add(数据,id); //b表增加数据

十六.调试debug快捷键


: Eclipse逐步调试debug快捷键:F6,一步到位:F8

: Ideal逐步调试debug快捷键:F8

: eclipse查看表达式的结果:右击选择watch

十七.@RequestBody


当前端发送数据是一个数组时,如下paramMap,一定记着加上@RequestBody!!!!不然无法接受数据

@RequestMapping(“add”)

public Result add(@RequestBody Map<String,Object> paramMap){

…code…

}

十八.mapper文件


mapper文件的某些方法比如insert,返回数据类型如果是引用类型,

记着加上resultType或者resultMap

十九.@RestController注解


@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,

返回json数据不需要在方法前面加@ResponseBody注解了,但使用

@RestController这个注解,就不能返回jsp,html页面,视图解析器无

法解析jsp,html页面

二十.数据库的模糊查询


0,-,[]三个符号的使用,参考博文点击查看

以及下面这种在mapper文件中重要的模糊查询方式!!!

1.字符串模糊查询

SELECT * FROM tableName

AND name like CONCAT(CONCAT(‘%’, #{name}), ‘%’)

2.时间模糊查询

DATE_FORMAT(Time,’%Y-%m-%d’)的作用在于将时间生成String再做处理

SELECT * FROM tableName

AND DATE_FORMAT(Time,‘%Y-%m-%d’)=#{time} //这里的#{time}是字符串,如果是Date类型,还需要转换

//DATE_FORMAT(#{time},‘%Y-%m-%d’)

二十一.mapper文件@Param的使用


一般在mapper接口的方法中传入参数时,比如int add(User user);如果提交项目之后出现异常:There is no getter for property user in "xxx.User",那么问题原因在于参数的传递需要加上@Param,如:int add(@Param(value="user") User user),切记这点

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


二十一.mapper文件@Param的使用


一般在mapper接口的方法中传入参数时,比如int add(User user);如果提交项目之后出现异常:There is no getter for property user in "xxx.User",那么问题原因在于参数的传递需要加上@Param,如:int add(@Param(value="user") User user),切记这点

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料

[外链图片转存中…(img-VDEV9WlR-1714358079716)]
[外链图片转存中…(img-JwWJ2K9C-1714358079717)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值