一 数据结构与算法

1 常用数据结构:数组,栈(Stack),队列(Queue),树(Tree),图(Graph)
2 几种树?各自有什么特点。
二叉查找树,自平衡二叉树(AVL),红黑树
B树,B+树
3 手写算法:(1)反转链表;(2)判断是否有环;(3)快排,排序算法时间复杂度O(log2n)
(4)二分查找O(log2n) ;(5)找出一个无序数组的最大值,前10大的值(不用排序法)用优先级队列PriorityQueue;(6)两个重合链表的重合入口(两个指针);(7)重建二叉树;(8)树的之字形遍历
4 一亿个数据,内存只有1G,找出最大的一个,怎么做?找出前1000个大的数?

二 JAVA基础

1面向对象和面向过程区别;JAVA和C++区别;面向对象特性:封装,继承,多态。
2 equal 和 == 区别
3 List、Set、Map区别,List,Set实现Collection接口;Map是一个接口;List:ArrayList、LinkedList;Set:HashSet、LinkedHashSet、TreeSet;Map:HashMap、LinkedHashMap、TreeMap
Collection是一个接口,Collections是一个工具类,可以实现排序,查找等;
4 HashTable、 HashMap、 ConcurrentHashMap HashMap底层时间复杂度O(1)
5 HashMap 的put 和 get 方法的过程,HashMap解决hash冲突:分离链表法,开放定址法;
6 ArrayList扩容机制,HashMap的扩容机制
7 java栈底层是链表
8 接口和抽象类的区别:接口是对行为的抽象,抽象是对事物的抽象;接口中的方法都是抽象方法,抽象类中可以有非抽象的普通方法;接口中没有普通成员变量,final static 修饰,抽象类中可以有普通成员变量;抽象类可以有构造方法,接口中没有;一个类只能继承一个抽象类,可以实现多个接口。

三 多线程基础

1 线程和进程的区别;线程的生命周期;
2 创建线程的方式。1)继承Thread类创建线程;2)实现Runnable接口,重写run()方法创建线程;3)实现Callable接口,重写call()方法创建线程,使用Callable和Future创建线程;3使用线程池例如用Executor框架,ThreadPollExecutor;
线程池的核心参数:corePoolSize(核心线程数),maximumPoolSize(最大线程数),keepAliveTime(线程空闲时间),timeUnit(时间单位),workQueue(任务队列容量),ThreadFactory(线程创建工厂)
allowCoreThreadTimeout(允许核心线程超时),rejectedExecutionHandler(任务拒绝处理器)
CPU密集型:corePoolSize = CPU核数 + 1;IO密集型:corePoolSize = CPU核数 * 2
4 产生死锁的必要条件:互斥,不可剥夺,请求并保持,循环等待
避免死锁的方法
5 synchronized,修饰实例方法,修饰静态方法,修饰代码块
6 并发编程的三个重要特性:原子性(synchronized)、可见性(volatile)、有序性(volatile)
7 synchronized 和 volatile 的区别,volatile只能用于修饰变量,volatile保证线程可见性和有序性(禁止指令重排序),synchronized 保证原子性和可见性;
8 ThreadLocal 主要解决的是让每个线程绑定自己的值,如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,可以使用get和set方法获取或更改副本值,从而避免线程安全。ThreadLocalMap的封装。
9 synchronized 和 lock 的区别;synchronized是关键字,在JVM层面,lock是一个接口;synchronized: 以获取锁的线程执行完同步代码,释放锁 2、线程执行发生异常,jvm会让线程释放,Lock: 在finally中必须释放锁,不然容易造成线程死锁
10 可重入锁ReentrankLock ,synchronized
11 Thread的run()与start()的区别
如果直接调用线程类的run()方法,它就会被当做一个普通的函数调用,程序中任然只有主线程这一个线程。star()方法可以异步地调用run()方法,但是直接调用run()方法确实同步的,但不能达到多线程的目的。
12 java 锁的类型:乐观锁,悲观锁;独享锁,共享锁;公平锁,非公平锁;互斥锁,读写锁;可重入锁;
锁升级(JDK1.6):无锁,偏向锁,轻量级锁(自旋)和重量级锁(Synchronized)
13 volatile 保证可见性原理:
所谓的可见性就是指可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

四 JVM

1 java内存区域:堆,方法区,虚拟机栈,本地方法栈,程序计数器
程序计数器作用:每个线程都有自己的程序计数器这样当线程执行切换的时候就可以在上次执行的基础上继续执行,仅仅从一条线程线性执行的角度而言,代码是一条一条的往下执行的,这个时候就是程序计数器;JVM就是通过读取程序计数器的值来决定下一条需要执行的字节码指令,进而进行选择语句、循环、异常处理等;
Object obj = new Object( ); new的是对象实例在堆中;obj:对象引用,在栈内存
线程共享:堆,方法区;线程私有:虚拟机栈,本地方法栈,程序计数器;元空间
Native:凡是带了Native关键字的,说明java的作用范围达不到了,回去调用底层C语言的库,JNI:Java Native Interface
2 方法区:静态变量,常量,类信息,运行时的常量池,static,final,Class,常量池
堆内存:实例变量
栈内存:8大基本类型+对象引用+实例的方法
堆内存分为三个区域:新生区,养老区,永久区
3 什么是OOM,什么是栈溢出,怎么分析。OOM:OutOfMemoryError ,堆内存满了
4 内存溢出和内存泄漏
内存溢出: 即为out of memory, 当你要求分配的内存超过了系统给你的内存时, 系统就会抛出out of memory的异常
比如: 当前应用只剩下4M的空间可用, 但你却加载得到一个需要占用5M空间的图片Bitmap对象, 就会抛出溢出的异常
内存泄露: 即为memory leak, 一个对象被创建后, 你不再使用它了, 但因为某种原因它又没有成为垃圾对象, 这块内存不能再被分配置使用.
比如: 查询数据库得到的cursor对象在使用完后没有关闭, Activity中使用Handler发延迟消息, 但退出前不移除未处理的消息

5 JVM常用调优参数, JVM参数配置:跟踪参数,堆分配参数,栈分配参数、
6 内存快照如何抓取,怎么分析Dump文件,JProfile工具HeapDumpOnOutOfMemoryError
7 类加载器:启动类加载器,扩展类加载器,应用程序类加载器,自定义类加载器,
8 双亲委派机制,tomcat如何打破的
9 GC垃圾回收算法:复制算法,标记清除算法,标记整理算法,分代收集算法。
新生代采用复制算法,老年代:老年代中使用“标记-清除”或者“标记-整理”算法进行垃圾回收
GC垃圾回收主要是回收新生区(轻GC)和养老区(重GC)
10 垃圾回收器CMS和G1,CMS:用户线程->初始标记->并发标记->重新标记->并发清理->并发重置;G1:用户线程->初始标记->并发标记->最终标记->筛选回收->
STW: Stop the World
11 java 对象和类的生命周期
在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)。
应用阶段:
强引用,垃圾回收器绝不会回收它;
软引用:内存空间充足时,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存;
弱引用:一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存;
虚引用:如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收,虚引用必须和引用队列(ReferenceQueue)联合使用。
12 String s = new String(“123”)创建了几个对象
创建了2个对象,jvm编译阶段判断常量池中 "123"存在与否,进而来判断是否创建常量对象,然后运行阶段通过new关键字在java heap创建String对象。
String s = “123”;创建了1个对象(在常量池创建了一个对象)

五 MySQL

1 事务特性:原子性,一致性,隔离性,持久性;
隔离级别:未提交读(可能导致脏读),提交读(不能避免不可重复读,幻读),可重复读(不能避免幻读),可串行化
2 InnoDB和MyISAM的比较:InnoDB支持事务,支持外键,MyISAM不支持,InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁
3 数据库三大范式:第一范式:列不可分,第二范式:(数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关)非属性完全依赖键码,第三范式:非主属性不传递函数依赖于键码(数据表中的每一列数据都和主键直接相关,而不能间接相关。)
4 MVCC 多版本并发控制,MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读
5 聚集索引和非聚集索引;主键被定义,则这个主键就作为聚集索引。
聚集索引是指关系表记录的物理顺序与索引的逻辑顺序相同。
由于一张表只能按照一种物理顺序存放,一张表最多也只能存在一个聚集索引。与非聚集索引相比,聚集索引有着更快的检索速度。
非聚集索引指的是非叶子节点按照索引的键值顺序存放,叶子节点存放索引键值以及对应的主键键值。MySQL 里除了 INNODB 表主键外,其他的都是二级索引。MYISAM,memory 等引擎的表索引都是非聚集索引。简单点说,就是索引与行数据分开存储。一张表可以有多个二级索引。
聚簇索引(innoDB)的叶子节点就是数据节点;
而非聚簇索引(myisam)的叶子节点仍然是索引文件 只是这个索引文件中包含指向对应数据块的指针(磁盘地址)
对于 非聚簇索引 来说,每次通过索引检索到所需行号后,还需要通过叶子上的磁盘地址去磁盘内取数据(回行)消耗时间。为了优化这部分回行取数据时间,InnoDB 引擎采用了聚簇索引。
聚簇索引,即将数据存入索引叶子页面上。对于 InnoDB 引擎来说,叶子页面不再存该行对应的地址,而是直接存储数据。

6 索引底层: MySQL支持两种索引,B-树索引和哈希索引,
InnoDB底层:B+树,和B-树的区别
7 MySQL的约束类型:主键,默认值,唯一约束,外键,非空
8 索引类型:主键索引、普通索引、唯一索引和全文索引
9 MySQL加索引方式:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( […], UNIQUE [索引的名字] (列的列表))
10 如何加锁
共享锁(S):SELECT * FROM table_name WHERE … LOCK IN SHARE MODE。
排他锁(X):SELECT * FROM table_name WHERE … FOR UPDATE。
用SELECT … IN SHARE MODE获得共享锁,主要用在需要数据依存关系时来确认某行记录是否存在,并确保没有人对这个记录进行UPDATE或者DELETE操作。但是如果当前事务也需要对该记录进行更新操作,则很有可能造成死锁,对于锁定行记录后需要进行更新操作的应用,应该使用SELECT… FOR UPDATE方式获得排他锁。
11 有一个表table,有学生姓名student_name,各学科门类subject,各科成绩score,查询总成绩前十名
SELECTstudent_name ,SUM(score) AS total_score FROM table GROUP BYstudent_name ORDER BY total_name DESC LIMIT 10;

六 计算机网络

1 TCP/IP 五层 :应用层(HTTP,FTP),传输层(TCP,UDP),网络层(IP),数据链路层,物理层
2 TCP 连接建立, 3次握手,为什么是3次,2次行吗?最后一次ack丢失会发生什么?
TCP 连接释放,4次挥手,为什么是4次,为什么时间等待计时器设置的是2MSL?
3 TCP和UDP区别:TCP面向连接,一对一通信,提供可靠传输服务,全双工通信,面向字节流;UDP是无连接的,一对一或一对多或多对多通信,尽最大努力交付,面向报文。
TCP如何实现可靠传输:校验和,停止等待协议,流量控制(滑动窗口),拥塞控制
4 滑动窗口理解;如何实现流量控制
5 避免网络拥塞:1 慢开始和拥塞避免,2 快重传和快恢复
6 TCP拆包:待发送数据大于MSS(最大报文长度),TCP传输前将进行拆包;
TCP黏包;怎么样解决拆包和黏包:发送方添加包首部,封装成固定长度,设置边界
7 HTTP状态码,100,200,204,301,302,304,400,401,403,404,500,502,503,504
8 HTTP方法,get,head,post,put,patch,options,connect;
get和post的区别:本质区别:get请求,浏览器会把HTTP header 和data 一并发送出去,服务器响应200(返回数据);post请求,浏览器先发送header,服务器响应100,浏览器再发送data,服务器响应200(ok)
长连接和短连接
9 HTTP和HTTPS有什么区别:开销:HTTPS需要申请CA证书,需求缴费,资源消耗:HTTP是超文本传输协议,明文传输,HTTPS是SSL加密传输的,需要消耗内存和CPU资源,端口:HTTP端口是80,HTTPS端口是443,安全性:HTTPS 是经过加密传输,安全性比HTTP高。
10 Cookie和Session区别;cookie数据存放在客户的浏览器上,session存放在服务器上,cookie不是很安全,别人可以分析本地的cookie,单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存30个cookie。
11 数字签名:把数据的摘要消息进行加密,如MD5加密;数字证书;对称加密和非对称加密:对称加密是加密和解密都使用同一个秘钥,非对称是公钥和私钥,公钥可以随意发布,私钥只有自己知道。
12 中间人攻击

七 设计模式

1 设计原则:
单一职责原则 (Single Responsibility Principle)
开放-关闭原则 (Open-Closed Principle)
里氏替换原则 (Liskov Substitution Principle)
依赖倒转原则 (Dependence Inversion Principle)
接口隔离原则 (Interface Segregation Principle)
迪米特法则(Law Of Demeter)
组合/聚合复用原则 (Composite/Aggregate Reuse Principle)

2 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式
结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

3 工厂模式,简单工厂模式,抽象工厂模式
4 单例模式(SingletonPattern),饿汉单例模式,懒汉单例模式,DCL(双重检测)
5 观察者模式

八 Spring

1 Spring IOC 和AOP,
DI依赖注入三种方式:构造器注入,set方式注入,p命名空间和c命名空间注入
bean是如何创建—工厂模式,数据是如何注入—反射
静态代理中代理类在编译期就已经确定,而动态代理则是JVM运行时动态生成
静态代理:代理类((ProxySubject),委托类((RealSubject),接口(Subject),实现java静态代理需要实现定义一个接口,然后代理类与委托类均需要实现这个接口,把需要代理的目标方法统统在接口中定义好了,目的是为了约束代理类必须得实现需要代理的方法,保证委托类中需要被代理的方法能够被成功代理。
通过代理,我们在可以在委托类中的目标方法的前后增加了一些操作。
2 动态代理:代理类不需要开发者自己写,但是接口和委托类需要写,(JDK中的Proxy)然后需要定义一个Handler类实现InvocationHandler接口,实现invoke方法;(CGLIB)newProxyInstance
3 AOP:面向切面编程,底层使用动态代理方式—增强方法,有接口的情况:创建接口的实现类的代理对象,jdk动态代理
注解实现AOP,编写切入点类(PointCut),@Aspect 标注这个切入点类是一个切面,@Befor:方法执行前,@after:方法执行后,@Around:环绕增强
4 AOP应用场景:(1)打印log日志;(2)认证登录;(3)自定义缓存策略

5 Spring 的启动流程
1)首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境;
2)其 次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时 contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始 化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是 XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的 context-param标签指定。在这个IoC容器初始化完毕后,spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取;
3)再 次,contextLoaderListener监听器初始化完毕后,开始初始化web.xml中配置的Servlet,这里是DispatcherServlet,这个servlet实际上是一个标准的前端控制器,用以转发、匹配、处理每个servlet请 求。DispatcherServlet上下文在初始化的时候会建立自己的IoC上下文,用以持有spring mvc相关的bean。在建立DispatcherServlet自己的IoC上下文时,会利用WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE 先从ServletContext中获取之前的根上下文(即WebApplicationContext)作为自己上下文的parent上下文。有了这个 parent上下文之后,再初始化自己持有的上下文。这个DispatcherServlet初始化自己上下文的工作在其initStrategies方 法中可以看到,大概的工作就是初始化处理器映射、视图解析等。这个servlet自己持有的上下文默认实现类也是 mlWebApplicationContext。初始化完毕后,spring以与servlet的名字相关(此处不是简单的以servlet名为 Key,而是通过一些转换,具体可自行查看源码)的属性为属性Key,也将其存到ServletContext中,以便后续使用。这样每个servlet 就持有自己的上下文,即拥有自己独立的bean空间,同时各个servlet共享相同的bean,即根上下文(第2步中初始化的上下文)定义的那些 bean。

《 Spring 的启动流程》 为CSDN博主「jobbible」的原创文章,遵循CC 4.0 BY-SA版权协议,原文链接:https://blog.csdn.net/moshenglv/article/details/53517343

九 Spring MVC

1 SpringMVC原理
用户发送请求,dispatchServlet前端控制器,HandlerMapping处理器映射器,HandlerAdatper处理器适配器,Controler后端控制器,ModerAndView视图解析,View视图层,响应结果展示给用户

十 SpringBoot

1 SpringBoot的启动流程,启动原理
第一部分进行SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器,
第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块、及核心的创建上下文环境模块,
第三部分是自动化配置模块,

每个SpringBoot程序都有一个主入口,也就是main方法,main里面调用SpringApplication.run()启动整个spring-boot程序,该方法所在类需要使用@SpringBootApplication注解,以及@ImportResource注解(if need),@SpringBootApplication包括三个注解,功能如下:@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置
@SpringBootConfiguration(内部为@Configuration):被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境
@ComponentScan:组件扫描,可自动发现和装配Bean,默认扫描SpringApplication的run方法里的Booter.class所在的包路径下文件,所以最好将该启动类放到根包路径下
SpringBoot启动类
首先进入run方法
run方法中去创建了一个SpringApplication实例,在该构造方法内,我们可以发现其调用了一个初始化的initialize方法
该方法中实现了如下几个关键步骤:
1)创建了应用的监听器SpringApplicationRunListeners并开始监听
2)加载SpringBoot配置环境(ConfigurableEnvironment),如果是通过web容器发布,会加载StandardEnvironment,其最终也是继承了ConfigurableEnvironment
3)配置环境(Environment)加入到监听器对象中(SpringApplicationRunListeners)
4)创建run方法的返回对象:ConfigurableApplicationContext(应用配置上下文),
5)回到run方法内,prepareContext方法将listeners、environment、applicationArguments、banner等重要组件与上下文对象关联
6)接下来的refreshContext(context)方法(初始化方法如下)将是实现spring-boot-starter-*(mybatis、redis等)自动化配置的关键,包括spring.factories的加载,bean的实例化等核心工作。

7)第三部分是自动化配置模块, 主要使用到了SpringFactoriesLoader,即Spring工厂加载器,该对象提供了loadFactoryNames方法,入参为factoryClass和classLoader,即需要传入工厂类名称和对应的类加载器,方法会根据指定的classLoader,加载该类加器搜索路径下的指定文件,即spring.factories文件,传入的工厂类为接口,而文件中对应的类则是接口的实现类,或最终作为实现类,所以文件中一般为如下图这种一对多的类名集合,获取到这些实现类的类名后,loadFactoryNames方法返回类名集合,方法调用方得到这些集合后,再通过反射获取这些类的类对象、构造方法,最终生成实例

2 pom.xml文件,核心依赖
启动器,SpringBoot会将所有功能场景变为一个个启动器
@SpringBootApplication :标注这个类是一个Springboot的应用
application.yml文件
3 MVC、MVP、MVVM模式

十一 Mybatis

1.什么是SQL注入
答:SQL注入是通过把SQL命令插入到web表单提交或通过页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL指令。
注入攻击的本质是把用户输入的数据当做代码执行。

举例如: 表单有两个用户需要填写的表单数据,用户名和密码,如果用户输入admin(用户名),111(密码),若数据库中存在此用户则登录成功。SQL大概是这样
SELECT * FROM XXX WHERE userName = admin and password = 111
但若是遭到了SQL注入,输入的数据变为 admin or 1 =1 # 密码随便输入,这时候就直接登录了,SQL大概是这样
SELECT * FROM XXX WHERE userName = admin or 1 = 1 # and password = 111 ,因为 # 在sql语句中是注释,将后面密码的验证去掉了,而前面的条件中1 = 1始终成立,所以不管密码正确与否,都能登录成功。

2.mybatis中的#{} 为什么能防止sql注入,KaTeX parse error: Expected 'EOF', got '#' at position 16: {}不能防止sql注入 答: #̲{}在mybatis中的底层是…{}则没有使用预编译,传入的参数直接和sql进行拼接,由此会产生sql注入的漏洞。

3.SQL语句中where 1=0是什么意思
表示条件永抄远不成立
适用于导出表结构袭
比如说你想bai看下一个表的结构 你可以
select * from 表名 where 1=0

十二 Maven

1 Maven如何解决依赖冲突
1)最短路径优先
Maven 面对 D1 和 D2 时,会默认选择最短路径的那个 jar 包,即 D2。E->F->D2 比 A->B->C->D1 路径短 1。
最先声明优先
2)如果路径一样的话,如: A->B->C1, E->F->C2 ,两个依赖路径长度都是 2,那么就选择最先声明。
3)移除依赖:
(1)我们可以借助Maven Helper插件中的Dependency Analyzer分析冲突的jar包,然后在对应标红版本的jar包上面点击execlude,就可以将该jar包排除出去。
(2)手动排除
或者手动在pom.xml中使用标签去排除冲突的jar包(上面利用插件Maven Helper中的execlude方法其实等同于该方法):

JAVA校招基础面试题相关推荐

  1. “面试不败计划”: java语言基础面试题(三)

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 java实 ...

  2. 校招java实习生基础知识面试题

    目录 写在前面的话 基础知识 J2SE J2EE框架(可选,非强制) db 网络 软能力 写在前面的话 校招生大多没什么项目经验,更多的看潜力.这个潜力怎么体现? 一般可以从下面几个方面来看: a.学 ...

  3. Java经典基础面试题

    有时候面试,你不知道面试官会问什么问题,觉得有水平的面试官,应该会问你比较深奥的题,但是你也不要抱有这样的心理,有的面试官,喜欢不按常理出牌,会问你比较简单得问题,今天小编就为大家整理了一份,比较基础 ...

  4. Java开发基础面试题,Java开发人员不得不收集的代码

    前言 今天的分享主要是讲下这个 redis,什么是缓存雪崩.穿透和击穿.这三个技术问题是我们平时开发工作中和面试过程中,必须要会的知识点,因为目前的互联网系统没有几个不需要用到缓存的,只要用到缓存的话 ...

  5. 【转】Java学习---Java Web基础面试题整理

    [原文]https://www.toutiao.com/i6592359948632457731/ 1.什么是Servlet? 可以从两个方面去看Servlet: a.API:有一个接口servlet ...

  6. “面试不败计划”: java语言基础面试题(二)

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 java实 ...

  7. “面试不败计划”: java语言基础面试题(一)

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 java实 ...

  8. java 安卓基础面试题_android-------Java 常问的基础面试题

    1."=="和equals方法究竟有什么区别? ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用 ...

  9. Java Web基础面试题

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

最新文章

  1. CTFshow php特性 web91
  2. Objective-C学习笔记2013[NSString]字符串[可变字符串中,加用app减用delete]
  3. FFmpeg命令的几种应用
  4. php 获取图片的宽高,JS怎么获取图片当前宽高
  5. github 使用方法总结 还有一部分不太懂
  6. 订餐系统-第一个用NodeJs实现的项目
  7. UISearchBar--改变内部输入框的背景颜色
  8. 设计模式的学习方法 | 摘自《图解设计模式》译者序
  9. 300 页干货!李宏毅《一天搞懂深度学习》(附下载)
  10. 【机器学习】LSTM模型原理
  11. 【无机纳米材料科研制图——OriginLab 0206】Origin绘制X射线衍射XRD堆叠图
  12. 分枝定界法(Branch-and-Cut)
  13. veil-Evasion免杀使用
  14. sqlmap--tamper使用技巧
  15. 百度android 升级,百度浏览器app下载_百度浏览器v6.4.21安卓去广告去升级版-这家软件站...
  16. Lattice原理及在通信中的应用 2 Packing, Covering, Quantization, Modulation
  17. 计算机启动过程详细介绍
  18. TypeScript自学笔记--开篇
  19. mysql信息泄露漏洞,MySQL远程信息泄漏和缓冲区溢出漏洞
  20. Android学习路线总结,绝对干货

热门文章

  1. 磁盘挂载报错/dev/sdb1 is apparently in use by the system
  2. linux网卡驱动离线安装_linux下网卡驱动安装全过程
  3. C语言实现获取文件后缀、修改后缀
  4. Git版本控制管理——diff
  5. python xlwings追加数据_Python学习随笔:使用xlwings设置和操作excel多行多列数据以及设置数据字体颜色填充色对齐方式的方法...
  6. java实用教程第五版电子书,爱了爱了
  7. BloomFilter在Drois中的应用
  8. P2P穿透StunServer
  9. 沙特阿拉伯重新开放对于持有美国、英国和申根签证旅行者落地签
  10. esp8266模块的使用(详解) 入门必备