学习笔记1

   参加工作一年多了, 但是总觉得技术没有什么长进,最近出去面试,总结出的面试的问题。开始面试的是一家小公司,问了项目的用的技术,我说了的git、maven、springMVC,mybatis, 以及dubbo方面的技术于是面试官的开始问了git方面的问题,如下图1所示:A版本->B版本->C版本, 当要回退到A版本的怎么回退,git命令:git reset --hard 版本号,然后git push,这时其他的开发者拉取你的分支会出现冲突,然后解决冲突,然后在push上去即可,

                 

                              图1 

   然后问了关于数据结构的问题: 一个单向链表,如图2所示,指针当前指向的时B节点,怎么删除B节点,当时以为直接由A指向C不就完了么,但是仔细一想应该不可能这么简单,果然我时无法获取A节点的指针的,所以不行,然后我想了半天,没有想出来,就直接说我没有想出来。

            图2 

     还好面试官人还是很好,并没有说啥,然后给我说了耐心的说了下思路,可以将C节点的值复制到B节点,然后将B节点的指针指向D节点,不就可以等价的转换为将B节点删除掉。思路确实很巧妙。如图3

                       如图3

   接着,他问了堆栈方面的问题: 有个很长的数组,如何实现三个堆栈,假如 A,B,C三个堆栈,一个函数传入堆栈名A,操作的是A堆栈的数据,问怎么实现?这个当时还是比较简单,我想了下,就说出了思路,堆栈头分别从数组的 0,1,2开始存,然后每个元素间隔2元素保存,如图4

                图4

     这次数据库的知识有点难的,写一个分组排名前几名的sql查询语句,有一张表是 (班级,姓名,成绩) , 求出每个班级的前三名的分数,开始思路是准备用group_concat函数去做的,但是这样就前三名写到一个字段里去,经过尝试还是没有写出来。 下面给个参考:

select a.*    from class as a

where (select count(*) from class as b where a.class_name = b.class_name and b.score < a.score) < 3
order by score;

查询结果类似下面:

`       spring的知识方面,是问了bean的作用域,当时只回答了其中的两个:singleton和prototype, 还有三种种: request和session、global session。

   1 singleton

   spring的bean的scope是单例对象,当一个bean的 作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把 一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例.

   配置实例:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>
或者
<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>

   2.prototype

  相对于singleton,prototype则是多例的,prototype作用域部署的bean,每一次请求调用注入时,则会产生新的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。 清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用 bean的后置处理器,该处理器持有要被清除的bean的引用。)

  配置实例:

<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>
或者
<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>

    3. request

  request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可: 
<web-app>
   ...
  <listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
   ...
</web-app>

接着既可以配置bean的作用域了: 

<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>
 4 .session
  session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效,配置实例:
  配置实例:
   和request配置实例的前提一样,配置好web启动文件就可以如下配置: 
  <bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>

  5、global session

  global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。
配置实例:
和request配置实例的前提一样,配置好web启动文件就可以如下配置: 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>

引用了这篇文章: http://www.cnblogs.com/qq78292959/p/3716827.html

未完待续

 

 

                

 

posted on 2016-10-10 09:09  xjz1842  阅读(633)  评论(7编辑  收藏  举报

导航