目录

    • 问题1:什么是注解(Annotation)?为什么在开发时候用注解? 细聊注解?
    • 问题2:什么是反射? 做什么用的呢?
    • 问题3:什么是泛型? 做什么用的呢?
    • 问题4:为什么封装用包装类型不用基本类型?POJO里也都是封装类型?
    • 问题5:#{} 与¥{} 区别以及它们是什么?阐述
    • 问题6:sqlsession以及session理解? 日常业务常用
    • 问题7:什么叫做SQL?
    • 问题8:javabean和POJO有什么关系区别?
    • 问题9:关于多表查询属性问题?resultType和resultMap是什么? association property是什么?property是什么?
    • 问题10:怎么理解驼峰映射,具体阐述?以及使用方法?
    • 问题11:什么是并发概念?
    • 问题12:vue怎么控制数据的实时刷新?
    • 问题13:什么是MVVM?做啥的?阐述下
    • 问题14:为什么很多函数对象都要一直封装封装?
    • 问题15:什么是表单的回显?
    • 问题16:怎么理解工具API?
    • 问题17:POJO指的是什么?
    • 问题18:热部署是什么?
    • 问题19:什么是聚合 耦合 内聚 ?
    • 问题20:什么是负载均衡?
    • 问题21:什么是API 网关?
    • 问题22:什么是Nacos?
    • 问题23:什么是事务以及回滚概念
    • 问题24:脏读、幻读、不可重复读?
    • 问题25:什么是选型?
    • 问题26:什么是SQL注入?
    • 问题27:什么是微服务?
    • 问题28:什么是负载均衡?
    • 问题29:什么是ribbon?
    • 问题30:什么是负载均衡策略?
    • 问题31:什么是代理对象proxy?
    • 问题32:什么是lambda表达式?
    • 问题33:为什么要在bin目录里面进行cmd操作?
    • 问题34:为什么bin目录里面都cmd操作,不在其它目录cmd?
    • 问题35:什么是Restful 服务?
    • 问题36:什么是LoadBalancerClient(负载均衡客户端)?
    • 问题37:什么是yml?
    • 问题38:什么是springCloud?
    • 问题39:什么是feign?
    • 问题40:什么是 fallbackFactory?
    • 问题41:什么是socket?
    • 问题42:什么是http(超文本传输协议)?
    • 问题43:什么是Tomcat 简洁干练总结?
    • 问题44:什么是servlet作用是什么?
    • 问题45:什么是RestTemplate?
    • 问题46:微服务中的注册中心?
    • 问题47:什么是web服务器?
    • 问题48:什么是newInstance()和new()有什么区别?
    • 问题49:什么是int.class?
    • 问题49:什么是class.forName()?
    • 问题49:什么是GC?
    • 问题49:java中的类加载是如何进行?
    • 问题50:java中的类加载机制在编程中的实际应用?
    • 问题51:什么是log4j?
    • 问题52:什么是apache?
    • 问题53:什么是servlet?
    • 问题52:log4j里面的info,debug,error级别有什么区别?
    • 问题53:什么是双重校验锁?
    • 问题54:什么是spring容器?
    • 问题54:什么是分布式系统?
    • 问题55什么是SDK 同API区别?
    • 问题56:什么是springcloud中的Ribbon
    • 问题57:什么是VMWare?
  • 问题58:什么是UUID?
  • 问题59:什么是三次握手四次挥手?
  • 问题60:什么是TCP协议
  • 问题61:什么是TCP和http协议区别?
  • 问题62:什么是JWT?
  • 问题63:什么是HikariCP
  • 问题64:什么是连接池?作用是什么?
  • 问题65:什么是线程池,作用是什么?
    • 问题66:为什么要进行序列化?
  • 问题67:什么是postman?做什么的?
  • 问题68:什么是java的组件?怎么理解?
  • 问题69:什么是超类?
  • 问题70:什么是feign?
  • 问题71:什么是事务的四大特性?
  • 问题72:什么是反射?
  • 问题73:怎么理解Sping的IOC和AOP?
  • 074.什么是分布锁?
  • 075.什么是高并发高可用?
  • 076.网关gateway里面的谓词工厂?
  • 077.什么叫做连接池?
  • 078.什么是redis中的快照?
  • 079.什么是rabbitMQ?
  • 080.什么是ElasticSearch?

问题1:什么是注解(Annotation)?为什么在开发时候用注解? 细聊注解?

注解@也叫元数据,常见的@重写Override和@Deprecated,注解它是JDK1.5版本开始引入的一个特性(性质),用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。

《刨根问底栏目组》:

之所以用注解是因为JDK1.5之前的版本中, Spring 中要声明一个 Bean,要通过 XML 配置的方式,现在有了注解,等于减少了一个XML配置文件,减少了开发代码量。 可以直接在类上+注解完成 Bean 的声明工作。

包下面会自动生成一些数据,比如+@controller,importorg.springframework.stereotype.Controller >>意思是使用@controller生成源代码,底层对它会层层调用,从而对使用注解的地方进行一些说明。

package cn.tedu.mapper;

import cn.tedu.pojo.User;
import org.springframework.stereotype.Controller;

import java.util.List;
@Controller

问题2:什么是反射? 做什么用的呢?

官方解释:程序在运行状态中,对于任意一个类,都可以知道这个类所有属性和方法,对于任意一个对象都能够调用他的任意方法和属性。比如你用private关键词封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。

note: 字节码是一堆二进制的文件

先说应用方式以具体案例:

首先要想用反射是需要用到API

三种获取字节码的方式

1.Class.forName(“类的全路径”);
2.类名.class
3.对象.getClass();

下面准备一个测试物料类,里面封装属性进行get set 方法,整些构造 整些普通方法

package cn.tedu.review;
/*本类用于复习反射的物料类*/
public class Student {//1.定义成员变量private String name;public int age;//2.给被封装属性提供get与set方法public String getName() {return name;}public void setName(String name) {this.name = name;}//3.生成本类的无参构造与全参构造public Student(){}public Student(String name, int age) {this.name = name;this.age = age;}//4.提供本类的普通方法public void play(){System.out.println("今天大结局,放学后我要写1W行代码玩玩~");}public void sunDay(int n){System.out.println("国庆一共放"+n+"天");}//5.为了查看学生对象的具体属性与属性值,重写toString()@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}利用反射技术获取类对象,重点看步骤package cn.tedu.reflection;import org.junit.Test;import java.lang.reflect.Method;
import java.util.Arrays;/*本类用于反射的测试*/
public class TestReflect {//1.创建程序的入口函数main()--不用/*单元测试方法:是Java中最小的测试单位,使用灵活,推荐指数:5颗星* 语法要求:@Test + public + void + 没有参数* 注意:使用时需要导包:Add JUnit 4 library to the build path* 导包后的效果:import org.junit.Test* 执行方式:选中方法名前绿色的小三角,成功运行会有绿色的小对勾* *///2.通过单元测试方法,获取目标类Student对应的字节码对象@Testpublic void getClazz() throws ClassNotFoundException {//练习获取字节码对象的3种方式1. Class<?> clazz1(这里是定义的对象名) = Class.forName("cn.tedu.review.Student");2.Class<?> clazz2 = Student.class;3. Class<?> clazz3 = new Student().getClass();//打印的是Student类对应的字节码对象System.out.println(clazz1);//class cn.tedu.reflection.Student//获取当前字节码对象clazz1的名字System.out.println(clazz1.getName());//cn.tedu.reflection.Student//通过字节码对象,获取Student类的类名System.out.println(clazz2.getSimpleName());//通过字节码对象,获取Student类对应的包对象System.out.println(clazz3.getPackage());//通过字节码对象,先获取Student类对应的包对象,再获取这个包对象的名字System.out.println(clazz3.getPackage().getName());}

常听名词>>>反射技术

《刨根问底栏目组》:

总结就是这个类不是你创建的,是你同事或者直接是第三方公司,此时你要或得这个类的底层功能调用,就需要反射技术实现

问题3:什么是泛型? 做什么用的呢?

泛型的使用符号是 < >通常用来和集合对象一起使用,它是程序的增强器(下面解释为啥增强了?)它也是目前主流的开发方式。如同上面的注解@

泛型<>什么时候用?

知识点1:当操作的引用的数据类型不确定的时候,就用<>,将要操作的引用数据类型传入即可。

其实<>就是一个接收具体引用数据类型的参数范围

知识点2:在程序中,只要用到带有<>的类或者,就要明确传入的具体引用数据类型。

泛型技术是给编译器使用的技术,用于编译时期,确保了类型的安全,运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。

知识点3:为什么擦除泛型?
因为为了去兼容运行的类加载器

《刨根问底栏目组》:

泛型可以把报错的时机提前,用于在编译期检查集合的数据类型,只要不是规定的类型,就报错,通不过编译,泛型它只在编译时生效,编译通过以后,说明符合语法,泛型就会被抛弃,字节码文件中没有泛型,并且泛型的类型必须使用引用类型,比如Student、Integer。

问题4:为什么封装用包装类型不用基本类型?POJO里也都是封装类型?

先捋一下基本类型和包装类 >>>基本类型的包装类:(Integer/Byte/Short/Long/Boolean/Character/Double/Float)

比较下基本类型和包装类:
>>>01
—基本类型无需通过new关键字来创建,而封装类型需new关键字。
—存储方式及位置的不同,基本类型是直接存储变量的值保存在堆栈中能高效的存取,封装类型需要通过引用指向实例,具体的实例保存在堆中。
>>>02
初始值的不同,封装类型的初始值为null,基本类型的的初始值视具体的类型而定,比如int类型的初始值为0,boolean类型为false。
>>>03
使用方式的不同,比如包装类与集合类合作使用时只能使用包装类型。因为什么时候该用包装类,什么时候用基本类型,**要根据基本的业务来定:**这个字段允不允许null值,如果允许null值,则必然要用封装类,否则值类型就可以了,用到比如泛型和反射调用函数.,就需要用包装类!
>>>POJO里是包装类型吗
所有的POJO类属性必须使用包装数据类型!所有的局部变量推荐使用基本数据类型!(自动装箱作用:基本类型的值可以当成对象用—其实是【假相】)因为包装类的返回值不是0而是null,取出的数据可以根据返回值类型是否为null判断程序运行结果。

问题5:#{} 与¥{} 区别以及它们是什么?阐述

《刨根问底栏目组》:

#{}方式能够很大程度防止sql注入(安全),KaTeX parse error: Expected 'EOF', got '#' at position 36: …使用占位符的地方,最好优先使用#̲{} 在JDBC不支持使用占位…{},典型情况就是动态参数

关于¥{}

1. v a l u e 中 v a l u e 值 有 限 制 只 能 写 对 应 的 v a l u e 值 不 能 随 便 写 , 因 为 {value}中value值有限制只能写对应的value值不能随便写,因为 value中value值有限制只能写对应的value值不能随便写,因为{}不会自动进行jdbc类型转换

2.简单来说,在JDBC不支持使用占位符的地方,都可以使用${}

关于#{}

1.#{}表示一个占位符号 相当于 jdbc中的 ? 符号

2.#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?

3.#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:select * from user where id= #{user_id},如果传入的值是11,那么解析成sql时的值为where id=“11”

4.如果sql语句中只有一个参数,此时参数名称可以随意定义 如果sql语句有多个参数,此时参数名称应该是与当前表关联[实体类的属性名]或则[Map集合关键字],不能随便写,必须对应!

问题6:sqlsession以及session理解? 日常业务常用

session,理解就是会话的意思,包含访问数据库的用户的信息,比如你用SYSTEM用户登陆oracle,会有一个session保存你所访问数据库的一些信息,来保持你的连接访问状态。

Session 不是 JDBC规范中的东西. 是数据库层面上的东西,它标识一次通信双方从开始通信到通信结束期间的一个上下文,是记录在服务器端(数据库端)的内存中。

JDBC 是客户端(相对数据库).
还有一个比较近似的概念Connection 这个是JDBC 规范中的内容,表示的是客户端到服务端的一个数据链路。例子: 一条小河,Connection 是桥, Session 是运菜过河拿钱回家。

SqlSession理解为就是一个提供select/insert/update/delete方法。

补充1:SqlSessionFactory是mybatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像,SqlSessionFactory可以通过SqlSessionFactoryBuild对象类获取。

SqlSessionFactoryBuild则可以从xml配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例,每一个mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心,sqlSessionFactory也是线程安全的。

SqlSessionFactory一旦被创建,在应用执行期间都存在,不宜重复创建多次,推荐使用单例模式,SqlSessionFactory是创建SqlSession的工厂。

补充2:SqlSession也是mybatis中的重要对象,是持久化操作的独享。类似于jdbc中的Connection,它是应用程序与持久层之间执行互操作的一个单线程对象,也是Mybatis执行持久化操作的关键对象。

SqlSession对象完全包含以数据库为背景的所执行SQL操作方法。底层封装了JDBC连接,可以用SqlSession的实例对来执行被映射的SQL语句,每个线程有他自己的SqlSession实例,SqlSession的实例不能被共享,SqlSession也不是线程安全的,绝对不能将SqlSession实例的引用放在任何类型的管理范围中。

并且记住使用完SqlSession之后关闭Session很重要,放在finally块来关闭它。 不关一直运行浪费内存降低效率>>>sqlSession.close();

问题7:什么叫做SQL?

SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新也就是CRUD。管理数据库经常用到SQL语句。

问题8:javabean和POJO有什么关系区别?

POJO 和JavaBean是我们常见的两个关键字!

POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。

但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可以是一个 Bean 。但通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat) 的,所以 Java Bean 应具有一个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。

Java Bean 是不能被跨进程访问的。JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子扳、锤、撬等等),而这个扳子就是一个组件。一般在web应用程序中建立一个数据库的映射对象时,我们只能称它为POJO。

POJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊的对象,其主要用来指代那些没有遵从特定的Java对象模型、约定或框架(如EJB)的Java对象。理想地讲,一个POJO是一个不受任何限制的Java对象(除了Java语言规范)

问题9:关于多表查询属性问题?resultType和resultMap是什么? association property是什么?property是什么?

问题10:怎么理解驼峰映射,具体阐述?以及使用方法?

问题11:什么是并发概念?

“并发的概念是指的同一时间段内同时执行多个线程,而且他就是一个渣男,同时支配者很多线程。

问题12:vue怎么控制数据的实时刷新?

通过虚拟的DOM

问题13:什么是MVVM?做啥的?阐述下

MVVM是MVC的增强版,实质上和MVC没有本质区别,只是代码的位置变动而已。

问题14:为什么很多函数对象都要一直封装封装?

1.我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段,从而可以让代码更容易维护。

2.将相关联的变量和函数封装成一个对象,变量描述对象的属性,函数描述对象的行为,这符合我们对客观世界的认识。

3.还实现了对属性的数据访问限制,也加强了程式码的安全性。

问题15:什么是表单的回显?

例如你要修改表单的数据时,数据得先显示出来,此时才能进行修改操作

问题16:怎么理解工具API?

API是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件可以访问的一些功能集,但又无需访问源码或理解内部工作机制的细节.

问题17:POJO指的是什么?

POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。(pojo中封装好的数据,直接用注解开发@Data等)POJO类也给我们在struts框架中的配置带来了很大的方便。

问题18:热部署是什么?

所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。
对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。

问题19:什么是聚合 耦合 内聚 ?

聚合关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。

耦合性也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。
模块间联系越多,其耦合性越强,同时表明其独立性越差(降低耦合性,可以提高其独立性)。耦合性存在于各个领域,而非软件设计中独有的,但是我们只讨论软件工程中的耦合。
在软件工程中,耦合指的就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。
内聚 简单理解成模块内各元素彼结合紧密程度

>>>>>降低耦合度的方法>>>>>>
1、少使用类的继承,多用接口隐藏实现的细节。 Java面向对象编程引入接口除了支持多态外, 隐藏实现细节也是其中一个目的。2、模块的功能化分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。(其实这是高内聚的一种说法,高内聚低耦合一般同时出现)。3、遵循一个定义只在一个地方出现。4、少使用全局变量。5、类属性和方法的声明少用public,多用private关键字。6、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度。7、尽量不用“硬编码”的方式写程序,同时也尽量避免直接用SQL语句操作数据库。8、最后当然就是避免直接操作或调用其它模块或类(内容耦合);如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。>>>>>增强内聚方法>>>>>>1、模块只对外暴露最小限度的接口,形成最低的依赖关系。2、只要对外接口不变,模块内部的修改,就不得影响其他模块。3、删除一个模块,应当只影响有依赖关系的其他模块,而不应该影响其他无关部分。

问题20:什么是负载均衡?

其含义就是指将负载(负载理解为工作量)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
主要应用:代理服务器/地址转化网关/反向代理负载均衡等

问题21:什么是API 网关?

两个相互独立的局域网之间通过路由器进行通信,中间的路由被称之为网关。任何一个应用系统如果需要被其他系统调用,就需要暴露 API,这些 API 代表着一个一个的功能点。
如果两个系统中间通信,在系统之间加上一个中介者协助 API 的调用,这个中介者就是 API 网关。API 网关可以放在两个系统之间,同时也可以放在客户端与服务端之间。网关作为系统的唯一入口,进入系统的所有请求都需要经过 API 网关。

当系统外部的应用或者客户端访问系统的时候,都会遇到这样的情况:
1.系统要判断它们的权限
2.如果传输协议不一致,需要对协议进行转换
3.如果调用水平扩展的服务,需要做负载均衡
4.一旦请求流量超出系统承受的范围,需要做限流操作
5.针对每个请求以及回复,系统会记录响应的日志
只要是涉及到对系统的请求,并且能够从业务中抽离出来的功能,都有可能在网关上实现。

问题22:什么是Nacos?

官方:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。
详细了解:https://www.jianshu.com/p/39ade28c150d

问题23:什么是事务以及回滚概念

事务就是指准备要做的或所做的事情,在计算机语言中是指访问并可能更新数据库中各种数据项的一个程序单元(理解成CRU增删改),也是数据库运行中的逻辑工作单位。
提交事务:Commit Transaction,成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步
事务回滚:End Transaction,失败的结束,将所有的DML(insert、update、delete)语句操作历史记录全部清空。
所谓回滚事务,简单来说就是当一个事务的某一个操作发生问题时,整个事务可以回滚掉,就像没有做任何操作一样,换言之当发生错误或事务被取消,则回滚事务。
当开启事务之后,所有的操作都会被存储在事务日志中,而只有当我们进行提交事务的操作后,才会将我们更新的数据同步到数据表中。

问题24:脏读、幻读、不可重复读?

脏读、幻读、不可重复读

问题25:什么是选型?

选型指的是根据实际业务管理的需要,对硬件、软件及所要用到的技术进行规格选择。

问题26:什么是SQL注入?

SQL注入即是指**web应用程序(意思就是网页)**对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
sql注入分为两类(数字型和字符型)
select * from user where name=‘Test’ >>漏洞点:用户输入被当做字符串 属于字符型sql注入
select * from user where id=1; >> 漏洞点:1后面可以直接sql片段然后进行破坏执行 属于数字型sql注入

用户在网页搜索时故意将name查询导的test两端单引号去掉后使它还是可以正常执行,和其它sql语句片段拼接,这种查询语句会造成数据库中不应该被查到的数据外泄。
sql注入恶意 select * from user where name =Test ’ And ’ 1’=’ 1
以上既处理了单引号问题又是一个可以被控制的语句。

防御sql注入方法:对用户输入的内容进行判断,除了可信内容外,拒接任何含有sql语句。

问题27:什么是微服务?

微服务架构的基础是将单个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署。理解成将一个系统分成若干小程序既微服务独立运作部署开发。

问题28:什么是负载均衡?

非常详细解释:
负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外供应效力而无须其他服务器的辅助。经过某种负载分管技术,将外部发送来的央求均匀分配到对称结构中的某一台服务器上,而接收到央求的服务器独登时回应客户的央求。

均衡负载可以平均分配客户央求到服务器列阵,籍此供应快速获取重要数据,解决很多并发访问效力问题。这种群集技术可以用最少的出资取得接近于大型主机的性能。
其概念诞生的背景: 网络中有一组可以提供相同服务的计算机—类似银行的各个银行点

问题29:什么是ribbon?

跳转页面

问题30:什么是负载均衡策略?

调用策略详情介绍

问题31:什么是代理对象proxy?

代理详情及扩展内容

问题32:什么是lambda表达式?

详细了解

问题33:为什么要在bin目录里面进行cmd操作?

举列:不在目录里面直接cmd话,需要在dos窗口里面不断cd命令,一层一层的进入目录,非常麻烦不方便!另外想要执行一个软件程序都是要在它的文件夹里面,不然光打开窗口执行一个程序的命令没有结果!

问题34:为什么bin目录里面都cmd操作,不在其它目录cmd?

bin目录本身并没有什么特殊的含义, 不过由于一些约定俗成的原因, 我们一般都将可执行文件放到 bin 目录中。
bin 目录用于存放可执行文件外, 我们还使用 lib 用于存放库文件。
include 用于存放头文件, 这些也仅仅是一些约定而已, 为了方便管理。

问题35:什么是Restful 服务?

详细了解

问题36:什么是LoadBalancerClient(负载均衡客户端)?

详细链接

问题37:什么是yml?

yml是springboot中的配置文件,用法详情

问题38:什么是springCloud?

Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。 详细解读
Spring Cloud对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了和云端平台以及和Spring Boot开发框架的集成。
Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性token,全局一致性锁,leader选举,分布式session,集群状态管理等操作提供了一种简单的开发方式。
Spring Cloud 为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。

问题39:什么是feign?

Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易,
只需要创建一个接口,然后在上面添加注解即可。

问题40:什么是 fallbackFactory?

第一步了解概念
第二步了解用法

问题41:什么是socket?

大白话解释socket

问题42:什么是http(超文本传输协议)?

简单介绍概念

问题43:什么是Tomcat 简洁干练总结?

一句话就是Tomcat是开源的(servlet)服务器。多年的开发使Tomcat已越来越完善,被越来越多的网站采用。

问题44:什么是servlet作用是什么?

Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

问题45:什么是RestTemplate?

详细介绍

问题46:微服务中的注册中心?

详细了解

问题47:什么是web服务器?

WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。可以处理浏览器等Web客户端的请求并返回相应响应,Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。也可以放置文件,让其它人浏览或者下载。Web服务器包括Nginx,Apache,IIS等。

工作原理:
1、连接过程:Web服务器和其浏览器之间所建立起来的一种连接。
2、请求过程:Web的浏览器运用socket这个文件向其服务器而提出各种请求。
3、应答过程就是运用HTTP协议把在请求过程中所提出来的请求传输到Web的服务器,进而实施任务处理,然后运用HTTP协议把任务处理的结果传输到Web的浏览器,同时在Web的浏览器上面展示上述所请求之界面。
4、关闭连接就是当上一个过程–应答过程完成以后,Web服务器和其浏览器之间断开连接之过程。Web服务器上述4个步骤环环相扣、紧密相联,逻辑性比较强,可以支持多个进程、多个线程以及多个进程与多个线程相混合的技术。

问题48:什么是newInstance()和new()有什么区别?

newInstance()和new()区别:

1、两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类:

2、newInstance创建类是这个类必须已经加载过且已经连接,new创建类是则不需要这个类加载过

3、newInstance: 弱类型(GC是回收对象的限制条件很低,容易被回收)、低效率、只能调用无参构造,new 强类型(GC不会自动回收,只有所有的指向对象的引用被移除是才会被回收,若对象生命周期已经结束,但引用没有被移除,经常会出现内存溢出)

package com.main;
public interface BeanFactory {//核心方法getBeanObject getBean(String name);
}
public class B implements BeanFactory{@Overridepublic Object getBean(String name) {return null;}
}
public class A implements BeanFactory{@Overridepublic Object getBean(String name) {return null;}
}
public class Test {@SuppressWarnings("rawtypes")public static void main(String[] args) throws Exception {Class a1 = Class.forName("A");BeanFactory a2 =  (BeanFactory) a1.newInstance();System.out.println(a2);Class b1 = Class.forName("B");BeanFactory b2 =  (BeanFactory) b1.newInstance();System.out.println(b2);}}

通过上面实例我们可以很清楚的看到,如果在接口的设计中很多类实现了该接口,我们只需要使用Class中的forName方法加载一下类就可以了,可以将这一段代码提出来作为一个工具类方法,不管有多少类只要实现了该接口我们只要传入需要实例化的路径名就可以实例化,这样大大节省了我们的代码(注:newInstance实例化对象是只能调用无参构造方法,在A、B类中并没有构造方法,是因为每个创建的类都有一个默认的无参构造方法,如果你重写了一个带参构造方法,想要使用newInstance,则必须指定一个无参构造方法,否则会报初始化错误)

问题49:什么是int.class?

首先要搞清楚,int.class是什么?
int.class是Class对象的引用,严格来说是原始类型int的Class对象引用。

区别: int.class是一个引用,注意是一个引用,而不是类 Integer是int类型的包装类,注意是一个类。而不是引用

举一个简单的例子,假设你自己建立了一个Dog类,那么Dog.class就是Dog类型的Class对象引用。每一个类加载之后,类加载器会给建立Class对象,你可以用Class.forName()方法取得该对象的引用,比如,Class d = Class.forName(“Dog”);其中d就是Dog的Class对象的引用。同时,你也可以用Class d = Dog.class;来获取Dog的Class对象的引用。其实Dog.class本身就是引用。
int.class是int类型的Class对象引用。int类型是原始类型,JVM运行时,int类型Class对象已经建立,那么如何获取该对象的引用呢?就是用int.class。另外一种方法是用Integer.TYPE静态成员变量来获取。

问题49:什么是class.forName()?

Class.forName() 是指返回的是一个类。class.forName(),可以通过反射来操作这个类,例如获取属性,获取方法等等。

class.forName是用到了java.lang.Class.forName包的方法,他是通过类的全称来返回一个类,全称是指包名称加类名称,他是通过jvm来加载的,这样就可以获取到这个类了。

Class.forName是用到了java.lang.Class.forName包的方法,全称是指包名称加类名称,是通过jvm来加载的。过jvm就可以获取到这个类,也可以通过反射来操作这个类,例如获取属性,获取方法等等。这种方式在框架中比较常见。

jvm在装载类时会执行类的静态代码段,要记住静态代码是和class绑定的,class装载成功就表示执行了静态代码,而且以后不会再执行这段静态代码。

问题49:什么是GC?

GC是垃圾收集的意思(Gabage Collection),Java提供的GC功能可以自动也只能自动地回收堆内存中不再使用的对象,释放资源(目的),Java语言没有提供释放已分配内存的显式操作方法(gc方法只是通知,不是立即执行)。

问题49:java中的类加载是如何进行?

跳转链接

问题50:java中的类加载机制在编程中的实际应用?

跳转链接

问题51:什么是log4j?

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等…

问题52:什么是apache?

Apache是围着java转的开源公司!主要从事一些开源组件!tomcat!struts!等太多的开源组件啊!Apache自身跟java没关系,但它在java领域确实举足轻重的!
Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML、PHP、JSP、Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置。
Apache是web服务器(静态解析,如HTML),tomcat是java应用服务器(动态解析,如JSP)Tomcat只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行

问题53:什么是servlet?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

问题52:log4j里面的info,debug,error级别有什么区别?

一共分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL

级别是有顺序DEBUG < INFO < WARN < ERROR < FATAL,这里Log4j有一个规则:假设设置了级别为P,如果发生了一个级别Q比P高,则可以启动,否则屏蔽掉。

DEBUG: 这个级别最低的,一般的来说,在系统实际运行过程中,一般都是不输出的。因此这个级别的信息,可以随意的使用。

INFO:这个应该用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。

WARN、ERROR和FATAL:警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态。

问题53:什么是双重校验锁?

跳转链接

问题54:什么是spring容器?

详细链接

问题54:什么是分布式系统?

跳转链接

问题55什么是SDK 同API区别?

传送门

问题56:什么是springcloud中的Ribbon

跳转链接

问题57:什么是VMWare?

VMWare (Virtual Machine ware)是一个“虚拟PC”软件公司.它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。

问题58:什么是UUID?

跳转链接

问题59:什么是三次握手四次挥手?

跳转链接

问题60:什么是TCP协议

跳转链接

问题61:什么是TCP和http协议区别?

跳转链接

问题62:什么是JWT?

基于json数据构建的一个令牌

问题63:什么是HikariCP

跳转链接

问题64:什么是连接池?作用是什么?

跳转链接

问题65:什么是线程池,作用是什么?

跳转链接

问题66:为什么要进行序列化?

跳转链接

问题67:什么是postman?做什么的?

跳转链接

问题68:什么是java的组件?怎么理解?

问题69:什么是超类?

超类就是指的是多个类的父类,如object就是超类
public class A{//定义类A
}
public class B extends A{//定义类B,继承类A
}
则,类A就是超类或父类,类B叫子类

问题70:什么是feign?

跳转链接

问题71:什么是事务的四大特性?

跳转链接

问题72:什么是反射?

跳转链接

问题73:怎么理解Sping的IOC和AOP?

pring就是一个容器,用来封装JavaBean的。原来JavaBean都是自己new出来的,现在都交给Spring来进行管理。为什么需要交给Spring来管理,有什么好处么?这是因为随着业务量的增加,类也越来越多,代码之间的关联性也就是耦合性也越来越强,依赖和引用越来越多,维护起来就会相当困难。而Spring就可以充当这个中间人,你不需要关心其他对象是怎么创建的,只需要关心你自己的业务逻辑代码就可以了。你要对象,我就可以给你。这里就有了一个Spring的核心机制:IOC(Inversion of control)控制反转,就是用来干这个的。

通过Spring来统一管理JavaBean可以说大大的解耦。同样,它还有另外一个功能,就是AOP(Aspect-OrientedProgramming)面向切面编程。简单来说:就是原来的业务在进行之前或者之后,都需要进行一些公共方法的调用或者处理,而这些代码都属于非业务层面的,比如:日志,性能监控,事务。将这些重复性的非业务逻辑代码抽取出来,使用动态代理技术将这些重复性代码织入到目标对象方法中,实现和原来一样的功能。这就是面向切面编程。

074.什么是分布锁?

跳转链接

075.什么是高并发高可用?

详细解释

076.网关gateway里面的谓词工厂?

详细解释

077.什么叫做连接池?

详细解释

078.什么是redis中的快照?

跳转链接

079.什么是rabbitMQ?

详细解释

080.什么是ElasticSearch?

详细解释

java程序员要知道的500个基础小知识相关推荐

  1. Java程序员应该知道的10个调试技巧

    摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试 ...

  2. Java程序员应该知道的10个Eclipse调试技巧

    为什么80%的码农都做不了架构师?>>>    Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 1 条 ...

  3. 优秀Java程序员应该知道的20个实用开源库

    一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库.我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua ...

  4. 资深程序员才知道的30个Python技巧

    Python中的省略号 Python省略号是三点序列,通常在自然语言中使用.但是您可能不知道的是,这也是Python中的有效对象: - Ellipsis 它主要用于NumPy中的矩阵切片操作.但是,您 ...

  5. Python 程序员需要知道的 30 个技巧(转载)

    Python 程序员需要知道的 30 个技巧 原创2017-04-14 伯乐专栏/阿喵 Python开发者 Python开发者 Python开发者 微信号 PythonCoder 功能介绍 人生苦短, ...

  6. [转]读《程序员应该知道的97件事》

    正文之前 熟知软件开发的人都知道这个行业里充满了一次次悲壮的失败,每一座成功项目的丰碑下都埋葬着无数同类型的失败项目.大多数软件项目都像是一次典型的死亡行军 加班是一种习惯,并会逐渐产生依赖 编程远远 ...

  7. 程序员应该知道的97件事

     转自:http://dearymz.blog.163.com/blog/static/205657420139243750104/ 正文之前 熟知软件开发的人都知道这个行业里充满了一次次悲壮的失 ...

  8. 读《程序员应该知道的97件事》

    原文链接:http://dearymz.blog.163.com/blog/static/205657420139243750104/ 正文之前 熟知软件开发的人都知道这个行业里充满了一次次悲壮的失败 ...

  9. 《程序员应该知道的97件事》即将上市

    一.出版信息 [书名]程序员应该知道的97件事 [作者]Kevlin Henney  著 [译者]李军 译 吕骏审校 [出版社]电子工业出版社 [书号]978-7-121-11756-5 [定价]45 ...

最新文章

  1. DoubleSlider
  2. oracle 语法分析表,Oracle 语句优化分析说明
  3. 框架和库有什么区别? [关闭]
  4. 华为链路汇聚命令(静态)
  5. 利用Hog特征和SVM分类器进行行人检测
  6. JVM—堆栈 堆 方法区 静态区 final static 内存分配
  7. spring-boot-devtools
  8. 剑桥大学的下午茶,为何能喝出六十位诺贝尔奖获得者?
  9. leetcood学习笔记-226- 翻转二叉树
  10. Scrapy-Link Extractors(链接提取器)
  11. c语言学习-从键盘输入三个数,按照从小到大(或从大到小)的顺序输出
  12. 动产抵押物监控系统/金融抵押监控系统设计与实现
  13. HDU1164 Eddy's research I(解法二)
  14. 计算机网络——信息安全
  15. CISSP-考纲分析
  16. 那些你可能不知道的视频下载奇技淫巧
  17. Java进阶-常用API
  18. 如何在vscode、remix中结合hardhat编译部署合约
  19. 登录《北京市社会保险网上服务平台》的手机号销号了去哪里更改
  20. 关于tomcat启动时的警告 :maxActive is not used inDBCP2

热门文章

  1. 静态全局变量和全局变量
  2. 字节抖音支付前端实习一面(0507)
  3. 复杂指令集(CISC)和精简指令集(RISC)- 历史的产物
  4. 2264: sequence
  5. C++成长历程 之 字符图形
  6. 毕业设计 基于单片机的智能窗户系统(源码+硬件+论文)
  7. 无参考图像质量评价指标
  8. 动画效果——按钮触摸效果
  9. 常用工具分享1-视频逐帧转图片保存
  10. 开方算法的设计与实现