史上最全最简单的C++、JAVA面试合集 OFFER面试指南包含程序员常见的面试考题,涵盖C++、JAVA、操作系统、算法等丰富的面试资料。所有资料将同步更新到微信小程序,同时,微信小程序也包含各大互联网公司、排行榜,欢迎关注使用。...
JAVA面试指南,这个就够了 最近手残,搞了个公众号,主要闲暇时间随便聊一些程序圈的一些事,也会分享一些技术面试的资料,感兴趣的可以关注一波。关注后,后台发送 面试指南,可以获取2021最新JAVA面试总结,基本看完后,JAVA八股文这些应该不在话下了。...
深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 今天开始谈论一些JVM虚拟机的知识。其实在前面叙述中多多少少已经附带提起了JVM相关的知识,如类加载、多线程相关的底层机制、方法调用、泛型的机制等等,但是实际上JVM知识会有很多,今天就把比较重要的其他一些知识再拿出来理一理。首先要讲的也是非常基础的就是JVM的内存组成: JVM的内存被划分5个区域: 堆区、方法区——这两个区域的数据共享 虚拟机栈、本地方法栈、程序计数器——...
Tomcat多线程模型浅析 我们在上一部分文章里已经看到了,Tomcat的架构是如何一步步构建出来,但是在后台服务器的构建中,一个很重要的问题是如何实现多线程?一般情况下,如果我们来实现最初步的想法就是:不断循环接收客户端的连接,每个连接构建一个线程,然后进行相关的数据处理!但是,实际上我们应该考虑的更多,比如如何选用BIO还是NIO等等?所以,我们来借鉴一下Tomcat的多线程设计思路!首先Tomcat的设计了...
深入理解系列之JAVA多线程(3)——volatile原理 我们在上一篇文章讲到,synchronized关键字保证了代码同步性,同时有利于实现程序的安全性,但是同时也带来性能下降的弊端!所以,如果不是必要的我们应该避免使用synchronized关键字,在一些情况下可以采用其他方式作为替代!其中之一就是volatile。1、什么是缓存一致性?关于缓存一致性,我在第一章就简要的介绍过。缓存一致性的出现是因为计算机内存模型导致的:为了解决...
深入理解系列之JAVA多线程(2)——synchronized同步原理 多线程中为了解决线程安全问题,一个重要的手段就是同步!所谓同步其实就是使得原本各个线程交叉执行(异步),变成排队执行(同步)。同步策略使得不同线程操作共享数据遵循“先来后到“,从而避免某个线程没有处理完数据就被另一线程抢占操作出现数据被覆盖或者脏读的情况。其中同步最常用的手段就是synchronized关键字!1、synchronized有哪些主要用法?有什么区别?synchr...
Tomcat架构浅析 Tomcat服务器作为目前比较流行的一种服务器容器已经被广泛用于后台服务器的搭建、后台集成框架的嵌入(如SpringBoot),不同于Apache、Nginx本身(注意是本身,其实可以搭配后台脚本实现动态网页)仅仅支持静态网页,由于Tomcat其实是一种Servlet规范的实现,而Servlet又支持JSP,所以Tomcat实际上是完美支持动态页面的渲染的。了解Tomcat的工作原理,有助于...
深入理解系列之JAVA多线程(1)——概念与原理机制 现代操作系统都支持多任务的处理,所以为了提高JAVA程序运行的效率,JAVA在虚拟机层面采用了多线程机制,即“同时”运行多个逻辑代码!问题一、线程和进程的区别是什么?在操作系统层面,我们听到最多的就是“进程”的概念,即在日常操作系统使用中,我们认为每个软件就是一个进程,线程被称作“轻量级的进程“,我们通常用以下三句话(或表达同类意思的语句)来阐述他们之间的关系:1)、进程是...
深入理解系列之JAVA多态机制(重载/重写) 多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态(来自百度百科)。所以,按照这个意思其实多态的“主题”是对象,但是实际在我们运用中我们常把“重载”和“重写”称之为“多态”其实这是不严谨的!重载和重写只是多态的存在带来的两种应用表现形式,也就是说正是因为重载和重写我们才看到了多态的“威力”。所以,当我们谈论多态实现机制的时候其实就...
NIO入门实例-写一个客户端/服务器例程 注:该文章实际为《java网络编程》例11-1和例11-2的源码勘误!原例程经过实际测试并不能实现期望的功能,在分析代码逻辑后勘误如下!在勘误之前贴出书中原始例程(仅服务器有误):package org.nioTest;import sun.rmi.runtime.Log;import java.io.IOException;import java.net.InetSocke...
深入理解系列之JAVA泛型机制 泛型是指在声明(类,方法,属性)的时候采用一个“标志符”来代替,而只有在调用的时候才传入真正的类型,我们最常见的泛型实例就是前面讲述的集合类,集合类在声明的时候都是通过泛型方式来声明的,只有在调用(实例化)时我们才确定传入的是Integer亦或是String等等!注:本文着重叙述泛型实现的原理,而忽略一些泛型应用时的注意事项,详细应用时的注意事项请参看其他博文问题一、为什么要采...
WebRTC自适应控制算法 该文章系总结性文章,主要参考一下文章: 1、webrtc视频jitterbuffer原理机制(描述版) - 简书 http://www.jianshu.com/p/bd10d60cebcd 2、WebRTC视频接收缓冲区基于KalmanFilter的延迟模型 - 简书 http://www.jianshu.com/p/bb34995c549a 3、WebRTC基于GCC的拥塞控制(上) ...
通过python抓取博客信息 最近写博客,忽然想知道自己的博客阅读量的趋势都是怎么样的,无奈CSDN并不提供这个功能。本来是想偶尔的手动查看,记录到excel表格中然后一段时间后就能知道大概了,但是作为程序员能够交个程序自动执行的就不要采用这种原始的办法了,上网一搜果然有和我一样“无聊的”想做这个统计的,再加上最近学习python,所以就决定写个python爬虫脚本来抓取这些信息!(无奈python水平太弱,对于python中...
深入理解系列之JAVA数据结构(5)——String String类型是Java编程中最为常见的数据结构(没有之一),与之相关联的还有StringBuilder和StringBuffer。其中String类型是不可变的;后者均是可变的字符串,但是StringBuilder是线程不安全的,StringBuffer线程安全;所以三者的效率排名为:StringBuilder>String>StringBuffer。另外,为了优化字符串的使...
深入理解系列之JAVA反射机制 反射是指,程序运行期间,对于任意一个类,都能够知道这个类的所有属性和方法,且都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。问题一、反射机制的理论基础是什么?如前言所属,基本每个java程序员都知道反射的概念和作用,但是为什么java可以支持反射?为什么C/C++就没有呢?其实,java之所以能够实现反射其根本的理论基...
深入理解系列之JAVA动态代理机制 代理的作用,就是生成代理对象使得真实对象的某些方法执行被代理对象拦截,从而在真实方法执行前、执行后添加额外的“动作”!动态代理则是指不需要修改原来的对象方法,在程序运行的过程中动态的生成代理对象,从而动态的生成这些“额外的”动作,主要从两个方面来深入理解动态代理机制!问题一、动态代理的基本实现是什么?动态代理本质上还是java中的“代理设计模式”,所以启UML图如下所示 ...
深入理解系列之JAVA数据结构(4)——Hashtable 1、Hashtable和HashMap,从存储结构和实现来讲基本上都是相同的, Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类,但二者都实现了Map接口。 2、它和HashMap的最大的不同是它是线程安全的,另外它不允许key和value为null。 3、Hashtable是个过时的集合类,不建议在新代码中使用,不需要线程安全...
深入理解系列之JAVA数据结构(3)——HashMap 1、 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable大致相同) 2、此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 3、 值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collectio...