1. HashSet是如何保证数据不重复的;

  首先,HashSet添加元素的时候,底层是通过HashMap的put方法来实现的,而添加的元素,则是保存在了hashMap的key里,因为HashMap的key不会重复,所以hashset添加的元素也不会重复。而HashMap的put方法的底层是通过hashcode和equals方法来实现防止重复的;首先会判断该数据的hashCode是否已经存在,如果不存在,说明集合里没有该数据,保存进去;如果存在相同的hashcode,再调用equals方法判断数据,如果还是相等,说明该对象已经存在,不再添加;

  因为两个对象的hashcode不同,则两个对象一定不同,而如果hashCode相同,那这两个对象不一定相同,所以再用equals来判断一下即可;

2. ArrayList和数组有什么区别;

  首先,数组的大小是固定的,我们在使用数组的时候,必须要给出固定的大小。而ArrayList我们不用给定大小就可以使用。但实际上,ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

  所以,ArrayList底层是通过数组来实现的,可以说是ArrayList是一个动态扩容的数组;而也正是动态扩容,让我们使用ArrayList的时候不用过多关注ArrayList的大小,同样,动态扩容,也是ArrayList效率方面的一个问题;

3. SQL事务的4个特性;

  SQL事务的4个特性(ACID):原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability);

  a. 原子性是说事务中包含的各个操作要么全部执行,要么全部不执行,不存在只执行了中间某个操作这种情况。即类似于运算符中的boolean,要么true,要么false;

  b. 一致性是说在事务执行前后,数据的状态必须是从一个一致性状态到另一个一致性状态。比如银行转账,两个账户相互转账,第一个账户有50元,第二个账户有50元,两个账户的总和是100元。这是一个一致性的状态,第一个账户给第二个账户转账20元,此时,第一个账户还有30元,第二个账户有70元,两个账户的总和还是100元,这是另一个一致性的状态。如果转来转去,转失败或其他情况,最终两个账户的总和不是100,那这就不是一个一致性的状态。或者通俗的来讲,数据库插入一个数据A, 写进去后这个数据还是A,不会变成B,这就是一致性;

  c. 隔离性是说一个事务的执行不能影响到其他事务,或者一个事务的执行不能被其他事务所影响,两个事务之间的操作不会相互影响,即不会发生脏读、不可重复读和幻读。隔离性的具体内容可以参考数据库的隔离级别。比如,一个更新事务更新一条数据时,另一个数据读取了还没提交的更新数据,造成脏读。例如事务A 增加数据,事务B删除数据, 互相不影响,就是相互隔离开来。如果事务A删除数据,事务B也删除该数据,则事务的隔离性将通过串行化的方式,使得同一时间只能有一个请求用于执行删除A数据的操作。

  d. 持久性是说事务一旦提交,那么它对数据库的修改就应该是永久的,不会被回滚。即是插入数据库的数据写到了磁盘,就是永久了。

4. Spring用来做什么?

  Spring 框架目标是简化Java企业级应用开发,降低对象之间的耦合关系。将原先我们自己手动控制的对象间的关系交由框架来管理。简单的说就是简化开发,降低耦合;

5. Dubbo和zookeeper是用来做什么?

  首先,dubbo是一个RPC(Remote Procedure Call 远程过程调用)框架,说白了就是个远程服务调用的分布式框架,如果没有分布式的需求,是不需要RPC的。比如两台服务器A,B,一个应用部署在A服务器上,一个部署在B服务器上,如果A服务器需要调用B服务器上的方法,由于不在同一个内存空间,不能直接调用,RPC就是为了解决这个问题的;

  dubbo中的zookeeper,由于dubbo是基于消费者和服务者模式的框架,所以zookeeper是充当一个注册中心的存在,服务注册到zookeeper上,然后由消费者去调用。

6. Mysql的左连接和右连接有什么区别?

  首先,左连接是说,两张或两张以上的表进行关联查询,最终查询出的数据的条数和左表是一致的,即以左表为基准,到右表找匹配的数据,找不到匹配的用NULL补齐;
而右连接恰好相反;

7. 并发(concurrency) 和 并行(parallellism)的区别?

  并行是指两个或多个事件在同一时刻发生,而并发是指两个或多个事件在同一时间间隔发生;
  或者说,并发是在在一台处理器上“同时”处理多个任务,在并行是在多台处理器上同时处理多个任务;
  因为并行是基于多处理器的,所以说在单核CPU系统上,只可能存在并发而不可能存在并行;
  其实,并发是时间段内有很多的线程在执行,但任何时间点上都只有一个在执行,多个线程轮询CPU的时间片执行,或者说CPU在不同的线程之间切换,每个线程只准运行一小段时间。只不过这个时间特别短,短到我们察觉不到它们断断续续的执行,所以我们就感觉好像是在同时运行多个线程。那么在这里线程切换的意义主要就是提升交互体验。(下图转载自github)


http://ifeve.com/parallel_and_con/
https://www.zhihu.com/question/33515481
http://ask.csdn.net/questions/193424

最新文章

  1. win7的6个网络命令
  2. MATLAB中fft函数的正确使用方法
  3. 词频统计_输入到文件_update
  4. C++学习基础三——迭代器基础
  5. POJ 3320 Jessica's Reading Problem
  6. C语言错误 BUG报错整理
  7. js判断页面出现滚动条
  8. Foundation of 3D computer Graphics--Reading notes
  9. Windows下MySQLroot密码破解
  10. [COCOS2DX]官网helloworld在VS2012中的部署
  11. 测试functional的bind以及相关功能
  12. ubuntu 解压,压缩
  13. 压位加速-poj-2443-Set Operation
  14. Java Web 部署到Tomcat
  15. selenium - Headless Browser and scraping - solutions - Stack Overflow
  16. Linux 经典电子书共享下载
  17. matlab三维画图
  18. Angular 小试牛刀[2]:CI(travie+firebase)
  19. Vue-cli+Vue.js2.0+Vuex2.0+vue-router+es6+webpack+node.js脚手架搭建和Vue开发实战
  20. LeetCode算法题-Find All Numbers Disappeared in an Array(Java实现)

热门文章

  1. AOJ.849 分数 (暴力)
  2. HDOJ(HDU).1025 Constructing Roads In JGShining's Kingdom (DP)
  3. Codechef MARCH14 GERALD07加强版
  4. 【learning】杜教筛求欧拉函数前缀和
  5. Hive架构及应用介绍【链接】
  6. 配置好solr搜索引擎服务器后java后台如何将商品信息导入索引库
  7. Reduce Side Join实现
  8. 编译skia静态库时,图片解码库无法注册的问题
  9. C# 生成订单号的几种方式
  10. PHP扩展--Suhosin保护PHP应用系统