1、易华录
(1)、http和https的区别
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,可防止数据在传输过程中不被窃取、修改,确保数据的完整性,比http协议安全。
https协议缺点Https协议握手阶段比较费时,会使页面的加载时间延长。
(2)、cookie和session的区别
http协议是无状态的协议,
就是把用户信息保存在cookie还是session的区别,保存到cookie第二次访问的时候通过浏览器把包含用户信息的cookie传递到服务端,保存到session是将sessionID保存到cookie里面,然后将cookie传送到服务端,通过sessionId在服务端获取到用户信息。
https://www.jianshu.com/p/9a561b36e9f3
(4)、memcache和redis的区别
Redis和Memcached都是将数据存放在内存中,都是内存数据库
Redis不仅仅支持简单的k/v类型的数据,同时还提供list、set、hash等数据结构的存储
存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)
灾难恢复--memcached挂掉后,数据不可恢复;redis数据丢失后可以通过aof恢复
Redis支持数据的备份,即master-slave模式的数据备份
(5)、垃圾回收算法和垃圾回收器
(9)、什么对象在堆什么对象在栈
栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和引用对象。Java中分配堆内存是自动初始化的。Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。
(6)、arrayList和LinkedList的区别
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。
如果只需要在靠前的部分插入或删除数据,那也可以选用LinkedList
(7)、乐观锁和悲观锁的区别
悲观锁总是假设最坏的情况,每次去拿数据到写数据的过程中都认为别人会修改,所以每次在拿数据的时候都会上锁,例如syncronized
乐观锁总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制实现。
一般多写的场景下用悲观锁就比较合适。一般多读的场景下用乐观锁就比较合适。
(9)、get和post有什么区别
(10)、truncate和delete的区别
truncate (清空表中的数据):删除内容。truncate table 删除表中的所有行。
delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
当数据量大的时候delete很慢,truncate很快
(11)、dataFrame多列去重,drop_duplicate
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
dff = df.drop_duplicates(subset=['f', 'g'])
subset: 默认使用所有columns, 传入column label or sequence of labels
keep: 默认 first
first: 保留第一项
last: 保留最后一项
False: 删除所有重复项
inplace:
True: 原来的df会被修改, 同时不会返回新的df
False: 原来的df不会被修改, 会返回新的df
spark读取kafka需要配置哪些参数
(12)、spark消费kafka的方式对比(receiver和direct方式):
基于receiver的方式,是使用Kafka的高阶API来在ZooKeeper中保存消费过的offset的。这是消费Kafka数据的传统方式。这种方式配合着WAL机制可以保证数据零丢失的高可靠性,但是却无法保证数据被处理一次且仅一次,可能会处理两次。因为Spark和ZooKeeper之间可能是不同步的。
基于direct的方式,使用kafka的简单api,Spark Streaming自己就负责追踪消费的offset,并保存在checkpoint中。Spark自己一定是同步的,因此可以保证数据是消费一次且仅消费一次。
在实际生产环境中大都用Direct方式
(13)、
repartition(numPartitions:Int):RDD[T]
coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T]
他们两个都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现
(14)、rdd、dataFrame、dataSet的区别
(15)、spark小文件的问题?
streaming增大批次时间,写入hdfs时减少分区,sql再处理
(16)、broadCast都能传什么数据库连接么?
不能,误区一:在driver上创建连接对象(比如网络连接或数据库连接)
如果在driver上创建连接对象,然后在RDD的算子函数内使用连接对象,那么就意味着需要将连接对象序列化后从driver传递到worker上。而连接对象(比如Connection对象)通常来说是不支持序列化的,此时通常会报序列化的异常(serialization errors)。因此连接对象必须在worker上创建,不要在driver上创建。
以下是错误案例,foreachRdd在driver上执行。
dstream.foreachRDD { rdd =>
val connection = createNewConnection() // 数据库连接在driver上创建
rdd.foreach { record =>
connection.send(record) // 在worker上执行
}
}
(17)、spark提交任务命令需要哪些参数
spark-submit \
--master yarn \ master 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local
--deploy-mode cluster \ 本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
--num-executors 5 \
--executor-cores 3 \
--executor-memory 3G \
--jars $jars \
--queue spark \
--conf spark.consumer.group=product3_page_20181221 \
--conf spark.speculation=true \
--conf spark.speculation.shuffleMapTask.only=true \
--conf spark.speculation.quantile="0.8" \
--conf spark.yarn.executor.memoryOverhead=1000 \
--conf spark.executor.extraJavaOptions="-XX:+UseParallelOldGC" \
--conf spark.streaming.concurrentJobs=2 \
--conf spark.network.timeout=300000 \
--class com.tv.sohu.spark.streaming.dm3.page.ProductPage \
$dir/../spark-streaming-1.0-SNAPSHOT.jar
(18)、foreachRdd和foreachPartition的区别?
foreachRDD作用于DStream中每一个时间间隔的RDD,foreachPartition作用于每一个时间间隔的RDD中的每一个partition,foreach作用于每一个时间间隔的RDD中的每一个元素。首先这两个都是转换算子,foreach是执行算子,foreachRdd最常用的输出操作,需要一个函数作为参数,函数作用于DStream中的每一个RDD,函数将RDD中的数据输出到外部系统,如文件、数据库,函数在driver上执行。
(19)、spark任务入库都有什么?
mysql,redis,hbase等
(20)、sparkContext、sparkSession区别?
SparkContext:驱动程序使用SparkContext与集群进行连接和通信,并与资源管理器(如YARN 或Mesos)进行协调。
SQLContext 是什么?
SQLContext是通往SparkSQL的入口。下面是如何使用SparkContext创建SQLContext。
HiveContext 是什么?
HiveContext是通往hive入口。
HiveContext具有SQLContext的所有功能。
实际上,如果查看API文档,就会发现HiveContext扩展了SQLContext,这意味着它支持SQLContext支持的功能以及更多(Hive特定的功能)
SparkSession:
SparkSession内部封装了sparkContext、SparkConf、SQLContext,所以计算实际上是由sparkContext完成的。
---- 为用户提供一个统一的切入点使用Spark 各项功能
---- 允许用户通过它调用 DataFrame 和 Dataset 相关 API 来编写程序
--- 与 Spark 交互之时不需要显示的创建 SparkConf, SparkContext 以及 SQlContext,这些对象已经封闭在 SparkSession 中
(21)、tcp3次握手为什么需要4次挥手?
为什么建立连接是三次握手,而关闭连接却是四次挥手呢? 这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,我们也未必全部数据都发送给对方了,所以我们不可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,我们的ACK和FIN一般都会分开发送。
(22)、sso
(23)、跨域的问题
(24)、mysql死锁
死锁的第一种情况
一个用户A 访问表A(锁住了表A),然后又访问表B;另一个用户B 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。
解决方法:
这种死锁比较常见,是由于程序的BUG产生的,除了调整的程序的逻辑没有其它的办法。仔细分析程序的逻辑,对于数据库的多表操作时,尽量按照相同的顺序进 行处理,尽量避免同时锁定两个资源,如操作A和B两张表时,总是按先A后B的顺序处理, 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。
(27)、kafka怎么保证不丢失数据的?
producer等待broker的ack,partition的leader和ISR中的follower全部都落盘成功后才返回ack。否则数据会重发。
(28)、controller,service是单例还是多例的?默认是单例的,还有其他什么参数。
request:web中一个请求一个实例,接收spring容器的管理
prototype:多例的,不接受spring容器的管理
spring管理的优点是降低耦合性
易华录视频运营平台
10、arrayList扩容内部是怎么实现的
首先判断当前数组长度能否再增加一个元素,然后如果不能扩容1.5倍,最后创建新的数组并且把原来的数据拷贝到新的数组中。
2、map的底层实现
hashmap使用的是数组加链表的数据结构 或者 说是散列表的数据结构使用链地址发解决的冲突
6、concurrenthashmap 和hashtable的线程安全有什么不同
Hashtable:容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下Hashtable的效率非常低下。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。
concurrenthashmap :JDK1.8的实现已经抛弃了Segment分段锁机制,利用CAS+Synchronized来保证并发更新的安全。数据结构采用:数组+链表+红黑树。
**4、spring aop,依赖注入原理
8、设计模式
7、restController和Controller注解的区别
@RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用。
@RequestParam:get 方式中queryString的值,和post方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。
9、synchronize和lock锁有何不同。
synchronized是由jvm来进行控制的,Lock是需要自己释放锁的。lock是用乐观锁。
10、多线程库下的多线程工具类,countdown等
3、redis事务
并不是原子性的
5、redis和mysql数据不同步的问题
mysql update以后,删除redis里面的缓存
11、布隆过滤器在redis里面的应用
去重
1、上10个台阶有多少种方式
动态规划怎么实现
12、springCloud的目的是为了稳定、可扩展、高效
思特奇大数据面经
1、kafka的数据存在什么地方
每个topic的数据存在每个partition中,每个partition一个文件夹,里面有多个segment,每个segment有个log数据文件和index索引文件。
2、kafka的定向消费,指定offset
消费test2这个topic的2分区,从5个offset开始消费
// 指定消费topic的那个分区
consumer.assign(Arrays.asList(new TopicPartition("test2",2)));
consumer.seek(p,5);
//public void seek(TopicPartition partition, long offset)
2、kafka的日志是什么样的
offset和value(消息体)
天地伟业大数据面经
**3、hadoop和spark的RPC是怎么实现的?
4、spark任务阻塞以后,后续批次的任务会开始执行么?
不会。会在队里里面等待。
5、client模式和cluster模式分别在什么情况下会用?有何区别?
cluster模式:客户端提交任务后,master通知worker节点启动driver(application Master)进程。(worker的选择是随意的,只要worker有足够的资源即可)
client模式:在client中启动Driver进程,并向master注册。
6、spark写helloWorld的单词数统计代码
7、spark提交代码服务启动流程。
捷信java
synchronize是内部实现原理:?作用在方法和对象上有什么区别?是否可重入?
reetrenlock的实现原理,和synchronize有什么区别?
线程池是用到哪个,newCacheThreadpool,为什么说是cache?线程可以被回收,被复用,当线程数大于核心线程数小于最大线程数时会被加到队列中,当队列满时可以创建新的线程。
threadLocal的实现原理?每个线程一个副本,线程隔离
集合框架
collection下list,set,还有什么?
还有队列
hashSet是怎么实现的?
底层利用hashMap来实现,用key作为元素存储,value使用一个final值。
hashMap为什么存储2的n次幂个空间?
HashMap是根据key的hash值决定key放到哪个桶中,通过hash&(length-1)公式计算得出,2的n次方一定是最高位1其它低位是0,这样减1的时候才能得到01111这样都是1的二进制。这样(n - 1) & hash的值是均匀分布的,可以减少hash冲突。
RDD的特性:分区,依赖
推测执行(speculative)
就是当出现同一个stage里面有task长时间完成不了任务,spark就会在不同的executor上再启动一个task来跑这个任务,然后看哪个task先完成,就取该task的结果,并kill掉另一个task。其实对于集群内有不同性能的机器开启这个功能是比较有用的。
1、spark累计的实时计算是有状态的实时计算
当某个excutor挂掉,就要重新计算某几个分区的数据,就会有很长的依赖链导致5分钟之内算不完。所以一定要checkpoint。
1、dump和对jvm内存的分析
2、flume的监控
紫光云:
幂等性怎么实现:多次访问的结果一样。利用token机制。
spring事物传播行为:
注解@Transactional cglib与java动态代理最大区别是代理目标对象不用实现接口,那么注解要是写到接口方法上,要是使用cglib代理,这是注解事物就失效了,为了保持兼容注解最好都写到实现类方法上。默认是required,如果有事务就在事务里面运行,如果没有事务就新建事务。
mysql的事务隔离级别:msyql比oracle慢,mysql是可重复读,oracle是读已提交。
异常处理:拦截器统一处理
日志打印级别:debug<info<error
网关:用于不同的网络协议的网络互联。
路由:路由信息就是指导报文发送的路径信息,路由的过程就是报文转发的过程。
子网掩码:子网掩码可以分离出IP地址中的网络地址和主机地址。因为两台主机要通信,首先要判断是否处于同一网段,即网络地址是否相同。如果相同,那么可以把数据包直接发送到目标主机,否则就需要路由网关将数据包转发送到目的地。
未来自己的团队的情况
您对年轻职场同学的职业规划的建议
最喜欢什么样的员工
晋升成长方面,如请问您能介绍一下贵公司该职位晋升渠道
表达自己的兴趣
慢热型
358297
hashmap的jdk7和jdk8的区别
线程的状态
查找高cpu的工具(线程死循环导致的)
cap理论和base理论
rpc的原理,dubbo框架,利用rpc作负载均衡
序列化的原理
AutomicInteger和sychronyze的区别
聪明、皮实