校招字节跳动——面试

it2022-05-05  135

1、join、left join 、 full join和cross join区别

      join等价于inner join内连接,返回两个表中都有的符合条件的行;

      left join左连接,返回左表中所有的行和右表中符合条件的行;

      full join全连接,返回左表中所有的行和右表中所有的行,并按条件连接。

      cross join笛卡尔积,返回左表和右表两两组合的记录。

2、Java中实现多态的方式

     方法覆盖(Override)和重载(Overload)、接口(Interface)、抽象类(Abstract)

3、编译时多态和运行时多态/动态多态性

     方法重载是编译时多态,一个类中的行为;方法覆盖表现为两种多态性,当对象引用本类实例时,一个类中的行为,为编译时多态,否则为运行时多态(即在运行时解析对覆盖方法的调用过程),两个或两个以上类中的行为,例如:父类对象引用子类实例。

     Father(父类) f = new Son(子类)

     “成员变量,静态方法看左边;非静态方法,编译看左,运行看右”

4、Session和Cookies的区别和联系

     因为Web应用程序是使用HTTP协议传输数据,而HTTP是无状态协议,一旦数据交换完毕,就会关闭连接,无法跟踪会话。Session与Cookies都是跟踪用户的整个会话,Cookies通过在客户端记录信息确定用户的身份,即“通行证”,Session通过在服务器端记录信息确定用户身份,即“客户表”。

5、HDFS角色划分

     Client:进行数据块的物理切分;

     NameNode:存储元数据,接受client读写请求,接受DataNode心跳,负载均衡分配数据块的存储节点。其中包含fsimage和edits log两个文件。fsimage 文件,用于存储所有的元数据,会加载到内存中,提高了读取文件的速度。edits log 文件用于存储最新上传文件的元数据,这个文件大小是有限制的,一般为 64MB。当 edits log 文件存储大小达到 64MB 时,就会将这些元数据添加到 fsimage 文件中。

     DataNode:处理client读写请求,向NameNode发送心跳,数据真正存储;

     SecondaryNameNode:备份元数据,协助NameNode进行元数据合并。

6、HDFS写数据流程

     1.  Client与NameNode通信请求上传数据,NameNode检查目标文件是否存在,返回上传许可;

     2.  Client接收到上传许可后,将数据切分为若干Block块,然后向NameNode请求发送能够存储数据的DataNode;

     3.  NameNode返回存储数据的DataNode,Client请求其中一台A采用RPC调用上传数据,A收到请求继续调用B,B调用C,建立整个数据块的存储路径。

     4.  Client开始上传第一个Block给A,然后A传给B,B传给C;

     5.  Client再次请求NameNode发送其他Block数据。

7、HDFS读数据流程

    1.  Client向NameNode获取第一个Block位置,Block会根据副本数返回对应数量的locations,依据网络拓扑结构排序,距离client端的排在前面;

     2.  获取距离clinet最近的DataNode并与其建立通信,读取完成后关闭指向该DataNode的连接,接着读取下一个Block,以此类推。

8、汽车销量行转列,其中输入格式:month  type  area  cnt;输出格式:month  type_1_cnt  type_2_cnt  type_others_cnt

      例如:输入:  month  type  area  s_cnt                               201801  1   北美  5000                               201802  2   非洲  6000                               201802  1   北美  8000                               201801  1   亚洲  4000                               201801  3   亚洲  111                 输出:  month   type_1_cnt  type_2_cnt  type_others_cnt                              201801      9000              0                  111                              201802      8000           6000                 0

SELECT MONTH ,SUM(CASE type WHEN '1' THEN S_CNT ELSE 0 END)'1' ,SUM(CASE type WHEN '2' THEN S_CNT ELSE 0 END)'2' ,SUM(CASE type WHEN '3' THEN S_CNT ELSE 0 END)'3' FROM TypeDance GROUP BY MONTH;

9、三角形最长周长问题,nlogn时间复杂度要求。输入:long[] arr  输出:周长最长三角形周长

import java.util.Arrays; public class test { public static void main(String[] args) { int[] s = { 1, 5, 3, 7, 6, 4, 7, 2 }; Arrays.sort(s); int res = 0; for (int i = s.length - 3; i >= 0; i--) { if (s[i] + s[i + 1] > s[i + 2]) { res = s[i] + s[i + 1] + s[i + 2]; break; } } System.out.print(res); } }

 


最新回复(0)