字节面试(网络)

(volatile) 重入锁中的关键变量state就是一个被volatile关键字标记的int型变量,如果有线程访问临界区代码,就通过CAS操作把state的值进行修改,其他线程则使用循环CAS去等待state的值复原,也就是之前的进程从临界区代码中走出,释放锁。
(CAS用处) CAS操作主要是用在Java并发包中的同步队列中,同步队列是个抽象类,很多类都在内部实现了特定的同步类,因此只要使用到同步队列的类都涉及到了CAS操作,另外就是一些原子类,其中的提供AtomicInteger等原子类中也有很多的CAS操作。Java中的CAS主要是通过调用Unsafe类中的方法实现的,这些方法都是本地方法。
VisualVM),能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈.
JVM常用调试参数:–verbose: gc在虚拟机发生内存回收时在输出设备显示信息**-Xloggc**: filename把GC相关日志信息记录到文件以便分析-XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息-XX:OnError=;" 出现致命ERROR之后运行自定义命令。** (jdk1.8新特性知识点):**Lambda表达式 函数式接口 方法引用和构造器调用 Stream API 接口中的默认方法和静态方法 新时间日期API(12) Switch 表达式 /6 G1的可中断 mixed GC此功能通过将Mixed GC集拆分为强制部分和可选部分,使G1垃圾收集器更有效地中止垃圾收集过程。通过允许垃圾收集过程优先处理强制集,g1可以更多满足满足暂停时间目标。7 G1归还不使用的内存此功能的主要目标是改进G1垃圾收集器,以便在不活动时将Java堆内存归还给操作系统。 为实现此目标,G1将在低应用程序活动期间定期生成或持续循环检查完整的Java堆使用情况。这将立即归还未使用的部分Java堆内存给操作系统。 用户可以选择执行FULL GC以最大化返回的内存量//.1//4.迭代器 Iterator 是什么?迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小. (http执行过程)// 浏览器查询DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析;如果要查询的域名不由本地DNS服务器区域解析,但该服务器已经缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或迭代查询。浏览器获得域名对应的IP地址后,浏览器向服务器请求建立连接,发起三次握手TCP/IP连接建立起来后,浏览器向服务器发送HTTP请求服务器接收到这个请求,根据路径参数映射到特定的请求处理器进行处理,并将处理结果返回给浏览器浏览器根据请求到的资源,最终向用户呈现一个完整的页面.。 // (ConcurrentHashMap)
首先,ConcurrentHashMap也是线程安全的,但并不是像HashTable那样通篇方法加synchronize关键字使用重量级锁实现线程安全。在底层容器的设计上,ConcurrentHashMap存储数据把哈希表分为多个部分,每个部分被称为Segment。当操作map时只锁定一个Segment即可,其他的Segment不用上锁,减小了锁的粒度,增大了并发性。
ConcurrentHashMap中很多关键变量和每个键都被volitole关键字指定。根据Java内存模型的的定义,每个volitole变量的读操作都发生在写操作之后,保证了在不上锁的情况下读取信息时能读到最新的值。(Java内存模型与volitole语义要阅读相关书籍才能完全理解)而HashTable的做法则是给get方法加上synchronize关键字,get方法的实现是这两个Map效率差距最大的地方。
对ConcurrentHashMap中写数据要经过两次Hash定位,第一次定位到Segmengt,第二次定位到具体的位置。写的时候会给当前Segment上排它锁。插入数据时通过判断是否超过阈值来扩容,扩容时仅仅把当前的segment的长度乘2,不会影响到其他的Segment,这个地方也是效率提升的一个表现。而且扩容方面与HashMap有一点不同,ConcurrentHashMap是在数据插入之前检查阈值进行扩容,而HashMap是每次插入完毕之后检查阈值进行扩容,如果在此次扩容之后再无数据插入,就相当于白白浪费了扩大的这部分容量和时间。 (进程通信 )IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。1、特点)消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
(TCP拥塞机制)
拥塞控制代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享。几种拥塞控制方法:慢开始(slow-start )、拥塞避免、快重传( fastretransmit )和快恢复。
1,.HTTP 响应码 301 和 302 代表的是什么?有什么区别?
通过响应码能够对错误进行排查和定位
HTTP响应码通常分为五大类:
1XX——信息类(Information),表示收到http请求,正在进行下一步处理,通常是一种瞬间的响应状态
2XX——成功类(Successful),表示用户请求被正确接收、理解和处理 200(OK):请求成功。一般用于GET与POST请求 201(Created):已创建。成功请求并创建了新的资源202(Accepted):接受
3XX——重定向类(Redirection),表示没有请求成功,必须采取进一步的动作 301(Moved Permanently):资源被永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI 302(Found)资源临时移动。资源只是临时被移动,客户端应继续使用原有URI 304:用其他策略获取资源
4XX——客户端错误(Client Error),表示客户端提交的请求包含语法错误或不能正确执行 400(Bad Requests):客户端请求的地址不存在或者包含不支持的参数 401(Unauthorized):未授权,或认证失败。对于需要登录的网页,服务器可能返回此响应 403(Forbidden):没权限。服务器收到请求,但拒绝提供服务 404(Not Found):请求的资源不存在。遇到404首先检查请求url是否正确
5XX——服务端错误(Server Error),表示服务器不能正确执行一个正确的请求(客户端请求的方法及参数是正确的,服务端不能正确执行,如网络超时、服务僵死,可以查看服务端日志再进一步解决) 500(Internal Server Error):服务器内部错误,无法完成请求 503(Service Unavailable):由于超载或系统维护(一般是访问人数过多),服务器无法处理客户端的请求 ,通常这只是暂时状态。

你可能感兴趣的:(程序员笔试面试)