新东方面试知识点记录

3.spring mvc 怎么接受http  post 方式提交过来的xml数据?servlet中怎么接受?

 @RequestMapping(value="/jsonPrase", headers = {"content-type=application/json","content-type=application/xml"}) 
        @ResponseBody 
        public Object addUser(@RequestBody MsgTip tip) { 

4.8个常用的http状态吗及其含义

 成功2××          成功处理了请求的状态码。
200                   服务器已成功处理了请求并提供了请求的网页。
204                   服务器成功处理了请求,但没有返回任何内容。                         
重定向3××       每次请求中使用重定向不要超过 5 次。
301                   请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。
302                   请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。
304                   如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。
客户端错误4××  表示请求可能出错,妨碍了服务器的处理。
400                    服务器不理解请求的语法。
403                    服务器拒绝请求。
404                    服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。
410                    请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 代码。如果资源已永久删除,应当使用 301 指定资源的新位置。
服务器错误5××   表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
500                     服务器遇到错误,无法完成请求。
503                     服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。

5.说说对java nio的理解

Java NIO 由以下几个核心部分组成:

  • Channels
  • Buffers
  • Selectors

6.mysql 的jdbc driver 是怎么注册到DriverManager中的

7.dubbo中异步调用怎么配置?怎么取消依赖服务的启动时检查?

<dubbo:reference id="demoServicemy2"   interface="com.test.dubboser.ServiceDemo2">  

     <dubbo:method name="getPerson" async="true" />  

</dubbo:reference>  

关闭某个服务的启动时检查:(没有提供者时报错)
<dubbo:reference interface="com.foo.BarService" check="false" />
关闭所有服务的启动时检查:(没有提供者时报错)
<dubbo:consumer check="false" />
关闭注册中心启动时检查:(注册订阅失败时报错)
<dubbo:registry check="false" />

 

8.怎么通过zookerper 实现leader选择?请写出步骤

具体步骤

1、客户端连接时,在指定的目录(这里假定为"/leader")创建一个EPHEMERAL_SEQUENTIAL的节点,把内网的IP数据存入创建节点。
2、获取目录的子点节,并取得序列号最小的节点,我们把这个节点设置为leader。当此节点被删除时,证明leader断线。
3、其它机器监听leader节点,当leader节点的删除时,再取目录的最小子点节作为leader。

9.maven profile怎么配置?引用场景是什么?

   mvn clean package -Pdev即构建出生产环境需要的war包

10.MAVEN中怎么实现在发布时候编译测试代码?但不执行测试用例?

在编译的时候,加上"-Dmaven.test.skip=true"参数就好了

如果是eclipse执行maven命令,可以配置该命令:Run as->Run Configurations->勾上Skip Tests

11.git中怎么修改最后一次提交点的说明信息

11.linux中怎么杀死占用80端口的进程

第一步,输入命令:netstat -tlnp
列出系统里面监听网络的TCP连接和相应的进程PID。
参数说明:
-t:表示列出TCP连接
-l:表示列出正在网络监听的服务
-n:表示以端口号来显示
-p:表示列出进程PID
kill -9 某个PID

12.kill 1234  kill -0 1234 kill -3 1234 kill -9 1234 区别

kill 杀死进程

命令格式 kill -3 pid

kill -3 pid)用来打印Java进程trace,并不会影响程序运行,不用担心他把程序杀死了;

kill -10 pid可触发进程进行一次强制GC。

kill -0 pid 不发送任何信号,但是系统会进行错误检查。
所以经常用来检查一个进程是否存在,存在返回0;不存在返回1  

kill -9强行杀死进程

13 。前序 中序 然后答后序   前序是:根左右 中序: 左根右 后序:左右根

14.redis注意事项redis击穿和redis高并发处理

缓存使用.png

缓存击穿:
  查询一个数据库中不存在的数据,比如商品详情,查询一个不存在的ID,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成过大地压力。

缓存击穿的解决方案:
  当通过某一个key去查询数据的时候,如果对应在数据库中的数据都不存在,我们将此key对应的value设置为一个默认的值,比如“NULL”,并设置一个缓存的失效时间,这时在缓存失效之前,所有通过此key的访问都被缓存挡住了。后面如果此key对应的数据在DB中存在时,缓存失效之后,通过此key再去访问数据,就能拿到新的value了。

缓存失效:
  在高并发的环境下,如果此时key对应的缓存失效,此时有多个进程就会去同时去查询DB,然后再去同时设置缓存。这个时候如果这个key是系统中的热点key或者同时失效的数量比较多时,DB访问量会瞬间增大,造成过大的压力。

缓存失效的解决方案:

  • 将系统中key的缓存失效时间均匀地错开,防止统一时间点有大量的key对应的缓存失效;
  • 重新设计缓存的使用方式,当我们通过key去查询数据时,首先查询缓存,如果此时缓存中查询不到,就通过分布式锁进行加锁,取得锁的进程查DB并设置缓存,然后解锁;其他进程如果发现有锁就等待,然后等解锁后返回缓存数据或者再次查询DB。

热点key:
  缓存中的某些Key(可能对应用与某个促销商品)对应的value存储在集群中一台机器,使得所有流量涌向同一机器,成为系统的瓶颈,该问题的挑战在于它无法通过增加机器容量来解决。

热点key的解决方案:

    • 客户端热点key缓存:将热点key对应value并缓存在客户端本地,并且设置一个失效时间。对于每次读请求,将首先检查key是否存在于本地缓存中,如果存在则直接返回,如果不存在再去访问分布式缓存的机器。
    • 将热点key分散为多个子key,然后存储到缓存集群的不同机器上,这些子key对应的value都和热点key是一样的。当通过热点key去查询数据时,通过某种hash算法随机选择一个子key,然后再去访问缓存机器,将热点分散到了多个子key上。

15.JVM oom内存溢出怎么处理

   

三,常见内存溢出错误解决办法

1,   OutOfMemoryError异常

除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能,

Java Heap 溢出

一般的异常信息:java.lang.OutOfMemoryError:Java heap spacess

java堆用于存储对象实例,我们只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,就会在对象数量达到最大堆容量限制后产生内存溢出异常。

出现这种异常,一般手段是先通过内存映像分析工具(如Eclipse Memory Analyzer)对dump出来的堆转存快照进行分析,重点是确认内存中的对象是否是必要的,先分清是因为内存泄漏(Memory Leak)还是内存溢出(Memory Overflow)。

如果是内存泄漏,可进一步通过工具查看泄漏对象到GC Roots的引用链。于是就能找到泄漏对象时通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自动回收。

如果不存在泄漏,那就应该检查虚拟机的参数(-Xmx与-Xms)的设置是否适当。

2,   虚拟机栈和本地方法栈溢出

如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。

如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常

这里需要注意当栈的大小越大可分配的线程数就越少。

3,   运行时常量池溢出

异常信息:java.lang.OutOfMemoryError:PermGen space

如果要向运行时常量池中添加内容,最简单的做法就是使用String.intern()这个Native方法。该方法的作用是:如果池中已经包含一个等于此String的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。由于常量池分配在方法区内,我们可以通过-XX:PermSize和-XX:MaxPermSize限制方法区的大小,从而间接限制其中常量池的容量。

4,   方法区溢出

方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。

异常信息:java.lang.OutOfMemoryError:PermGen space

方法区溢出也是一种常见的内存溢出异常,一个类如果要被垃圾收集器回收,判定条件是很苛刻的。在经常动态生成大量Class的应用中,要特别注意这点。

 

16.cdn怎么加速和怎么缓存

动态内容分发与复制技术
      大家都知道,网站访问响应速度取决于许多因素,如网络的带宽是否有瓶颈、传输途中的路由是否有阻塞和延迟、网站服务器的处理能力及访问距离等。多数情况下,网站响应速度和访问者与网站服务器之间的距离有密切的关系。如果访问者和网站之间的距离过远的话,它们之间的通信一样需要经过重重的路由转发和处理,网络延误不可避免。一个有效的方法就是利用内容分发与复制技术,将占网站主体的大部分静态网页、图像和流媒体数据分发复制到各地的加速节点上。所以动态内容分发与复制技术也是CDN所需的一个主要技术。

缓存技术
       缓存技术已经不是一种新鲜技术。Web缓存服务通过几种方式来改善用户的响应时间,如代理缓存服务、透明代理缓存服务、使用重定向服务的透明代理缓存服务等。通过Web缓存服务,用户访问网页时可以将广域网的流量降至最低。对于公司内联网用户来说,这意味着将内容在本地缓存,而无须通过专用的广域网来检索网页。对于Internet用户来说,这意味着将内容存储在他们的ISP的缓存器中,而无须通过Internet来检索网页。这样无疑会提高用户的访问速度。CDN的核心作用正是提高网络的访问速度,所以,缓存技术将是CDN所采用的又一个主要技术。

17.分布式锁

 

posted @ 2017-05-10 14:55  那家那人那小伙  阅读(521)  评论(0编辑  收藏  举报