首页 > 技术文章 > 面试中遇到的问题

drq1 2019-02-20 23:56 原文

1.说说自己开发中遇到哪些问题?怎么解决的?

  1. 项目中总会报空指针异常,优化代码。

  2. 数据库的维护,出现数据丢失,闪回了。

  3. jsp页面上的内容只有在某一个浏览器上好用。

  4. 身份证读取到页面。

  5. 数据库结构混乱,字段冗余。

  6. 页面不能跳转。

  7. hibernate保存失败

  8. 说说数据库索引的底层实现原理?什么情况下会导致数据库索引失效?首先数据库索引底层有两种实现方式,Hash和B+树。导致索引失效的情况:1、组合索引(A,B,C)没有遵循最左匹配规则。2、like查询以%开头的。3、一些关键字会导致索引失效,比如not in,or,!=,not null,is not null。4、隐式转换会导致索引失效。5、对索引应用内部函数,索引字段进行了运算。
  9. 请你说一说MySQL数据库的两种引擎?InnoDB是聚集索引,支持事务,支持行级锁。MyISAM是非聚集索引,不支持事务,只支持表级锁。如果一些数据库,经常用来查询而不做修改的话,用MyISAM效率高。
  10. 1. HashMap,TreeMap 未进行同步考虑,是线程不安全的。
    2. HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加锁的范围不同,HashTable
    对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。
    3. Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,
    List  list = Collections.synchronizedList(new ArrayList());
    Set  set = Collections.synchronizedSet(new HashSet()); 

  11.  HashMap不是线程安全的; Hashtable线程安全,但效率低,因为是Hashtable是使用synchronized的,所有线程竞争同一把锁; ConcurrentHashMap不仅线程安全而且效率高,因为它包含一个segment数组,将数据分段存储,给每一段数据配一把锁,也就是所谓的锁分段技术 为什么HashMap不是线程安全的?    1、如果多个线程同时使用put方法添加元素,而且假设正好存在两个put的key发生了碰撞(根据hash值计算的bucket一样),那么根据HashMap的实现,这两个key会添加到数组的同一个位置,这样最终就会发生其中一个线程的put的数据被覆盖。 2、如果多个线程同时检测到元素个数超过数组大小* loadFactor,这样就会发生多个线程同时对Node数组进行扩容,都在重新计算元素位置以及复制数据,但是最终只有一个线程扩容后的数组会赋给table,也就是说其他线程的都会丢失,并且各自线程put的数据也丢失。 hashMap实现线程安全

推荐阅读