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); } }