Java实习,2024年最新nginx面试题腾讯

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

五.线上测试


使用xshell进行线上测试,在测试环境下测试。(线上测试意思就是

项目发布到公司的服务器上后的调试方式)

步骤如下:

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类型,还需要转换

最后

ActiveMQ消息中间件面试专题

  • 什么是ActiveMQ?
  • ActiveMQ服务器宕机怎么办?
  • 丢消息怎么办?
  • 持久化消息非常慢怎么办?
  • 消息的不均匀消费怎么办?
  • 死信队列怎么办?
  • ActiveMQ中的消息重发时间间隔和重发次数吗?

ActiveMQ消息中间件面试专题解析拓展:

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


redis面试专题及答案

  • 支持一致性哈希的客户端有哪些?
  • Redis与其他key-value存储有什么不同?
  • Redis的内存占用情况怎么样?
  • 都有哪些办法可以降低Redis的内存使用情况呢?
  • 查看Redis使用情况及状态信息用什么命令?
  • Redis的内存用完了会发生什么?
  • Redis是单线程的,如何提高多核CPU的利用率?

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


Spring面试专题及答案

  • 谈谈你对 Spring 的理解
  • Spring 有哪些优点?
  • Spring 中的设计模式
  • 怎样开启注解装配以及常用注解
  • 简单介绍下 Spring bean 的生命周期

Spring面试答案解析拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


高并发多线程面试专题

  • 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?
  • Java 中新的 Lock 接口相对于同步代码块(synchronized block)有什么优势?如果让你实现一个高性能缓存,支持并发读取和单一写入,你如何保证数据完整性。
  • Java 中 wait 和 sleep 方法有什么区别?
  • 如何在 Java 中实现一个阻塞队列?
  • 如何在 Java 中编写代码解决生产者消费者问题?
  • 写一段死锁代码。你在 Java 中如何解决死锁?

高并发多线程面试解析与拓展

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM


jvm面试专题与解析

  • JVM 由哪些部分组成?
  • JVM 内存划分?
  • Java 的内存模型?
  • 引用的分类?
  • GC什么时候开始?

JVM面试专题解析与拓展!

BAT面试文档:ActiveMQ+redis+Spring+高并发多线程+JVM

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 如何在 Java 中实现一个阻塞队列?
  • 如何在 Java 中编写代码解决生产者消费者问题?
  • 写一段死锁代码。你在 Java 中如何解决死锁?

高并发多线程面试解析与拓展

[外链图片转存中…(img-HieRqP0o-1713621742061)]


jvm面试专题与解析

  • JVM 由哪些部分组成?
  • JVM 内存划分?
  • Java 的内存模型?
  • 引用的分类?
  • GC什么时候开始?

JVM面试专题解析与拓展!

[外链图片转存中…(img-TfWVujsr-1713621742061)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-keKbK8cn-1713621742062)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值