面试记录

记某次“悲惨”的面试经历:

一、正向代理和反向代理(当时提到nginx,然后。。。)

  正向代理:常见场景,访问google页面,需要使用代理服务器(梯子),向代理服务器(梯子)发送请求和指定目标(google),然后代理服务器(梯子)向指定目标(google)发起请求,并将请求结果返回给客户端。(客户端需要进行特别的设置)

      用途:

      1)访问原来无法访问的资源,如google

           2) 可以做缓存,加速访问资源

        3)对客户端访问授权,上网进行认证

        4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

  反向代理:代理服务器接受客户端发起的请求,然后将请求转发给内部其他服务器,最后将请求结果返回给客户端。

      用途:

      1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。

      2)负载均衡,通过反向代理服务器来优化网站的负载

二、同步和异步

   举个例子:普通B/S模式(同步)AJAX技术(异步)
  同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
  异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

三、dubbo(未完待续)

  Dubbo |是一个由阿里巴巴开源的、分布式的RPC(Remote Procedure Call Protocol-远程过程调用)和微服务框架

  Dubbo提供了三个关键功能:基于接口的远程调用,容错与负载均衡,服务自动注册与发现。

四、进程和线程

    进程是操作系统资源分配的基本单位

    线程是任务调度和执行的基本单位  

  • 在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
  • 所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
  • 内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
  • 包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻量级进程。

五、三次握手和四次挥手(TCP协议)

  三次握手:

  • 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
  • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
  • 客户端–发送带有 ACK 标志的数据包–三次握手–服务端

    四次挥手:

  • 客户端 -- -发送一个 FIN,用来关闭客户端到服务器的数据传送 – 一次挥手 – 服务端(告诉服务端要断开连接了)
  • 服务端 -- 收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号 --二次挥手 -- 客户端(服务端回应收到)
  • 服务端 --关闭与客户端的连接,发送一个FIN给客户端 -- 三次挥手 -- 客户端(服务端数据传输完毕,告诉客户端:“我也要断开连接了”)
  • 客户端 -- 发回 ACK 报文确认,并将确认序号设置为收到序号加1-- 四次挥手 --服务端

  客户端和服务端是相对的说法,两边都可以发起断开请求,暂且认为哪边提起断开就是客户端

六、HTTPS和HTTP的区别

    http是超文本传输协议在互联网上应用最为广泛的一种网络协议,所有www文件都必须遵守这个标准,基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)连接。

    https是超文本传输安全协议,是一种网络安全传输协议。http协议传输的数据都没有加密,一些私密的信息不安全,https经由超文本传输协议(http)进行通信,利用SSL/TLS来加密数据包,https开发的主要目的就是为了保护数据传输的安全性。

    HTTPS和HTTP的区别:

        1) https协议要申请证书到ca,需要一定经济成本;

        2) http是明文传输,https是加密的安全传输;

        3) 连接的端口不一样,http是80,https是443;

        4)http连接很简单,没有状态;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。

  附:TCP和UDP的优缺点及区别

 

七、Spring的优点:(未完待续:事务,aop。。。)

  1.  轻量级框架:Spring是轻量级框架,基本的版本大约2M
  2.  控制反转:Spring通过控制反转实现松散耦合,对象们给它们的依赖,而不是创建或者查找依赖的对象们,方便解耦,简化开发
    • IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。

    • DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其他对象实例后,侧重于实现。

  3. 面相切面的编程 AOP:Spring支持面相切面的编程,并且把应用业务逻辑和系统分开
  4. 容器:Spring 包含并管理应用中对象的生命周期和配置
  5. MVC框架:Spring的WEB框架是个精心设计的框架,是WEB框架的一个很好的替代品
  6. 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)
  7. 异常处理:Spring 提供方便的API把具体技术的相关异常(比如由JDBC Hibernate or JDO 抛出的) 转化为一致的 unchecked异常 

八、Mysql事务的ACID

  1. 原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作;
  2. 一致性(Consistency)。也就是说,执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而 B 账户没有加钱吧。
  3. 隔离性(Isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的。
  4. 持久性(Durability):一旦事务提交,则其所做的修改将永久保存到数据库。

九、爬虫访问限制

  使用jsoup进行爬虫,通过修改user-agent和设置ip池防止被封

十、Tomcat是什么

    Tomcat是一个运行JAVA的网络服务器,它也是JSP和Serlvet的一个容器。

十一、除了使用dubbo外,有没有其他方式调用其他api

  httpClient,

  webservice,

  RestTemplate(是Spring的封装的)

  OKHttpClient

原文地址:https://www.cnblogs.com/linhuanjie/p/10021702.html