首页 > 编程知识 正文

面试问题回答样本,面试综合分析题怎么答

时间:2023-05-03 11:19:40 阅读:16842 作者:724

1,http://www.Sina.com /

a )进程中的线程间内存共享。 这是比较常用的通信方式和对话方式。线程之间的通讯:为了防止编译器优化此变量,建议在定义全局变量时使用volatile进行定义。

请勿在servlet中设置全局变量。 访问访问权限较大的servlet时,会出现线程并发问题。:Wait方法解除对象的锁定。 当前线程必须等待,直到另一个线程调用通告或通告全部

方法,无法执行唤醒的线程。 必须等待当前线程放弃对此对象的锁定。Wait和notify方法:可以暂停线程,但在线程休眠时不会解除对象锁定

在wit (方法和通告)方法中,线程在调用时必须获得对象的锁定,因此对这两个方法的调用必须放在同步方法或同步块中

2,http://www.Sina.com /

a )数据库的隔离级别有四种,从低到高依次为:读取未确认、读取未提交、可删除读取、可序列化、已提交

容易发生脏读(事务a读取了事务b中未提交的数据),从而避免了更新丢失

Read committed :

避免了脏读,但会发生不可重复的读取。 一个事务读取了两次数据,但得到了不同的结果。

可重复读取:

避免了不可重复的读取和脏读取,但更容易发生幻像读取。 事务在操作过程中执行两次查询,第二次查询第一次查询缺少或增加的数据。 这是因为在第二次查询中有一个事务的插入数据。

可序列化:

序列化是最高的隔离级别,所有这些问题都可以解决,但性能相对较低。 由于此隔离级别最高,因此保证了数据的完整性和一致性。

注1、为了读取效率,我们平时可以将数据库的隔离级别设置为读取提交

他可以避免读取不洁。 虽然会发生不可重复的读取、幻像读取,但可以在APP应用程序中使用悲观或乐观锁定进行控制。

2、大部分数据库的默认级别为读提交,如SQl server oracle

Mysql的默认级别为可删除读取

3,http://www.Sina.com /

答(a(Shiro )是一个识别用户id和权限的安全控制框架,是一个更容易、更快地实现认证和权限控制的安全框架。

4,http://www.Sina.com /

a ) model -view-controller是一种分层设计软件体系结构,用于解耦代码,以便以后更好地进行代码复用、维护和测试。

视图层:与控制层配合使用以显示前页面。

控制层:业务模块的流程控制,服务层接口的调用。

服务层:调用业务操作实现类、dao层接口。

dao层:数据业务处理,持久运营

模型层: pojo、OR maping、持久层

5,http://www.Sina.com /

答: MVC是我们以前学习的Web项目的重要软件体系结构。 是Web项目开发的重要组成部分。 当view层向控制器层传递值时,可以直接在对象上接收。

6,http://www.Sina.com /

答(a(springAOP是面向切片的编程,原理是动态代理

Spring ioc是控制逆转,DI依赖注入,降低耦合度,提高导线的可维护性

7,http://www.Sina.com /

a ) svn冲突主要是由于在提交代码时进行了修改而导致的。 通过使用分配给项目组成员的不同帐户来区分具体代码是谁编写的,可以避免这种情况。

具体解决办法如下:

a、放弃更新,使用svn revert (回滚)提交。 这种方式不需要使用svn resolved (解决)

B、放弃自己的更新,使用别人的更新。 用新获取的版本复盖目标文件,运行resolved filename并发送(“选择文件”-“右键单击”-“解决”)。

c、手动解决:发生冲突时,与他人沟通后,手动更新目标文件。 然后,运行解析文件名以消除冲突并最后提交。

8,http://www.Sina.com /

nginx是反向代理服务器,用于平衡服务器的负载。

9,http://www.Sina.com /

a )由于数据库占用内存资源,连接池用于分配和管理连接,无需重复创建连接,节省了重复创建的时间,提高了数据库连接的性能。

原理:使用集合存储连接对象,根据需要从集合中检索连接对象,并在使用完成后,

将connection放回到集合中

10、hibernate的一二级缓存的具体区别
答:hibernate的一级缓存是session缓存,二级缓存是sessionfactory缓存,
什么样的数据适合放到二级缓存中?
1、很少被修改的数据2、不是很重要的数据,允许出现偶尔并发的数据3、不会被并发访问的数据4、参考数据
不适合存放到第二级缓存的数据?
A、经常被修改的数据B、财务数据,绝对不允许出现并发C、与其他应用共享的数据。
一级缓存是session级别的,也可以理解为在一个事务中起作用,同一个事务对数据库操作两次时,是从缓存中取出的。
另外需要注意的一点是:对数据库进行增删改操作之后,对应的二级缓存就会更新,就意味着二级缓存要存储一些很少被修改的数据

12、线程池的详细信息如何创建
答:首先要创建线程池管理器,用来创建并管理线程;大致可以分为两种线程池:
A:LinkedBlockingQueue是一个无界限的队列,同时也是一个阻塞的队列;LinkedBlockingQueue:优先是线程池执行比较稳定,不会出现内存溢出,缺点是任务多线程少,执行比较慢。LinkedBlockingQueue:适用于100W任务,对于执行时间较长的任务使用此队列最合适。
B: SynchronousQueue:无缓冲区的队列,里面只能存放一个任务
优点:处理任务速度比LinkedBlockingQueue队列快
缺点:一旦线程数上万,主机崩盘,不稳定
New ThreadPoolExecutor(5个参数)
第一个参数:线程池的大小;第三个参数:闲置多长时间释放;
第四个参数:闲置时间的单位(毫秒)
第五个参数:当线程少任务多的时候将线程没有处理的任务放到队列中

13、list、set、map的 区别
答:List:元素是有顺序的,元素可以重复因为每个元素有自己的角标(索引)
|-- ArrayList:底层的数据结构是数组结构,特点是:查询很快,增 删 稍微慢点,线程不同步
|-- LinkedList:底层使用的是链表数据结构,特点是:增 删很快,查询慢。
|–Vector:底层是数组数据结构,线程同步,被ArrayList代替了,现在用的只有他的枚举
Set:元素是无序的,且不可以重复(存入和取出的顺序不一定一致),线程不同步。
|–HashSet:底层是哈希表数据结构。根据hashCode和equals方法来确定元素的唯一性
|–TreeSet:可以对Set集合中的元素进行排序(自然循序),底层的数据结构是二叉树,也可以自己写个类实现Comparable 或者 Comparator 接口,定义自己的比较器,将其作为参数传递给TreeSet的构造函数。
Map:这个集合是存储键值对的,一对一对往里存,而且要确保键的唯一性(01,gddbq)这样的形式打印出来就是 01=gddbq
|–HashTable:底层是哈希表数据结构,不可以存入null键和null值,该集合线程是同步的,效率比较低。出现于JDK1.0
|–HashMap:底层是哈希表数据结构,可以存入null键和null值,线程不同步,效率较高,代替了HashTable,出现于JDK 1.2
|–TreeMap:底层是二叉树数据结构,线程不同步,可以用于个map集合中的键进行排序

14、什么是单例模式、你在项目中还用到了那些模式写出3种
答:一个类只有一个对象实例。还用到:工厂模式、代理模式、观察者模式

15、cookie和session的区别
答:cookie存在于浏览器中,session存在于服务器中;关闭服务器是session会清空、关闭客户端cookie不会立即清空;cookie相对于session不是特别安全;当访问量过大时,可以考虑将信息放到cookie中。

16、spring boot 和spring有何不同,是基于那些机制实现的
答:Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。他相比于spring,帮我们简化了很多配置;
基于注解实现的

17、treemap和hashmap区别
答:1、Hashmap适于在Map中插入删除定位元素;
2、Treemap适于按自然顺序或者自定义顺序遍历key;
3、hashmap比treemap要快一点,建议多使用Hashmap,在排序的时候使用treemap,
4、haspmap是非线程安全的,treemap是线程安全的
5、hashmap的结果是没有排序的,而treemap的输出结果是排好序的

18、list和set区别
答 1、list和set都是继承自collection接口;
2、list是有序的,可以存放重复的元素;set是无序的,不能放置重复的元素
3、Set迭代速度较快

19、linklist和arraylist的区别?arraylist扩容机制
答:arraylist是基于数组的数据结构,linkedlist是基于链表的数据结构;
对于查询数据,arraylist顺序要优于linkedlist;对于新增和删除数据,linkedlist的速度是要优于arraylist的;

20、事务特性
答:“一原十隔“:一致性、原子性、持久性、隔离性

21、怎么在hibernate和mybatis区别
答:hibernate和mybatis都是一种orm框架,其不同在于:hibernate更加面向对象,不需要写sql语句,都是直接对对象进行操作的hql语句,hibernate使用和配置也相对较为复杂;mybatis使用起来较为简单,不需要特别复杂的配置,但是对sql语句的要求较高;一般对于项目的抉择取决于项目本身,如果项目组的人都没用过hibernate和mybatis,我们选择mybatis,因为mybatis的学习成本较低,就现在市场形势看,越来越多的大公司都在渐渐偏向于使用mybatis

22、springMvc的注解有哪些
答:@controller、@requestmaping、@autowired、@component、@repository、@resource、@service

23、linux怎么读取文档
答:linux读取文档,使用vi命令进入文档,按i之后使得文档变为可编辑,修改完之后命令 ”:wq“进行保存更改之后的内容,”:q“强制退出

24、redis的使用场景
答:redis是一种常用的缓存,和mongodb不同,更偏向于是一种缓存,不是存储;
常用redis存放一些安全级别不是特别高的信息;
例如:会话缓存(商品的购物车信息)、全页缓存(存储一些页面信息)

25、简述下nginx怎么实现负载均衡
答:nginx是一个反向代理服务器,使用nginx实现服务器的负载均衡;使用redis实现服务器的session共享;反响代理服务器:是在服务器端,提供一个对外的统一代理服务器。配合多台tomcat服务器,即使一台服务器宕机了,也不会影响用户的正常使用

27、单实例多线程的问题,为什么多线程会引起安全问题
答:由于线程间是竞争关系,都去抢夺CPU资源,当多个线程同时访问一个数据时,有可能出现数据前后不一致的问题,就是线程同步问题

28、redis存储需要注意什么
答:数据不一致的问题,从数据库读取出来到存放到redis是存在一个时间差的,所以不要缓存那些对数据要求一致性很高的数据。

29、集群的原理
答:集群就是多个计算系统进行连接配置,高可用性(High Availability)集群,简称HA集群。其工作原理就是:多台主机一起工作,各自运行一台或几台服务,当一台服务器出现宕机时,会有其他主机接替服务器的任务

31、负载均衡中使用redis如何实现数据的共享
答:在配置中导入redis所需要的依赖并跟spring相结合,再对redis进行配置

32、在多线程中如何保证数据安全,如不使用同步如何实现
答:1、同步锁:Java提供了锁的进行来解决线程同步问题。
2、同步块:用法:synchronized(对象){
需要同步的代码
}
3、同步方法:
synchronized还可以修饰方法,整个方法都被上锁:

33、数据库sql性能测试(什么样的数据库查询语句效率高)
答:建立索引,使用索引查询效率高,但是使用索引需要注意的事项:在查询语句中不要使用!= ,要尽量的使用not null等设置;不要使用select * 等查询语句

34、数据库除去建立索引还能怎样优化
答:可以对数据库进行主从分区,设立主从分区会减轻数据库的压力,
避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。
使用连接(JOIN)来代替子查询
使用联合查询来代替手动创建的临时表
对sql语句进行优化

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。