一些面试高频题目
Posted zmmijava
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一些面试高频题目相关的知识,希望对你有一定的参考价值。
- 1.跨域问题?同源策略?怎么解决跨域问题
- 跨域问题是指在浏览器中,当一个Web应用程序向一个不同源(例如协议、域名或端口不同)的Web应用程序发起请求时,浏览器会阻止请求。这是由于浏览器的同源策略所导致的,同源策略要求Web应用程序只能访问与其本身来源相同的资源。跨域问题的解决方法有如下几种:
- JSONP(JSON with Padding):利用script标签可以跨域加载资源的特性,通过在页面中添加一个script标签,设置src属性为跨域请求的URL,同时指定一个回调函数包裹返回的JSON数据。服务端返回的数据会自动执行在回调函数中,从而实现在客户端与服务端之间传递数据。但是JSONP只支持GET请求,不支持POST等其他请求方式。
- CORS(Cross-Origin Resource Sharing):CORS是一种跨域资源共享的机制,它允许浏览器向跨域服务器发起请求,并且允许服务器返回数据。CORS需要在服务端设置相应的HTTP头信息,包括Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等,以便浏览器能够识别请求是否允许跨域。
- 代理:通过在服务器端(nginx)进行中转,将客户端的请求转发到目标服务器上,并将目标服务器返回的数据再返回给客户端,从而实现跨域请求。
- WebSocket:WebSocket是一种全双工通信协议,可以在浏览器与服务器之间建立一个持久连接,实现跨域通信。WebSocket是HTML5提出的一种新的网络通信协议,需要浏览器和服务器都支持。
- 跨域问题是指在浏览器中,当一个Web应用程序向一个不同源(例如协议、域名或端口不同)的Web应用程序发起请求时,浏览器会阻止请求。这是由于浏览器的同源策略所导致的,同源策略要求Web应用程序只能访问与其本身来源相同的资源。跨域问题的解决方法有如下几种:
- 2.oracle和mysql中,分别取出表A中的5到10条记录。
- SELECT *
- FROM (SELECT *, ROWNUM rn
- FROM A)
- WHERE rn >= 10 AND rn <= 20
- mysql
- select *
- from A
- limit 5,5(起始索引,每页记录数)
- SELECT *
- 3.==和equals
- String s1="abc";
- String s2="abc";
- System.out.println(s1==s2);//true,字符串常量池
- System.out.println(s1.equals(s2));//true
- String s3=new String("abc");
- System.out.println(s1==s3);//堆内存中
- System.out.println(s1.equals(s3));//true,比较字符串的值是否相等
- String s1="abc";
- 4.数据库的读写分离,怎么实现?
- 一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。
- 主库和从库之间会进行数据同步,以保证从库中数据的准确性。
- 这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。
- 读写分离对于提升数据库的并发非常有效。
- 但是,同时也会引来一个问题:主库和从库的数据存在延迟。
- 比如你写完主库之后,主库的数据同步到从库是需要时间的,这个时间差就导致了主库和从库的数据不一致性问题。这也就是我们经常说的 主从同步延迟 。
- 主从同步延迟问题的解决,没有特别好的一种方案。可以根据自己的业务场景,参考下面几种解决办法。
- 一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。
- 如何实现读写分离?(读写分离和主从库是一个概念,先考虑读写分离,再考虑分库分表)
- 不论是使用哪一种读写分离具体的实现方案,想要实现读写分离一般包含如下几步:
- 部署多台数据库,选择其中的一台作为主数据库(写库),其他的一台或者多台作为从数据库(读库)。
- 保证主数据库和从数据库之间的数据是实时同步的,这个过程也就是我们常说的主从复制。
- 系统将写请求交给主数据库处理,读请求交给从数据库处理。
- 不论是使用哪一种读写分离具体的实现方案,想要实现读写分离一般包含如下几步:
- 数据库中的主从复制原理?(binlog日志是主从复制、同步的关键点,canal就是采用了这种机制,canal进行监听可以实现和ES、redis之间的数据同步;除此之外,binlog也能实现数据恢复)
- 主库将数据库中数据的变化写入到 binlog
- 从库连接主库
- 从库会创建一个 I/O 线程向主库请求更新的 binlog
- 主库会创建一个 binlog dump 线程来发送 binlog ,从库中的 I/O 线程负责接收
- 从库的 I/O 线程将接收的 binlog 写入到 relay (中继站)log 中。
- 从库的 SQL 线程读取 relay log 同步数据本地(也就是再执行一遍 SQL )。
- 主库将数据库中数据的变化写入到 binlog
- 主从复制的两种实现方式?
- 编程时手动实现读写分离:应用程序通过代码显式地将读操作和写操作分别发送到不同的数据库实例上。这种方式需要在应用程序代码中编写读写分离的逻辑代码,相对来说比较容易实现,但是需要修改大量的代码,不够灵活。
- 数据库代理实现读写分离:使用数据库代理程序对数据库进行代理,将读操作和写操作分别转发到不同的数据库实例上。常见的数据库代理有MySQL Proxy、MyCAT、Cobar等。这种方式不需要修改应用程序的代码,因此更加灵活。在实际应用中,一般采用数据库代理实现读写分离,因为它对应用程序无侵入,易于管理和维护。同时,为了保证数据的一致性,写操作需要在所有数据库实例上执行,可以使用主从同步等技术实现。
- 编程时手动实现读写分离:应用程序通过代码显式地将读操作和写操作分别发送到不同的数据库实例上。这种方式需要在应用程序代码中编写读写分离的逻辑代码,相对来说比较容易实现,但是需要修改大量的代码,不够灵活。
- 5.http状态码,分别代表什么意思,cookie和session的区别
- 200:客户端获取响应数据成功
- 300:重定向相关;301已永久移动。此请求和之后所有的请求都应该转到制定的URI。
- 403:服务器能接受到资源请求,但是拒绝提供访问,即没有响应的权限
- 404:前台资源出现问题,找不到所访问的页面
- 500:服务器内部故障,后台代码出现异常
- 503:目前服务器无法使用,一般是因为服务器超载或停止维护
- 200:客户端获取响应数据成功
- 6.servlet对象和spring中的bean对象默认都是单例模式的,singletonObject,所以多线程并发访问的时候,是线程不安全的,会存在线程安全问题。
- 7.//接口的修饰符要么是public,要么为空,不能用protected,private修饰
- 8.实现国际化应用常用的类时ResourceBundle
- 9.try catch finally 和return,System.exit(0)之间的关系
- 10.Hash表和AVL树具有较高的查询和删除性能
- Hash表和AVL树是两种不同的数据结构,各自有着不同的特点和应用场景。Hash表是一种基于哈希函数实现的数据结构,将数据按照哈希函数计算后的值存储在数组中。Hash表的主要优势在于其快速的查找速度,时间复杂度可以达到O(1)。但是,Hash表也有一些缺点,例如在哈希函数设计不当时可能会导致哈希冲突,需要解决冲突的方法,也会影响性能。此外,Hash表的存储方式是无序的,不适合需要有序访问的场景。
- AVL树是一种自平衡二叉搜索树,保证了每个节点的左右子树高度差不超过1。AVL树的主要优势在于其具有较快的搜索和插入速度,时间复杂度可以达到O(log n),同时也保证了树的平衡,能够避免出现树的不平衡问题。但是,AVL树也有一些缺点,例如在插入或删除节点时可能需要进行旋转操作,会消耗一定的时间和空间。
- 综上所述,Hash表适用于需要快速查找数据的场景,但是对于有序访问的场景不太适用。AVL树适用于需要快速查找和插入数据的场景,并且能够保证树的平衡,但是在某些情况下需要进行旋转操作
- Hash表和AVL树是两种不同的数据结构,各自有着不同的特点和应用场景。Hash表是一种基于哈希函数实现的数据结构,将数据按照哈希函数计算后的值存储在数组中。Hash表的主要优势在于其快速的查找速度,时间复杂度可以达到O(1)。但是,Hash表也有一些缺点,例如在哈希函数设计不当时可能会导致哈希冲突,需要解决冲突的方法,也会影响性能。此外,Hash表的存储方式是无序的,不适合需要有序访问的场景。
- 11.查询语句的组装
-
- select 分组字段,分组后进行的聚合函数(最大值,最小值,平均值,求和)
- from 表名
- [where 条件]
- [group by 分组字段]
- [having 分组后筛选]
- [order by 排序列表 asc|desc]
- [limit a , b](限制返回的结果集的数量) a起始下标,b每页数据量
- select 分组字段,分组后进行的聚合函数(最大值,最小值,平均值,求和)
- 2.注意:
- where和having的区别
- having和where都是用来过滤的,但是having可以跟聚合函数,
- where是在分组前执行的,having是在分组后执行的。
- 分组查询中select关键字后面的列是有限制的,能出现在select后面的列
- 只有两种情况:一是被分组的列,二是包含在聚合函数中的列。
- where是在分组前执行的,having是在分组后执行的。
- 12.public private protected 等默认修饰符的权限
- 13.完全二叉树和二叉树的区别
- 完全二叉树和二叉树是两种不同的数据结构,它们有着不同的特点和应用场景。
- 二叉树是一种树形结构,每个节点最多有两个子节点。每个节点分别指向其左子节点和右子节点,不存在度大于2的节点。二叉树的特点在于其结构简单,易于理解和实现,同时也方便进行遍历和搜索。二叉树的应用十分广泛,例如在计算机科学中广泛应用于搜索、排序、编译器等领域。完全二叉树是一种特殊的二叉树,在其结构上具有一定的规律性。
- 完全二叉树的定义是:对于一棵二叉树,除最后一层外,每一层的节点数都达到最大值,最后一层的节点都集中在左侧。也就是说,若一棵完全二叉树的深度为h,那么该树的结构可以表示为:前h-1层是满二叉树,第h层从左到右填满若干节点,其余节点不存在。完全二叉树的特点在于其结构十分紧凑,可以使用数组等顺序存储结构来存储和访问,同时其深度较小,搜索和遍历也相对较快。完全二叉树的应用场景包括堆排序、哈夫曼编码等领域。综上所述,完全二叉树是一种特殊的二叉树,具有一定的规律性和优势,适用于一些特定的应用场景。而二叉树是一种更为广泛的数据结构,应用领域更加广泛。
以上是关于一些面试高频题目的主要内容,如果未能解决你的问题,请参考以下文章