经历了昨天的笔试加今天的面试,我激动的内心久久不能平静。
下面总结一下笔试与面试中遇到的问题吧!
笔试题相对emmmmm~~~阅读理解题?找规律题?数学题?
不扯别的啦,说说java题吧,感觉设计到的范围有UML、数据结构、java基础、javaweb、一些专业名词、编程题有二叉树,排序问题,字符串截取
今天主要整理一下面试过程中遇到的问题以及答案,几乎都是围绕着简历上写的专业技能问的
面试官比较有亲和力,整个过程没有那么紧张,进行的还算顺利
步入正题……
问:什么是关系型数据库?
答:关系型数据库是依赖关系模型创建的数据库,关系模型就是“一对一”,“一对多”,“多对多”等关系模式,关系模式就是指二维表格模式,关系模式中有元祖和属性类
PS:非关系数据库:基于非关系模型的数据库,非关系模型有列模型,键值对模型,文档模型
问:数据库的范式分哪些?
答:第一范式:强调属性的原子性,即属性列中每一个字段不可再分。关系型数据库默认满足第一范式
第二范式:不存在部分依赖,即每一个行的数据只与一列有关
第三范式:不存在传递依赖,即每一列都直接依赖于主属性
BC范式:排除了任何属性对码的传递依赖和部分依赖,R属于3NF,不一定属于BCNF;属于BCNF一定属于3NF
问:MySQL的配置文件是什么?
答:my.ini,在这里可以对数据库进行一些相关配置
位置如下:
1 # CLIENT SECTION2 # ----------------------------------------------------------------------3 #4 # The following options will be read by MySQL client applications.5 # Note that only client applications shipped by MySQL are guaranteed6 # to read this section. If you want your own MySQL client program to7 # honor these values, you need to specify it as an option during the8 # MySQL client library initialization.9 #
10 [client]
11
12 port=3306
13
14 [mysql]
15
16 default-character-set=gb2312
port是MySQL的端口号,默认是3306
default-character-set参数是客户端默认的字符集,如果你希望它支持中文,可以设置成gbk或者utf8
这里还有一个password参数,在这里设置了password参数的值就可以在登陆时不用输入密码直接进入
问:tomcat的配置文件
答:当时就答出来俩个,哎~人家让再说一个都想不起来了,结果人家一说我又想起来了
问:如果前端页面刷新很慢,需要30秒才能显示出数据,这里有3条sql语句,如果使用一些框架,可能看不到sql语句,那么怎么确定是哪条语句造成这种结果的?说一下你的思路
答:一开始没太听懂问的是什么意思,我讲了sql语句的优化,比如尽量不要用*,面试官打断了我又重新给我描述了一遍题目,我沉思了一会,说我会从数据库表设计入手(感觉自己这个答得很不好,下来后请教了下别人)PS:大家有什么想法可以评论,共同成长一下
以下是大佬为我解答的:
可以在这3条sql执行前后写日志,然后输出时间差,判断是哪条sql比较慢。
问:谈谈MVC
答:M是module,指数据模型;V是view,指视图层;C是controller,指控制器
补充:MVC要实现的目标是将软件用户界面与业务逻辑分离,使代码可重用性,可扩展性,维护性,灵活性更强。
问:看你学过操作系统,讲讲操作系统都学了什么?
答:操作系统是大一的时候学的,(虽然前段时间准备了软考,但真的都忘得差不多了)想到进程与线程,然后我就把话题扯到java中的多线程了
面试官接着问:信号灯知道吧?
答:昂,signal和wait,然后我说,我理解的信号灯就相当于线程的通信,wait方法使当前线程等待,其他线程去执行,等其他线程执行完了,执行notify方法给一个信息,说我执行完了,那个线程再接着执行
下来之后想到了是PV操作,具体的记不太清了
PS:操作系统大致分为进程管理,存储管理,设备管理,文件管理,作业管理
问:final和finally的区别?
答:final是java中的关键字,用过修饰类,方法,属性;分别代表类不能被继承,方法不能被重写,属性不能被修改,如果属性是引用类型,那么是引用不能改,引用里的值可以改变。finally是try-catch-finally中的关键字,在finally中的代码始终要执行,(补一句:通常用来关闭连接,释放资源)
接着问:你说finally始终要执行,那你说如果try块中有return,finally是在return前执行还是return后执行?
答:return前
问:说一下JVM内存结构
答:JVM包括栈,堆,方法区(方法区里含有常量池),程序计数器,本地方法区
栈是用来存放基本数据类型和引用的
堆是用来存放创建的实例对象的
方法区是存储元数据信息的,方法区里有常量池
- 在jdk1.6及以前,常量池在方法区里
- 在jdk1.7及以后,常量池从方法区中脱离,在堆内存中开辟了一段空间存放常量池
- 在jdk1.8以后,取消了方法区,取而代之的是元数据区,在我们自己电脑的物理内存中
程序计数器是用来存放程序运行到哪一行
本地方法区是为本地方法服务的
问:你谈到jdk版本,说说jdk1.8的新特性
答:接口中多了默认方法和静态方法,嗯~~~
面试官:再说一个
我:(完蛋,一时间想不起来)不好意思,一时间有点着急,想不起来了
PS:java8的一些新特性:Lambda表达式,函数式接口,重复注解,扩展注解的使用范围,方法引用,更好的类型推断
问:类的加载顺序
答:如果只有一个类的时候,先加载类的静态代码块(包括静态初始化块,静态属性,静态方法),然后非静态初始化块,非静态属性,最后构造9方法
如果有父子类是,执行加载顺序为:
- 父类静态代码块
- 子类静态代码块
- 父类非静态属性
- 父类构造方法
- 子类非静态属性
- 子类构造方法
问:什么是反射?
答:反射就是在运行时动态的获取类的信息,并创建一个Class对象
(啊,当时应该多BB几句的,这块掌握的还可以的,但是我没有说更多的知识点)
附上之前的一篇帖子:你真的了解反射吗?_渣渣的成长之路-CSDN博客
问:maven是干什么的?
答:maven是项目搭建工具,我们就是学习了在idea里创建maven项目,我知道的好像可以通过maven导出war包,最后部署到服务器中。(我太菜了,对于前沿知识知之甚少)
面试官:还有吗?
我:目前想不到了(大写的尴尬),您能给我讲讲吗?
面试官:maven中groupId和artifactId分别代表什么?
答:groupId代表包名,artifactId代表项目名
面试官:maven的使用需要在本地建立一个本地仓库,用于存放maven从网络下载的jar包;所有的maven项目都有一个pom文件,导入的jar包都在这里引入,在dependency下导入依赖。
部署项目有三种方式:
- 将项目打包成war包,放在webapps下
- 在conf/server.xml改配置文件(不推荐使用,容易把整个tomcat的配置文件改乱)在host标签里添加一行代码
- 在conf/Catalina/localhost创建一个xml文件,在文件中写<Context docBase="项目地址">,这种方式的虚拟路径是xml文件的名称,并且属于热部署
问:JSON与XML有啥区别?
答:JSON是key-value的格式,XML是传统的配置文集(又嘎在这了),比如说在javaweb项目地址栏……
(没等我说完,面试官打断了,感觉不妙)
面试官:XML也是key-value的形式啊
我:也是哦~想了一会,嗯,那我不太清楚了,我下去看看
PS:XML用于数据存储与传输,JSON是轻量级的数据交换格式
XML格式统一,符合标准,数据共享比较方便;JSON数据格式简单,易于读写,易于解析
JSON没有XML的扩展性好
在Ajax的通常会使用JSON代替XML
JSON的速度要快于XML
遇到的问题大概也就这么多了,分享给大家这次面经,提到的知识点会的话一定要多说,让面试官有一种想要打断你(我了解你的掌握程度了)不用说了的感觉。还有就是面试前多刷刷面试题,面试后多做一下总结!
金九银十
祝大家好运!!!