集合里面的一些安全线程和不安全线程?
安全的:
Vector
HashTable
StringBuffer
非线程安全:
ArrayList :
LinkedList:
HashMap:
HashSet:
TreeMap:
TreeSet:
StringBulider:
mybaits与hibernate的区别
hibernate:是一个标准的ORM框架(对象关系映射)。入门门槛较高,不需要写sql,sql语句自动生成,对sql语句进行优化、修改比较困难。
应用场景:适用需求变化不多的中小型项目,比如:后台管理系统,erp,orm,oa等
mybatis:专注sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全的ORM框架,虽然程序员自己写sql,mybatis也可以实现映射(输入映射,输出映射)
Hibernate优势
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
Mybatis优势
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,而Hibernate门槛较高。
拦截器和过滤器的区别?
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
session和cookie的区别
session是存储服务器端,cookie是存储在客户端,所以session的安全性比cookie高。
获取的session里的信息是通过存放在会话cookie里的sessionId获取的
因为session是存放在服务器里的,所以session里的东西不断增加会增加服务器的负担,我们会把一些重要的东西放在session里,不太重要的放在客户端cookie里
cookie分为两大类,一个是会话cookie和持久化cookie,他们的生命周期和浏览器是一致的,浏览器关了会话cooki也就消失了,而持久化会存储在客户端硬盘中。
浏览器关闭的时候回话cookie也就消失所以我们的session也就消失了,session在什么情况下丢失,就是在服务器关闭的时候,或者是session过期(30分钟默认)。
Scala?
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala 运行在Java虚拟机上,并兼容现有的Java程序。
Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
Kafka常识
容错、良好的扩展性及优势性能,kafka的使用主要还是用来处理日志
说下MapReduce
整个MapReduce的过程大致分为 Map–>Shuffle(排序)–>Combine(组合)–>Reduce
MapReduce的过程首先是由客户端提交一个任务开始的,提交任务主要通过JobClient.runJob(JobConf)静态函数实现的
读取数据文件内容,对内容解析成键值对,每个键值对调用一次map函数,编写映射函数处理逻辑,建输入的键值对输出新的键值对
将新的键值对进行分区,排序,分组
对多个Map的输出,按不同分区通过网络将copy到不同的reduce节点
对多个map的输出进行排序,合并,编写reduce函数处理逻辑,将接收到的数据转化成新的键值对
最后将reduce节点输出的数据保存到HDFS上
说下Yarn
Hadoop三大核心组件之一;
负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager
◆MapReduce 在 YARN 上的执行流程:
客户端提执行JobClient —> 请求任务id到ResourceManager—> 创建任务ID—>返回任务ID到客户端 —> 客户端开始上传任务Jar包,获取到HDFS的数据原信息—->在向Yarn请求执行任务 —> ResourceManager开始初始化任务—>ResourceManager开始分配任务 –>HDFS从NodeManager获取任务和数据
YARN可以将多种计算框架(如离线处理MapReduce、在线处理的Storm、迭代式计算框架Spark、流式处理框架S4等) 部署到一个公共集群中,共享集群的资源
ResourceManager(RM) :
负责对各NM上的资源进行统一管理和调度。将AM分配空闲的Container运行并监控其运行状态。对AM申请的资源请求分配相应的空闲Container。主要由两个组件构成:调度器和应用程序管理器
NodeManager (NM) :
NM是每个节点上的资源和任务管理器。它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自AM的Container 启动/停止等请求。
ApplicationMaster (AM):
用户提交的应用程序均包含一个AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。
Container:
Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container 表示的。 YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。
Zookeeper的应用场景
统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下
线、软负载均衡
HBase的存储原理
上文提到,hbase使用MemStore和StoreFile存储对表的更新。
写操作:
步骤1:Client通过Zookeeper的调度,向HRegionServer发出写数据请求,在HRegion中写数据。
步骤2:数据被写入HRegion的MemStore,直到MemStore达到预设阈值。
步骤3:MemStore中的数据被Flush成一个StoreFile。
步骤4:随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。
步骤5:StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile。
步骤6:最后的文件StoreFile会刷盘就会相应生成一个存储文件HFile,数据量的持续写入,造成memstore的频繁flush,每次flush都会产生一个HFile,这样底层存储设备上的HFile文件数量将会越 来越多。(磁盘)最好通过HDFS接口写到HDFS中
Kafka写入流程
1)producer先从zookeeper的 “/brokers/…/state”节点找到该partition的leader
2)producer将消息发送给该leader
3)leader将消息写入本地log
4)followers从leader pull消息,写入本地log后向leader发送ACK
5)leader收到所有ISR中的replication的ACK后,增加HW(high watermark,最后commit 的offset)并向producer发送ACK