备份

http://bbs.youkuaiyun.com/topics/391978286
七、Nginx
1、Nginx如何配置作为图片服务器?
答:在nginx的conf/nginx.conf文件中,在server里再添加一个location并指定实际路径,
location /images/ {
    root  /home/ftpuser/www/;-->图片放置路径
    autoindex on;
}  
2、Nginx如何实现负载均衡?
答:负载均衡是用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,其原理很简单:一个nginx的worker处理监听句柄(一个标识符),当达到最大连接数的7/8时,本worker不会再试图拿锁建立连接,这样其他worker就有就有机会建立新连接了。
Nginx实现负载均衡的方式主要是轮询,weight ip_hash ,fair四种方式实现(按后端服务器的响应时间来分配请求,响应时间短的优先分配),只需配置upstream即可
upstream 域名{
    server 192.168.0.14;    
 server 192.168.0.15;
}
3、Nginx负载均衡如何实现session共享?
答:我熟悉的主要通过三种方式实现:
(1)、将需要共享的信息存入cookiecookie是存放在客户端的,安全性相对较低,如果客户端cookie信息较大,会加重服务器 的负担,更重要的一点是如果客户端关闭cookie,导致访问失败,会给网站或者应用系统带来损失。
(2)、将session存入redis缓存,当然也可以存入mysql、oracle等关系型数据库,但频繁读取,明显会加重关系型数据库的负担,得不偿失。
(3)、在upstream中配置ip_hash指令,ip_hash技术能够将某个ip的请求定向到同一台后端应用服务器,但值得注意的是nginx获取的ip一定要是真实的客户端ip,否则ip_hash就失效了。ip_hash实现如下:
upstream 域名{
    server 127.0.0.1:8080;    
 server 
127.0.0.1:8081
;
 ip_hash;
}
4、如何解决惊群现象?
答:所谓惊群现象是多个子进程在同一时刻监听同一个端口引起的,当这个事件发生时,这些线程/进程被同时唤醒,可以想见,效率很低下,
Nginx解决方法:同一个时刻只能有唯一一个子进程监听同一个端口。

八、redis
1、什么是redis?
答:Redis 是一个基于内存的高性能key-value数据库。 
2、redis有哪些特点?
答:Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,当然redis也有缺点,因为数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
3.redis分布式
答:redis支持主从的模式。原则:主会将数据同步到从,而从不会将数据同步到主。从启动时会连接主来同步数据。这是一个典型的分布式读写分离模型。我们可以利用主来插入数据,从提供检索服务。这样可以有效减少单个机器的并发访问数量。当然这种读写分离模型也会带来弊端,不管是Master(主)还是Slave(从),每个节点都必须保存完整的数据,如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力的限制。为了解决读写分离模型的缺陷,redis引入了数据分片模型,可以将每个节点看成都是独立的master,然后根据业务需要将每个master设计成由一个master和多个slave组成的模型。
4、 使用Redis有哪些好处?

(1) 速度快,因为数据存在内存中。

(2) 支持丰富数据类型,支持string,list,set,hash

(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。

(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除。

5、什么是redis的RDB备份和AOF备份?

答:首先RDB和AOF都可以进行数据备份,当两者可以共存时,二者是是协作,不会冲突,只不过首先启动找的是AOF,我们使用RDB进行保存时候,如果Redis服务器发送故障,那么会丢失最后一次备份的数据!而AOF方式可以规避这一问题,因为他是日志的形式来记录每个写操作,只许追加不许改写,所以要恢复数据,只需要把日志内容从头到尾执行一次就行了。

6、 redis常见性能问题和解决方案?

(1) Master最好不要做任何持久化工作。

(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次。

(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。

(4) 尽量避免在压力很大的主库上增加从库。

(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

7、 MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

答:我们可以使用对缓存数据进行定时,当redis数据大于20w条时对于多出的数据,更具业务需求设置合理的时间,超过这个时间限制的数据删掉,这样保持的数据永远都是热点。

8、怎么将session缓存到redis中

答:我是直接使用jredis类库中的方法,直接将session写入redis。

9、redis中的常用命令有哪些?

10、redis主从是怎么选取的 ? 

答:使用slaveof NO ONE命令,可以将slave切换成master。

11、redis主节点宕机了怎么办,还有没有同步的数据怎么办?

 答:redis主节点宕机,是相当危险的,切记不能尝试马上重启,这样会清空主从节点的所有数据,后果非常严重,正确做法是连上从库,做save操作,将会在从库的data目录保存一份从库最新的dump.rdb文件。将这份dump.rdb文件拷贝到主库的data目录下,再重启主库。当然这样恢复的前提是从库配置采用AOF备份模式。

九、http、https、tcp、udp协议

1、http协议

1.1、什么是Http协议无状态协议?怎么解决Http协议无状态协议?

答:1、无状态协议对于事务处理没有记忆能力。

2、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

1.2、说一下Http协议中302状态?

答:http协议中,返回状态码302表示重定向。

这种情况下,服务器返回的头部信息中会包含一个 Location 字段,内容是重定向到的url。

1.3、Http协议有什么组成?

答:http协议主要包括三部分:

a、请求行:包含请求方法、URI、HTTP版本信息

b、请求首部字段

c、请求内容实体

1.4、响应报文包含三部分:
 a、状态行:包含HTTP版本、状态码、状态码的原因短语
 b、响应首部字段
 c、响应内容实体

1.5、常用的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
 POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
 PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
 HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
 DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。

1.6、Http协议各部分字段参数?

答:(1)、通用首部字段(请求报文与响应报文都会使用的首部字段)

 Date:创建报文时间、Connection:连接管理、Cache-Control:缓存的控制、Transfer-Encoding:报文主体的传输编码方式。

 (2)、请求报文会使用的首部字段

 Host:请求资源所在服务器、Accept:可处理的媒体类型、Accept-Charset:可接收的字符集、

 Accept-Encoding:可接受的内容编码、Accept-Language:可接受的自然语言。

 (3)、响应报文会使用的首部字段

 Accept-Ranges:可接受的字节范围、Location:令客户端重新定向到的URI、Server:HTTP服务器的安装信息。

 (4)、请求报文与响应报文的的实体部分使用的首部字段

 Allow:资源可支持的HTTP方法、Content-Type:实体主类的类型、Content-Encoding:实体主体适用的编码方式、

 Content-Language:实体主体的自然语言、Content-Length:实体主体的的字节数。

1.7、Http协议有那些特征?

答:1、支持客户/服务器模式;2、简单快速;3、无连接;4、无状态;

1.请描述下https工作原理?

答:首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥

等进行校验;客户端如果校验通过后,就根据证书的有效公钥, 生成随机数,随机数使用公钥进行加密与服务端进行交互;

1.8、TCP与UDP有哪些区别?

答:(1)、TCP面向连接UDP是无连接的;

(2)、TCP提供可靠的服务UDP尽最大努力交付,但不保证可靠交付;

(3)、UDP具有较好的实时性,工作效率比TCP高,因为每一条TCP连接只能是点到点;UDP支持一对一,一对多,

  多对一和多对多的交互通信;

(4)、TCP对系统资源要求较多,UDP对系统资源要求较少。

1.9、什么是TCP粘包现象?

答:TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

2.0、为什么出现粘包现象?

答:(1)、发送方原因:TCP默认会使用Nagle算法。而该算法会收集多个小组,在一个确认到来时一起发送,这样就可能产生粘包。

  (2)、接收方原因:如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多

 个首尾相接粘到一起的包。

2.1、如何处理粘包现象?

答:发送方处理:关闭Nagle算法;或者接收方处理:发送每条数据的时候,将数据的长度一并发送,循环读取数据,直到所有的数据都被处理。

十、Jsp和Servlet

1、Jsp

1.1、解释Jsp的生命周期?

答:(1)、编译阶段:servlet容器编译servlet源文件,生成servlet类;

 (2)、初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法;

 (3)、执行阶段:调用与JSP对应的servlet实例的服务方法;

 (4)、销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例;

1.2、Jsp有哪九大Jsp内置对象?

答:Request,Response,Out,Session,Application,Cookie,Config,Page,Exception。

2、Servlert

2.1、说一说Servlet生命周期?

答:Servlet生命周期包括三部分:

初始化:Web容器加载servlet,调用init()方法;

处理请求:当请求到达时,运行其service()方法;

销毁:服务结束,web容器会调用servlet的distroy()方法,销毁servlet。

十一、Spring

1、IOC容器

1.1、什么是控制反转(IOC)?什么是依赖注入?

答:IOC不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在对象内部直接控制。而所谓的反转是由于容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象。依赖注入由容器动态的将某个依赖关系注入到组件之中依赖注入的目的就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

1.2、谈谈你个人对IOC的理解?

答:在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。即对象之间的依赖转换成了对IOC容器的依赖,从而完成对象之间的解耦。

1.3、请解释下Spring框架中的IoC?

答:Spring中的 org.springframework.beans 包和 org.springframework.context包构成了Spring框架IoC容器的基础。org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理各种bean。BeanFactory接口是Spring IoC 容器的核心接口。我们通过IOC容器把对象的创建、初始化、销毁交给spring来管理,而不是由开发者控制,实现控制反转,达到了对象之间解耦的目的。

2、aop

2.1、什么是aop,为什么要使用aop?

答:aop即为面向切面编程,aop实现原理其实是java动态代理,但是jdk的动态代理必须实现接口,所以我们又引入了cglib这个类库,,所以可以做到不实现接口的情况下完成动态代理。使用aop的目的很简单,就是让我们编程时只关注主流业务逻辑的编写,对那些需要但又不是主流业务的内容用aop实现,比如日志,事务等等。

2.2、Spring的AOP两种代理方式?

答:Spring的AOP实现代理的方式有两种,一种是采用JDK动态代理,此种代理方式是Spring的默认代理方式,另外一种则是引入CGLIB类库实现动态代理。

(1)、JDK动态代理:JDK动态代理只能对实现了接口的类生成代理,而不能针对类,因为JDK动态代理是利用反射机制生成一个实现代理接口的匿名类来实现的。

(2)、cglib动态代理:是将代理对象类的class文件加载进来,通过修改其字节码生成子类来实现,因为cglib存在继承关系,所以要被代理的类或方法最好不要声明成final 

2.3、aop中的通知、连接点、切点、切面,有什么作用?

答:(1)、通知:就是你想要的功能,比如日志、事物等;

 (2)、连接点:就是spring允许通知的地方,基本每个方法的前、后,或抛出异常是时都可以是连接点;

(3)、切点:切点用来筛选连接点,选中自己想要干预的方法;

(4)、切面:切面是通知和切入点的结合;

(5)、织入:通过代理把切面应用到目标对象。

2.4、简要描述spring aop的五种同志类型?

答:(1)、前置通知@Before:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常;

(2)、正常返回通知@AfterRunning在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行;

(3)、异常返回通知@AfterThrowing在连接点抛出异常后执行;

(4)、后置通知@After在连接点执行完成后执行;

(5)、环绕通知@Around :围绕在连接点前后,也就是在切点前后均可执行。

2.5、谈谈Spring中aop切点表达式execution()函数的使用?

答:比如:execution (* com.sample.service.impl..*.*(..))

(1)、第一个*号:表示返回类型,*号表示所有的类型;

(2)、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包;

 (3)、第二个*号:表示类名,*号表示所有的类;

  (4)、*(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数;

(5)、多个execution(),则用 ||进行并列,比如execution(* com.edf..*.*(..)) || execution(* com.abc..*.*(..))。

3、解释下Spring的@Qualifier、@Require、@Autowired、@Resource

答:(1)、@Qualifier:一个类有多个实例时使用 @Quanlifier注解,可以告诉Spring容器要装配哪个bean;

(2)、@Required:只能设置在setter方法上,进行注解检查 但他只检查属性是否已经设置而不会测试属性是否非空;

(3)、@Autowired:按照类型(byType)装配依赖对象;

(4)、@Resource:默认按照ByName自动注入 ,如果没有找到相同名称的Bean,则会按照byType(类型)进行 匹配。

4、请解释自动装配模式的区别?

答:我在Spring框架中共使用3种方式进行自动装配:

(1)、no:这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系;

(2)、byName:根据bean名称设置依赖关系;

(3)、byType:该选项可以根据bean类型设置依赖关系;

5、Spring实例化Been的三种方式?

答:(1)、使用构造器实例化been,如果构造方法有参数,则使用constructor-arg赋值

<bean id="" class="">
     <constructor-arg name="name" value=""/>
 </bean>    (2)、使用静态工厂方法创建bean,除了需要指定class属性外,还需要通过factory-method属性来指定创建bean实例的工厂方法
值得注意的是factory-method
所指定的方法必须为静态方法:

<bean id="" class="" factory-method="静态方法">
     <constructor-arg name="name" value=""/>
 </bean>
  (3)、使用实例工厂创建been,factory-bean来指定实例化的been名称, factory-method 属性来设定要调用的方法

<!--实例化工厂实例化bean  -->
 <bean id="instancefactory" class=""/>
<bean id="" factory-bean="instancefactory" factory-method="">
     <constructor-arg name="" value=""/>
 </bean>

6、SpringMVC

6.1、简单描述SpringMVC工作原理?

答:客户端向web服务器发送一个http请求,web服务器对http请求进行解析,解析后的URL地址如果匹配了DispatcherServlet的映射路径,web容器就将请求交给DispatcherServlet处理;DispatcherServlet接收到这个请求后,再对URL进行解析,得到请求资源标识符,然后调用相应方法得到的HandlerMapping对象,调用这个对象的相应方法获得Handler对象以及它对应的拦截器;在拦截器方法中,提取请求中的数据模型,Handler执行完毕后返回一个ModelAndView对象给DispatcherServlet并渲染成视图返回给客户端。

6.2、如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

答:以在@RequestMapping注解里面加上method=RequestMethod.GET

6.3、SpringMVC拦截器是怎么实现的?

答:可以通过实现HandlerInterceptor接口实现,重写preHandle()和afterCompletion()方法,preHandle()方法在进入Handler方法之前执行,主要用于身份认证、身份授权等,afterCompletion()方法在执行Handler完成后执行,可以用来处理异常和日志;当然使用aop也可实现。

6.4、拦截器与过滤器的区别 ?

答:(1)、拦截器是基于java的反射机制的,而过滤器是基于函数回调;

     (2)、拦截器不依赖与servlet容器,过滤器依赖与servlet容器;

    (3)、 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用; 

     (4)、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问;

     (5)、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

十二、jdbc和mybatis

1、jdbc的操作流程?

答:(1)、装载驱动Class.forName();

 (2)、建立连接DriverManager.getConnection(url, user, password);

(3)、建立预编译对象conn.prepareStatement(sql);

(4)、执行操作

  • execute(String sql):运行语句,返回是否有结果集
  • executeQuery(String sql):运行select语句,返回ResultSet结果集。
  • executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
  • addBatch(String sql) :把多条sql语句放到一个批处理中。
  • executeBatch():向数据库发送一批sql语句执行。
2、#{}和${}的区别是什么?

答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,能被sql注入,

#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,

按序给sql的?号占位符设置参数值,进行预编译。

  3、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标?

 答:还有很多其他的标签,<resultMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,

 trim|where|set|foreach|if|choose|when|otherwise|bind等,其中<sql>为sql片段标签,通过<include>标签引入sql片段,

 <selectKey>为不支持自增的主键生成策略标签。

4、最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中的id值,接口方法内的参数,

就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位Dao接口里的方法,是不能重载的,

因为是全限名+方法名的保存和寻找策略。

Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理对象,代理对象会拦截接口方法,转而执行映射的sql,然后将sql执行结果返回。

5、Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?

答:Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,

Mybatis提供了9种动态sql标签trim|where|set|foreach|if|choose|when|otherwise|bind。

其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。、

6、Mybatis中如何执行批处理?
 答:使用BatchExecutor完成批处理。

7、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

答:Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,

collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。

它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器进行延时加载

8、Mybatis都有哪些Executor执行器?它们之间的区别是什么?

答:Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。

(1)、SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。

(2)、ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,

 不关闭Statement对象,而是放置于Map<String, Statement>内,供下一次使用。简言之,就是重复使用Statement对象。

(3)、BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),

等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行

executeBatch()批处理。与JDBC批处理相同,但没有jdbc效率高。

作用范围:Executor的这些特点,都严格限制在SqlSession生命周期范围内。

9、Mybatis中如何指定使用哪一种Executor执行器?

答:在Mybatis配置文件中,可以指定默认的ExecutorType执行器类型,value的值可取SIMPLE、REUSE、BATCH

比如: <setting name="defaultExecutorType" value="SIMPLE" /> 

10、Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义
在A标签的前面?

答:虽然Mybatis解析Xml映射文件是按照顺序解析的,但是,被引用的B标签依然可以定义在任何地方,Mybatis都可以

正确识别。原理是,Mybatis解析A标签,发现A标签引用了B标签,但是B标签尚未解析到,尚不存在,此时,Mybatis会

将A标签标记为未解析状态,然后继续解析余下的标签,包含B标签,待所有标签解析完毕,Mybatis会重新解析那些被标记

为未解析的标签,此时再解析A标签时,B标签已经存在,A标签也就可以正常解析了。

11、讲下MyBatis的缓存?
        答:MyBatis的缓存分为一级缓存和二级缓存, 一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认

是打开的,使用二级缓存属性类需要实现Serializable序列化接口用来保存对象的状态。

十三、WebService

1、WebService到底是什么,请简述其调用原理?

 答:WebService是一种跨编程语言和跨操作系统平台的远程调用技术;

WebService的工作调用原理:对客户端而言,我们给WebService客户端API传递wsdl文件的url地址,这些API就会创建出

底层的代理类,我调用这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP

协议发出去,并把接收到的soap数据变成返回值返回。对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远

程调用客户端给它通过http协议发送过来soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去

查找或创建这个对象,并调用其方法,再把方法返回的结果包装成soap格式的数据,通过http响应消息回给客户端。

2、如何选择采用哪种风格的Web service?SOAP还是REST?

答:要回答这个问题首先要分清楚两种风格的特点,对于SOAP风格的WebService而言,是一个严格定义的信息交换协议,适用于安全性和

事务处理可靠性方面要求比较高的服务中,比如银行账户与账户间的相互转账,而REST风格的WebService相对于SOAP风格更加轻量级,由于

REST是标准的HTTP访问,其适用性更广,web应用,移动应用都可以在不使用第三方库的情况下方便地使用REST接口构造应用程序,

由于REST根据设计原则,接口是无状态的,REST风格的WebService适合无状态CRUD操作

3、什么是REST风格,什么是SOAP风格?

答:restful风格:就是一种面向资源服务的API设计方式,其特点为统一资源接口 、无状态、易于扩展;

SOAP风格:SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。

4、SOAP风格的WebService三要素?

答:(1)、UDDI:即统一描述、发现和整合规范。用来注册和查找服务,把web services收集和存储起来,这样当别人访问

这些信息的时候就从UDDI中查找,看有没有这个信息存在;

(2)、SOAP: 基于HTTP协议,采用XML格式,用来传递信息的格式;

(3)、WSDL: 用来描述如何访问具体的服务。

5、你的系统中是否有使用到webservice开发?具体是怎么实现的?遇到过什么问题?

答:。。。回去看看项目整理。。。

十四、netty

http://blog.youkuaiyun.com/baiye_xing/article/details/76735113

1.BIO、NIO和AIO的区别?
  • BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。
  • NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
  • AIO:一个有效请求一个线程,客户端的I/O请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理,

  • BIO是面向流的,NIO是面向缓冲区的;BIO的各种流是阻塞的。而NIO是非阻塞的;BIO的Stream是单向的,而NIO的channel是双向的;

  • NIO的特点:事件驱动模型、单线程处理多任务、非阻塞I/O

  • 在Reactor模式中,首先是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers,

    这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler。

    2.NIO的组成?
    • Buffer:与Channel进行交互,数据是从Channel读入缓冲区,从缓冲区写入Channel中的

      • flip方法 : 反转此缓冲区,将position给limit,然后将position置为0,其实就是切换读写模式
      • clear方法 :清除此缓冲区,将position置为0,把capacity的值给limit。
      • rewind方法 : 重绕此缓冲区,将position置为0
    • Channel:表示 IO 源与目标打开的连接,是双向的,但不能直接访问数据,只能与Buffer 进行交互;

    • Selector可使一个单独的线程管理多个Channel,open方法可创建Selector,register方法向多路复用器注册通道;

    • NIO的服务端建立过程:Selector.open():打开一个Selector;ServerSocketChannel.open():创建服务端的Channel

      bind():绑定到某个端口上。并配置非阻塞模式;register():注册Channel和关注的事件到Selector上;select()轮询拿

      到已经就绪的事件。

      3.Netty的特点?
      • 一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持;
      • 使用更高效的socket底层,对epoll空轮询引起的cpu占用飙升在内部进行了处理;
      • 采用多种编码/解码支持,对TCP粘包/分包进行自动化处理;
      • 可使用接受/处理线程池,提高连接效率;
      • 使用单线程串行化的方式,高效的Reactor线程模型;
      • 大量使用了volitale、线程安全类的使用、读写锁的使用。
      4、 TCP 粘包的解决方法?
      答:(1)、消息定长;
       (2)、包尾增加特殊字符分割;
      (3)、将消息分为消息头和消息体。
      5、谈谈为什么nio能够实现一个线程处理多个事务?

      答:一个selector监听多个通道,nio处理的多个事件都在Selector上进行注册,当有读写或任何事件发生时,可以从

      Selector中获得响应的Selectkey,同时从selectkey中可以找到发生的时间和该事件发生的具体的Channel,以获得客户

      端发送的请求数据;

      十五、RabbitMQ

      1、简述RabbitMQ的基本原理?

      答:RabbitMQ是MQ产品的典型代表,是一种分布式应用程序的的通信方法,RabbitMQ是典型的消费-生产者模型,其系统最核心

      的组件是Exchange和Queue位于服务端,而producer和consumer在应用端。

      (1)、Queue的三种形式:设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止数据丢失;

      设置为临时队列,queue中的数据在系统重启之后就会丢失;

      置为自动删除的队列,当不存在用户连接到server,队列中的数据会被自动删除。

      (2)、Exchange的种类型:Direct直接交换器,Exchange会将消息发送完全匹配ROUTING_KEY的Queue;

            fanout广播式交换器,Exchange都会将消息转发给所有绑定的Queue;

       topic主题交换器,Exchange会将消息转发给和ROUTING_KEY匹配模式相同的所有队列,

      其中* 表是匹配一个任意词组,#表示匹配0个或多个词组。

      2、简述RabbitMQ的通信过程?

      答:(1)、P1生产消息,发送给服务器端的Exchange;

      (2)、Exchange收到消息,根据ROUTINKEY,将消息转发给匹配的Queue1;

      (3)、Queue1收到消息,将消息发送给订阅者C1;

      (4)、C1收到消息,发送确认字符给队列确认收到消息;
      (5)、Queue1收到确认字符,删除队列中缓存的此条消息。

      3、RabbitMQ的应用场景有哪些?

      答:异步处理、应用解耦、流量削峰。

      4、请谈谈RabbitMQ在你项目中的使用?

      答:在银行的跨行转账业务中,比如A账户向B账户转账,如果A账户扣款成功了,而由于故障B账户到款失败,如果不对A账户的操作

      进行回滚,那就麻烦了,此外同一时间如果有大量的人转账汇款,如果采用同步通信,很可能造阻塞,这两种场景就非常适合RabbitMQ。

      十六、dubbo

      1、谈谈dubbo的工作原理?

      答:Dubbo的架构由生产者、消费者、注册中心、监视器、以及服务器的运行容器组成;生产在启动时,向注册中心注册自己提供的服务;消费者启动时,向注册中心订阅自己所需的服务;注册中心返回提供者地址列表给消费者,如果有变更,注册中心将推送变更数据给消费者;消费者,从远程接口列表中,调用远程接口,dubbo会基于负载均衡算法,选一台提供者进行调用,如果调用失败则选择另一台;消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

      Good moring,

      It is really my honor to have this opportunity for an interview,
      my name is gongli ,
       I graduated from Southwest Jiaotong university in two thousand and fourteen,so far,I have done some projects,for exampe

      material purchase,Human Resource Management system,

      Pisolite Loan,

      Ping an Bank small Enterprise Financial Service platform,

      I familiar with spring、mybatis,redis,rabbitmq,dubbo,and so on








 






 










  





分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳和通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是一种频率随时间线性变化的信号,因其具有宽频带和良好的时频分辨率,被广泛应用于雷达和通信系统。FRFT能够更精准地捕捉LFM信号的时间和频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是一种强大的数值计算和科学计算工具,拥有丰富的函数库和用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,一个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号与经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率和持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间和采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域和频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析和处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值