面试总结

今天面试了三家公司,总结一下面试题目。

1.Redis是什么,干什么用的,有什么优缺点(浅谈)?

答:Redis是什么?

       Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、key-Value数据库,并提供多中语言的API。从2010年起,Redis的开发由VMware主持。从2013年5月份开始,Redis的开发由Pivota赞助。

       Redis本质上也是一种键值数据库,但是它在保持键值数据库简单快捷的同事,又吸收了部分关系数据库优点。从而使他的位置处于关系数据库和键值数据之间。Redis有5种数据结构:String、hash(哈希)、List类型(有序)、Set类型(无序)及zset(sorted set:有序集合)。

      Redis用来做什么?

      通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求,而通常在一个点上类型的数据处理过程中,有关商品、热销、推荐排序的队列,通常存放在Redis之中,期间也包括Storm对于Redis列表的读取和更新。

     Redis的优点?

    性能极高:Redis能支持超过100k+每秒的读写频率。

    丰富的数据类型:Redis支持二进制案例的String、List、Hashes、Sets及Ordered Sets数据类型操作

    原子:Redis的所有操作都是原子性的,同事Redis还支持对几个操作全并后的原子性执行。

    丰富的特征:Redis还支持publish、subscribe,通知、key过去等等特征。

    Redis的缺点?

    是数据库容易受到物理内存的限制,不能用作海量数据的高性能读写。因此Redis适合的场景主要局限在较小的高性能操作和运算上。

    Redis缓存(Redis一般应用场景)?

    假如系统有2千万用户信息,用户信息基本固定,一旦录入很少变动,那么每次加载所有用户信息时,都要请求数据库,数据库编译并执行你的查询语句,这样就会降低效率,针对这中信息不经常变动并且数据量较大的情况,通常做法,就是把他加入缓存,每次取数前先去判断,如果缓存不为空,那么就从缓存取值,如果为空,再去请求数据库,并将数据如缓存,这样就大大提高系统访问效率。

2.Nginx是什么,干什么用的,有什么优缺点?

答:Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件代理服务器,并在一个BSD-like协议下发行。

优点:1.轻量级、同样作为web服务,比apache占用更少的内存及资源

          2.抗并发,nginx处理请求时异步非阻塞,而apache则是阻塞型,在高并发下Nginx能保持低资源低消耗高性能

          3.高度模块化设计,编写模块相对简单

          4.社区活跃,各种高性能模块出品迅速

          5.Nginx本身就是一个反向代理服务器

          6.Nginx支持7层负载均衡

          7.nginx适合做静态、简单、效率高

apache相对nginx的优点:

          1.rewrite,比nginx的rewrite强大

          2.模块超多,基本想到的都可以找到

          3.少bug、nginx的bug相对比较多

          4.超稳定

          5.apache适合做动态、稳定、功能强

3.springMVC原理?

答:Spring MVC是Spring框架一个非常重要的功能模块,实现MVC结构,便于简单、快速开发MVC结构的Web程序。

       1.用户发送请求至前端控制器DispatcherServlet;

       2.DispatcherServlet收到请求调用HandlerMapper处理映射器;

       3.处理器映射器找到具体的处理器Controller(可以根据xml配置、注解进行查找)。生成处理器对象及拦截器(如果有则生成)一并返回给DispatcherServlet.

       4.执行Controller组件约定方法处理请求,在约定方法调用模型组件完成业务处理。约定方法返回一个ModelAndView对象,封装了处理结果数据和视图名称信息。

       5.控制器接受ModelAndView之后,调用ViewResolver(视图解析器),定位View(JSP)并传递数据信息,生成响应界面结果。

4.spring有什么,流程是什么?


答:Spring框架有6个模块组成,这6个模块均可以单独存在。

       Spring核心容器IOC(Core):

      提供Spring框架的基本功能,核心容器的主要组件是BeanFactory,她是工厂模式的实现,BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开;

       Spring AOP:

       通过配置管理特性,SpringAOP模块直接面向方面的编程功能集成到Spring框架中,所以可以很容易的使用Spring框架管理的任何对象支持AOP。SpringAOP模块为基于Spring的应用程序中的对象提供了食物管理服务,通过使用SpringAOP,不用依赖EJB组件,就可以将声明性事物管理集成到应用程序中。

       Spring ORM:

       Spring框架集成了若干ORM框架,从而提供了ORM的对象关系工具,包括JDO、Hibernate、Ibatis和TopLink,所有这秀都遵从Spring的通用食物和DAO异常层结构。

       Spring DAO:

       JDBC DAO抽象层提供了有意义的异常层次的结构,可用该结构来管理异常处理和不同数据供应商抛出的异常错误信息,异常层次结构简化了错误处理,并且大大的降低了需要编写的异常代码数量;如:打开个关闭连接。

        Spring WEB

        Web上下文模板建立在上下文模板(Context)的基础之上,为基于Web服务的应用程序提供了上下文服务,所以Spring框架支持Jakarta Struts的继承。Web模板还简化了处理多部分请求及将请求参数绑定到域对象的工作。

        Spring上下文(Context)

        Spring上下文是一个配置文件,向Spring框架提供上下文信息,Spring上下文包括企业服务,如:JNDI、EJB、电子邮件、国际化校验和调度功能。 

5.MyBatis的连接池怎么配置,XML文件怎么写?

    <!--配置dataSource;数据库的配置可以写在properties文件中,方便后续的修改-->

       <bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">

            <property name="driverClassName"  value="com.mysql.jdbc.Driver"/>

            <property name="url"  value="jdbc:mysql://IP:3306/用户名"/>

            <property name="username" value="用户名"/>

            <property name="password" value="密码"/>

        </bean>

        <!--定义SqlSessionFactoryBean-->

        <bean id="ssf" class="org.mybatis.spring.SqlSessionFactoryBean">

                <!--指定dataSource-->

                <property name="dataSource" ref="dbcp"/>

                <!--指定SQL定义文件-->

                <property name="mapperLocations" value="classpath:mapper/*.xml"/>

        </bean>

        <!--定义MapperScanner-->

        <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 指定Mapper接口;     value里面指定是的dao包的路径 -->
		<property name="basePackage" value="com.*.dao">
		</property>		
	</bean>

6.浅谈Collection框架?


答:集合,或者叫容器,是一个包含多个元素的对象,可以对数据进行存储、检索、操作;

       它们可以把许多个体组织成一个整体:比如扑克牌(许多牌组成的集合);

优点:编码更轻松:Java集合框架为我们提供了方便使用的数据结构和算法,让我们不用从头来,直接操心上层就行。

          代码质量更好:Java集合框架经过几次升级,数据结构和算法性能已经优化的很棒了。

          减少学习新的API:有了标准的Java集合框架,每个API都集成自己顶层API,只负责具体实现。

遍历Collection的几种方式:

        1.for-each

    Collection<Person> persons = new ArrayList<Person>();

        for(Person person : person){

                System.out.println(person.name);

        }

        2.使用iterator迭代器    

    Collection<Person> persons = new ArrrayList<Person>();

        Iterator iterator = person.iterator();

        while(iterator.hasNext){

            System.out.println(iterator.next);

        }

       3.使用aggregae operations聚合操作

    Collertion<Person> persons = new ArrayList<Person>();

         persons.stream().forEach(new Consumer<Person>(){

                @Override

                public void accept(Person person){

                    System.out.println(person.name);

                }

        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值