聊聊基础02

1.求平均成绩大于 60 分的学生名字和他们个人的平均分。

SELECT avg(score) as score,name FROM t_student GROUP BY name  having score>60

1.值传递与引用传递的区别?

1.值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。

2.引用传传的是地址,就是将实参的地址传递给形参,形参改变了,实参当然被改变了,因为他们指向相同的地址。

2.重载和重写的区别?

1.重写必须继承,重载不用。

2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。

3.Dubbo,redis,MQ,框架原理。

dubbo:

远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

redis:

redis是一个高性能的缓存数据库。

mq:

mq的实现原理其实就是消费者、生产者模式,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息。

4.Spring MVC 的底层实现。

spring MVC是基于servlet功能实现的,通过实现Servlet接口的DispatcherServlet来封装其核心功能实现,通过将请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上传下载文件支持。默认的处理程序是非常简单的Controller接口,只有一个ModelAndView hangleRequest(request, response)方法。Spring提供了一个控制器层次结构,可以派生子类。

5.spring 框架的 IOC ,AOP 个人的理解。

ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。

6.struts struts2 springmvc 框架底层实现和他们的区别。

1.Struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用get和set方法吧request中的数据注入.Struts2中一个action对应一个requset上下文.

2.SpringMVC是方法级别的拦截,拦截到方法后根据参数的注解,把requset数据注入进去springmvc容器中一个方法对应一个request上下文.

3.springmvc方法之间基本独立,独享requset和response之间的数据。请求数据通过参数获取,处理结果通过model Map交回给框架。(方法之间不共享变量)Struts虽然方法之间也是独立的,当时action变量是可以共享的

4.处理ajax的请求很方便,只需一个注解2responseBody ,直接返回响应文本。

5.SpingMVC的实现是servlft,Struts2是filter。

6.intercepter的实现机制。Struts 有自己的拦截器机制.interceptor,Springmvc用的是独立的AOP方式,导致Springmvc的配置文件比struts2的配置文件多。

7.hibernate 框架的一级缓存和二级缓存

1.一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。

2.二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。

8.java类加载器是什么。

java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制.JVM中用来完成上述功能的具体实现就是类加载器.类加载器读取.class字节码文件将其转换成java.lang.Class类的一个实例.每个实例用来表示一个java类.通过该实例的newInstance()方法可以创建出一个该类的对象.

9.java 的内存机制

堆:
引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。堆内存主要作用是存放运行时创建(new)的对象。(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)
栈:
基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。栈内存的主要作用是存放基本数据类型和引用变量。栈的内存管理是通过栈的"后进先出"模式来实现的。(主要用来执行程序,存取速度快,大小和生存期必须确定,缺乏灵活性)

10.java 的数据结构

11.redis 基本数据类型

Redis的键值可以使用物种数据类型:字符串,散列表,列表,集合,有序集合。

12.spring 事务的传播机制

PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

13.bean 的作用

对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean、配置Bean。对于Spring创建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”。

14.用过什么设计模式

1.生产者、消费者模式。

2.单例模式。

3.代理模式。

15.单例模式多例的区别

16.什么是工厂模式,工厂模式都有哪几种,什么情况下用。

通常是创建一个类的实例的时候,我们可以使用工厂模式来创建一个实例。

17.java 的反射机制是什么

反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。

18.什么是动态代理

代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。

19.http的7层实现(或者叫 3 次握手是什么)?

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

20.防止 sql 注入用哪几种方式?

1.采用参数化查询方式。

2.关键字过滤。

21.高并发如何处理

面太大,1.集群+负载均衡+缓存+带宽、分布式服务,分库分表,服务降级,

22.什么是同步锁

同步锁,提到实现同步的7中方式.

23.什么是乐观锁,什么是悲观锁.

乐观锁,主要是给一个版本号,在做更新操作的时候, 匹配版本号是否发生变化,如果变化了,则认为数据已经呗修改。

悲观锁,在写操作的过程中,全程占有资源。

24.sql 如何优化;sql 的执行方式是什么样的;如何知道 sql 是怎么执行的?

1.通过show status和应用特点了解各种 SQL的执行频率。

2. 定位执行效率较低的SQL语句。

3. 通过EXPLAIN 分析低效 SQL的执行计划。

4.建立索引。

5.查询进行优化,应尽量避免全表扫描。


25.spring 的配置文件


26.数据交互的加密方式


27.内存分配


28.说出数据连接池的工作机制是什么?

    J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序 需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接, 池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成 后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 实现方式,返回的 Connection 是原始 Connection 的代理,代理 Connection 的 close 方法不是真 正关连接,而是把它代理的 Connection 对象还回到连接池中。

29.接口和抽象类的区别是什么?

    Java 提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于: 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。 类可以实现很多个接口,但是只能继承一个抽象类 类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现 抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 抽象类可以在不提供接口方法实现的情况下实现接口。 Java 接口中声明的变量默认都是 final 的。抽象类可以包含非 final 的变量。 Java 接口中的成员函数默认是 public 的。抽象类的成员函数可以是 private, protected 或者是 public。 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包 含 main 方法的话是可以被调用的。

30.概括的解释下线程的几种可用状态?

线程在执行过程中,可以处于下面几种状态:

• 就绪(Runnable):线程准备运行,不一定立马就能开始执行。

• 运行中(Running):进程正在执行线程的代码。

• 等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。

• 睡眠中(Sleeping):线程被强制睡眠。

• I/O 阻塞(Blocked on I/O):等待 I/O 操作完成。

• 同步阻塞(Blocked on Synchronization):等待获取锁。

• 死亡(Dead):线程完成了执行。

31.HashMap和Hashtable有什么区别?

HashMap 和 Hashtable 都实现了 Map 接口,因此很多特性非常相似。但是,他们 有以下不同点:

• HashMap 允许键和值是 null,而 Hashtable 不允许键或者值是 null。

• Hashtable 是同步的,而 HashMap 不是。因此,HashMap 更适合于单线程环境,

• 而 Hashtable 适合于多线程环境。

• HashMap 提供了可供应用迭代的键的集合,因此,HashMap 是快速失败的。另一方面,Hashtable 提供了对键的列举(Enumeration)。

• 一般认为 Hashtable 是一个遗留的类

32. jsp 九大内置对象?

application page request response session exception out config pageContext .

原文地址:https://www.cnblogs.com/_popc/p/7384435.html