面试JAVA常被问到的问题(持续更新中)

您所在的位置:网站首页 复试会问到的问题 面试JAVA常被问到的问题(持续更新中)

面试JAVA常被问到的问题(持续更新中)

2024-07-17 20:38| 来源: 网络整理| 查看: 265

引言

有的面试会被问到有没有写博客,这时候我尴尬,不知道怎么回答,所以这篇文章仅仅是把我面试JAVA的遇到的问题记录下来而已,也算是我写博客迈出的第一步,起码,以后被问到:有没有写博客?我可以回答,我写过。 (最主要的是以后换工作我不用频繁百度常见面试题了。。。。)

ps

1,别把我太当回事,我是个LJ; 2,说得不对的地方请多多包涵,想看更详细的请百度官方文档和其他大佬的文章; 3,如果有被问到了,我这上面没有的话,也可以提出来,我去学习,补上去,谢谢各位大哥。

正文 1,跟我讲讲SpringMVC的执行流程?

浏览器提交http请求–>提交到DispatcherServlet–>根据配置文件找到请求对应的HandlerMapping–>找到对应的Controller–>Controller执行Service层业务代码–>返回结果封装到ModelAndView–>再次根据DispatcherServlet找到对应的视图解释器–>数据封装到Model中–>返回给JSP–>http请求返回给浏览器

2,跟我讲讲Spring的IOC和AOP?

IOC简称:控制反转,又被叫做依赖注入(DI),其作用是把创建对象交由Spring工厂完成,避免了程序员创建对象的麻烦。

其实现大致分为以下四个步骤: 1,加载Spring容器BeanFactory创建Resource对象。

加载Spring的容器BeanFactory在其构造方法创建实现了Resource接口的对象的实例,Resource对象创建成功后会调用getConfiguration()方法获取到Spring配置文件的位置。 Resource的实现分为三种FileResource,UrlResource,ClassPathResource,分别对应获取文件,网络资源,项目路径下资源。 Resource创建如果有父类就使用父类的容器,如果没有就创建新的容器。

2,提取验证模式

BeanFactory会调用getInputStream()方法获取到配置文件的输入流,在加载前,会以DTD或XSD,通过头标签验证配置文件的正确性和完整性。

3,提取内容

把配置文件转换成一个document对象,这个document对象把类的内容转换成Spring的特殊结构BeanDefinition,BeanDefinition中包涵了Bean的所有信息,例如:是否懒加载,是否单例,是否抽象类,是否私有类等等。

4,注册

把所有的Bean装到ConcurrentHashMap中,以BeanName作为key,BeanDefinition作为Value。其中,如果BeanName重复,并且Spring不允许重复的话,那么就会报错,否则就会覆盖。

AOP简称:面向切面编程,其主要应用在业务贯穿了整个系统的时候,例如事务的控制,权限,安全,日志。 它的核心归纳为:切面,切点,目标对象,连接点,增强,引入,植入。 通知的方式又分为五种:前置通知,后置通知,环绕通知,异常通知,返回后通知。 加载的方式有两种:动态加载和cglib加载。

3,你用AOP做过什么业务?能简单讲讲吗?

我利用AOP做过日志的管理,采用监听方法的调用去实现的。但是有缺点:每个人写的方法名不一样,有的时候监听不到方法的调用,所以我当时规定了起名规则,它的优点就是不需要去写自定义注解,可以少些代码,因为方法名的约束在所以提高代码后续的可读性。 第二种方法就是自定义注解去实现日志录入,优点就是灵活多变,缺点就是每个方法都要加这个注解。

4,能讲讲Mybatis的大概的执行流程吗?它是怎么与数据库完成数据的交互的?

mybatis会加载SqlSessionFactory容器,每次请求都会获取到一个SqlSession,由SqlSession建立起与数据库的会话,并把sql传入数据库执行,数据库执行后把结果返回,其中,也涉及到了mybatis一级缓存的调用(如果表的结构或数据没发生改变,并且SQL重复执行,那么查询的时候优先把一级缓存中的数据返回,而不是请求数据库查询SQL语句),每次查询的结果其实都会存到一级缓存中,mybatis默认开启了一级缓存,二级缓存则需要通过修改配置文件开启,二级缓存是针对Mapper的,主要是多个 SqlSession共享同一个Mapper。(这里我也把mybatic的一级缓存和二级缓存大概讲了一下)

5,数据库方面有了解吗?能讲讲NoSQL和MySql的区别吗?

数据库方面也涉及到了CAP三大定律,即:一致性(C),可用性(A),分区容忍性(P)。 其中:传统型数据库,如MySql遵循的是CA,保证了一致性和可用性;KV结构的数据库满足AP,可用性与分区容忍性。

传统型数据库的优势在于:高性能,高拓展,高可用,能始终保证数据的一致性。缺点是当表数据量过大(五百万条或2.5G大小)的时候要考虑采用缓存,或者主从复制,读写分离,异构复制等数据库层次的优化操作。 NoSQL优势在于:体积小,速度快,成本低;缺点是很难保证数据的一致性,只能在业务层的代码做约束,但是根据墨菲定律,不管业务做得再严谨,一定会有脏数据产生,所以要用数据检查去补偿。其结构为Base模型(基本可用,软状态)。

6,能讲讲事务吗?

事务的四大特性为:原子(事务的操作是原子性的),一致(数据前后保持一致),隔离(事务的操作互不影响),持久(一旦持久化则不可回滚)。 事务的隔离级别为:脏读,不可重复读,幻读。 数据库事务的又分为:Default(默认级别),uncommit,commit(解决脏读),read(解决不可重复读),Serializable (解决幻读),事务的隔离级别设置得越高,数据库的性能就越低,所以一般只设置到commit级别。

7,能讲讲你建表的时候会注意哪一些吗?

1、关于字段的类型 人类的岁数设置为tinyint,龟的岁数设置为smallint,行星的寿命设置为int,宇宙的寿命设置为bigint; 涉及到金钱的使用decimal,因为fload,double有精度的缺失; 尽量不适用text,除非字节数超过了5000,否则都是使用varchar; 2、关于字段名 判断的字段的起名为is_xxx; 3、关于索引 索引我也不会多建,过多的索引会对查询速度产生影响 4、关于设置默认值 推荐字段设置默认值,可以很好避免程序运行时的空指针异常 5、关于必有字段 创建时间,修改时间,修改人

8,能讲讲索引吗?你是怎么优化一条SQL的?

索引常见的有主键索引、普通索引、唯一索引、全文索引、聚合索引。 聚合索引在使用的时候where后字段的顺序尽量与索引的顺序一致,否则可能会失效,并且聚合索引不能为null; 使用聚合索引,应把标识读最高的字段放在最左边,因为字段的匹配从左到右; 索引在使用的时候要注意where后字段的类型是否与索引的字段的类型一致,不一致会失效,例如索引的字段类型是varchar,但是where后的字段不用单引号包起来,这样索引会失效; 不在where后直接参与运算; 一条SQL的join不应该超过五条,否则可能会影响查询速度;

SQL的优化可以用解释计划去分析,主要看以下两列: type 这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const(最好)、eq_reg、ref(标准)、range(最低要求)、indexhe和ALL Extra 关于MYSQL如何解析查询的额外信息。这里如果出现Using filesort和Using temporary,就要优化了。前者是数据库需要进行额外的操作发现如何对返回的行排序,后者是MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上

9,能讲讲写SQL的时候的一些注意事项吗?

1,不要用*号,而是查什么字段就写什么字段; 2,用>=,,=,验证–>准备–>解析–>初始化–>使用–>销毁

分别对应: 1,把JAVA文件加载成二进制数据; 2,验证文件的正确性和完整性; 3,为静态变量分配内存; 4,对符号进行转义; 5,初始化类,由ClassLoader及其子类完成; 6,使用这个类; 7,GC

24,String的equals是怎么实现的?

先跟自己比–>再比较类型(是不是String类型)–>再比较长度–>再比较字节;

25,UDP和TCP的区别?

TCP:安全,建立请求需要三次握手,断开要四次,速度慢,常用于视频,下载等; UDP:不安全,不需要握手,速度快,常用于发送图片,文字等。

26,XML可以直接写>=或者=或者


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3