1 Star 0 Fork 31

阿明 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
最新2021年常见BUG问题面试题及答案汇总版.md 12.92 KB
一键复制 编辑 原始数据 按行查看 历史

最新2021年常见BUG问题面试题及答案汇总版

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

常见 BUG 问题

题1:前端传输参数保存数据到 MySQL 中乱码问题?

数据库连接驱动配置参数url添加UTF-8编码:

url:jdbc:mysql://127.0.0.1:3306/JavaJingXuan?useUnicode=true&characterEncoding=UTF-8

题2:form 表单嵌套如何解决表单提交问题?

在html中form表单不可以嵌套使用,例如:

<form name="form1">
    <form name="form2">
    ......
    </form>
    .....
</form>

这样不符合规范,如果需要用到两个表单的情况下,可以考虑合并两个表单,动态改变表单提交位置。

form表单中action为空,在js代码中改变action的值,也就是提交路径。

<form id="formId" action="" method="post">
   .....
   <button id="button1" type="submit"></button>
   <button id="button2" type="submit"></button>
</form>
<script>
$(document).ready(function(){
	$("#button1").click(function(){
		$("#formId").attr("action","url地址1"); 
		$("form").submit();
	});
	$("#button2").click(function(){
		
		$("#formId").attr("action","url地址2"); 
		$("form").submit();
	});
}
</script>

注意提交按钮button的类型是submit不是button。

题3:MySQL 中日期函数时间不准确?

这是由于时区问题导致,首选设置MySQL时区为中国。

需要注意的是MySQL重启后就会恢复默认:

set time_zone='+8:00';

url连接MySQL数据库的时区要和MySQL服务的时区一致,配置参数如下:

characterEncoding=utf-8&serverTimezone=UTC

题4:如何解决 Redis key/value 中 \xac\xed\x00\x05t\x00 字符串?

Spring Boot中使用spring-data-redis和jedis操作redis时发现存储在redis中的key不是程序中设置的string值,出现许多类似\xac\xed\x00\x05t\x00这种字符串。

原因:spring-data-redis的RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化。

public void afterPropertiesSet() {

	super.afterPropertiesSet();

	boolean defaultUsed = false;

	if (defaultSerializer == null) {

		defaultSerializer = new JdkSerializationRedisSerializer(
				classLoader != null ? classLoader : this.getClass().getClassLoader());
	}

	if (enableDefaultSerializer) {

		if (keySerializer == null) {
			keySerializer = defaultSerializer;
			defaultUsed = true;
		}
		if (valueSerializer == null) {
			valueSerializer = defaultSerializer;
			defaultUsed = true;
		}
		if (hashKeySerializer == null) {
			hashKeySerializer = defaultSerializer;
			defaultUsed = true;
		}
		if (hashValueSerializer == null) {
			hashValueSerializer = defaultSerializer;
			defaultUsed = true;
		}
	}

	if (enableDefaultSerializer && defaultUsed) {
		Assert.notNull(defaultSerializer, "default serializer null and not all serializers initialized");
	}

	if (scriptExecutor == null) {
		this.scriptExecutor = new DefaultScriptExecutor<K>(this);
	}

	initialized = true;
}

解决办法: StringRedisSerializer是RedisSerializer的实现类,把KeySerializer和ValueSerializer设置为StringRedisSerializer。将redisTemplate默认改为StringRedisSerializer序列化方式。

public class RedisServiceImpl {

    private static final Logger log = LoggerFactory.getLogger(RedisDao.class);

    private RedisTemplate redisTemplate;

    private RedisTemplate<String, Object> redisTemplateMap;

    @Autowired(required = false)
    public void setRedisTemplate(RedisTemplate redisTemplate) {
        RedisSerializer stringSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setValueSerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);
        redisTemplate.setHashValueSerializer(stringSerializer);
        this.redisTemplate = redisTemplate;
    }
}

题5:JSP 获取 ModelAndView 传参数据问题?

Idea开发工具自动创建的web.xml约束太低,导致无法正常获取数据,需要把web.xml约束的信息调整一下,参考如下:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

题6:如何解决 Linux 显示中文乱码问题?

在Linux中通过locale来设置程序运行的不同语言环境,locale由 ANSI C提供支持。locale的命名规则为_.,如zh_CN.GBK,zh代表中文,CN代表大陆地区,GBK表示字符集。

修改 /etc/locale.conf文件的内容

LANG="zh_CN.UTF-8"

执行命令,使修改文件立刻生效

source /etc/locale.conf

题7:应用服务 8080 端口被意外占用如何解决?

1)按键盘WIN+R键,打开后在运行框中输入“CMD”命令,点击确定。

2)在CMD窗口,输入“netstat -ano”命令,按回车键,即可查看所有的端口占用情况。

3)找到本地地址一览中类似“0.0.0.0:8080”信息,通过此列查看8080端口对应的程序PID。

4)打开任务管理器,详细信息找到对应的应用PID(若不存在通过设置可以调出来),右键结束任务即可。

题8:Linux 中如何解决 too many open files 异常问题?

产生原因

Linux系统中too many open files异常是比较常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等,所以有时又称为句柄(handle),这个错误通常可以叫做句柄数超出系统限制。例如如下错误信息:

Caused by: java.io.FileNotFoundException: /home/tomcat/jingxuan-tomcat/webapps/jingXuanAPI/WEB-INF/lib/activemq-client-5.9.1.jar (Too many open files)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:225)
        at java.util.zip.ZipFile.<init>(ZipFile.java:155)

原因分析

进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数,通过命令ulimit -a可以查看当前系统设置的最大句柄数是多少。

[root@mrwang ~]# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14429
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14429
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

其中“open files”参数表示系统目前允许单个进程打开的最大句柄数,这里是65535,该服务器已经调整过了,默认是1024。

使用命令“lsof -p 进程id”可以查看单个进程所有打开的文件详情,使用命令“lsof -p 进程id | wc -l”可以统计进程打开了多少文件。

如果文件数过多使用“lsof -p 进程id”命令无法完全查看的话,可以使用“lsof -p 进程id > openfiles.log”将执行结果内容输出到日志文件中查看。

[root@mrwang ~]# lsof -p 8288
COMMAND  PID USER   FD   TYPE             DEVICE  SIZE/OFF      NODE NAME
java    8288 root  cwd    DIR              253,1       160   1717293 /home/tomcat/apache-tomcat-server
java    8288 root  rtd    DIR              253,1       244       128 /
java    8288 root  txt    REG              253,1      8712   1507063 /home/jdk/jdk1.8.0_291/bin/java
java    8288 root  mem    REG              253,1    168368  33739024 /usr/lib64/libresolv-2.28.so
java    8288 root  mem    REG              253,1     41304  33739018 /usr/lib64/libnss_dns-2.28.so
java    8288 root  mem    REG              253,1   3559360  67178238 /home/jdk/jdk1.8.0_291/jre/lib/resources.jar
java    8288 root  mem    REG              253,1    104256  34147343 /usr/lib64/libgcc_s-8-20190507.so.1
java    8288 root  mem    REG              253,1    283368  84407379 /home/jdk/jdk1.8.0_291/jre/lib/amd64/libsunec.so
java    8288 root  mem    REG              253,1    113008  84407389 /home/jdk/jdk1.8.0_291/jre/lib/amd64/libnet.so
java    8288 root  mem    REG              253,1     93872  84407404 /home/jdk/jdk1.8.0_291/jre/lib/amd64/libnio.so
...

解决方法

方式一:命令方式

ulimit -n 2048

命令的意思是把当前用户的最大允许打开文件数量设置为2048,注意这种设置方法在重启后会还原为默认值。

ulimit -n命令非root用户只能设置到4096,如果想要设置到更大需要sudo权限或者root用户。

方式二:修改系统配置文件

[root@mrwang ~]# vim /etc/security/limits.conf  

在文件末尾处增加如下内容:

* soft nofile 4096  
* hard nofile 4096  

或者

 * - nofile 8192

*表示所有用户,可根据需要设置某一用户,例如:

jingxuan soft nofile 8192  
jingxuan hard nofile 8192  

注意的是“nofile”项有两个可能的限制措施,分别是hard和soft。要使修改过得最大打开文件数生效,必须对这两种限制进行设定。 如果使用”-“字符设定, 则hard和soft设定会同时被设定。

题9:JSP 模版引擎如何解析 ${} 表达式?

目前开发中已经很少使用JSP模版引擎,JSP虽然是一款功能比较强大的模板引擎,并被广大开发者熟悉,但它前后端耦合比较高。

其次是JSP页面的效率没有HTML高,因为JSP是同步加载。而且JSP需要Tomcat应用服务器部署,但不支持Nginx等,已经快被时代所淘汰。

JSP页面中使用${表达式}展示数据,但是页面上并没有显示出对应数据,而是把${表达式}当作纯文本显示。

原因分析:这是由于jsp模版引擎默认会无视EL表达式,需要手动设置igNoreEL为false。

<%@ page isELIgnored="false" %>

题10:Maven 打包提示 “程序包com.sun.deploy.net不存在” 的问题?

将com.sun.deploy.net.URLEncoder换成java.net.URLEncoder,就可以解决Maven 打包提示 “程序包com.sun.deploy.net不存在” 的问题。

题11:tomcat-可以多个同时启动吗如何实现

题12:sql-语句执行时间过长如何优化

题13:spring-cloud-config-使用-ssh-连接-github-报错

题14:java-项目第一次登录页面加载很慢问题

题15:mysql-中-如何解决-incorrect-string-value:-'\xe5\xb0'-异常

题16:idea-中-maven-项目无法自动识别-pom.xml

题17:dubbo-中抛出-rpcexception-no-provider-available-for-remote-service-异常如何处理

题18:thymeleaf-模板引擎在-linux-解析报-500-问题

题19:tomcat-启动-spring-项目如何实现注解方式配置定时任务

题20:linux-运行-sql-语句文件报错

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/AminDev/ebooks.git
git@gitee.com:AminDev/ebooks.git
AminDev
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891