JavaEE
JavaEE首先JavaEE就是在之前JavaSE本地运行的基础上,增加了企业级Web应用中的技术标准,也就是说现在JavaEE可以开发WEB应用了。
JavaEE平台包含了13个技术规范
JAVEE阶段需要学习的核心技能
Servlet、JSP、JSTL/EL、JavaBean、MVC模式、过滤器Filter、监听器listener、Ajax 分页
然后既然是JavaEE开发那么就需要有个服务器,然后再利用JavaEE的库来开发web项目,然后常用的Web容器有Tomcat和Jetty
WEB应用运行流程:
用户访问 http://localhost:8080/hello
请求到达 Tomcat(Web 容器)
Tomcat 根据 web.xml 或注解,找到对应的 Servlet
Servlet 处理请求,可能调用 Service → DAO → 数据库
处理完成后,跳转到 JSP 页面(View)
JSP 被编译成 Servlet,结合 JSTL/EL 渲染 HTML
返回 HTML 响应给浏览器
Filter 可能在请求前后做日志、编码、权限检查
Listener 可 ...
Spring
Spring核心技术Spring框架的控制反转IoC 容器。
Spring面相切面编程 AOP 技术。
此外还有Spring和AspectJ
IOC容器Spring IoC容器和Bean简介原本是 “对象自己找依赖”(比如 A 类要用到 B 类,A 自己 new B、自己找 B 的实例),现在是 “容器给对象送依赖”(A 不用管 B 怎么来,容器提前准备好 B,在创建 A 时主动 “塞” 给 A)—— 这种 “找依赖的权力从对象手里转到容器手里” 的反转,就是 IoC;而容器 “塞依赖” 的具体动作,就是 DI(依赖注入)
IoC 是 “设计原则”(核心思想是 “反转依赖控制权”),DI 是 “实现方式”(具体怎么把依赖给对象)—— 二者本质是同一概念的不同角度描述,Spring 用 DI 的方式实现了 IoC 原则。
一个对象(比如 A 类)要和其他对象(比如 B 类、C 类,也就是 A 的 “依赖”)合作,不用自己去创建或查找这些依赖,只需要 “明确告诉容器自己需要什么”—— 告诉的方式有 3 种:
构造参数:A 的构造方法里写public A(B b) { ... & ...
Netty
NettyBIO、NIO、AIO 的区别BIO、AIO和NIO是Java中不同的I/O模型,它们在处理输入输出操作时有不同的特点。
BIO: 阻塞式的I/O模型。当一个线程执行I/O操作时,如果数据还没准备好,这个线程会被阻塞,直到数据到达。适合连接数较少且固定的场景,但扩展性较差。在Java中用ServerSocket和Socket的accpet方法,用来阻塞,等待客户端连接。
NIO: 非阻塞的I/O模型。NIO使用缓冲区和通道来处理数据,提高了I/O操作的效率。支持面向缓冲区的读写操作,可以处理大量并发的连接。在java.nio包中提供了Selector、Channel等类实现高效的非阻塞IO
AIO: 异步I/O模型,从Java 7开始引入。在AIO中,I/O操作被发起后,线程可以继续执行其他任务,一旦I/O操作完成,操作系统会通知线程。适合需要处理大量并发I/O操作,且希望避免I/O操作阻塞线程的场景。在Java中通过AsynchronousSocketChannel类来实现异步IO
使用场景:
BIO适合低并发、连接数较少的应用。
NIO适合高并发、需要处理大量连接的应用 ...
RPC了解
RPC了解定义RPC = Remote Procedure Call 远程过程调用
简单来说像调用本地方法一样,调用远程服务器上的方法。
常见的RPC框架
Dubbo
阿里巴巴
国内最流行,功能强大,集成 ZooKeeper
gRPC
Google
跨语言,高性能,使用 Protobuf 和 HTTP/2
Thrift
Apache
Facebook 开源,支持多语言
Spring Cloud OpenFeign
Spring
基于 HTTP 的轻量级 RPC
RPC核心组件
组件
作用
动态代理
让调用远程方法像调用本地方法一样
序列化/反序列化
把对象转成字节流在网络上传输(如 JSON、Protobuf、Hessian)
网络通信
使用 TCP/HTTP 传输数据(如 Netty、OkHttp)
服务发现
找到服务端的 IP 和端口(如 ZooKeeper、Nacos)
负载均衡
多个服务实例时,选择哪个调用(如轮询、随机)
为什么需要RPC
在单体应用中,所有代码在一个进程里,方法调用是“本地调用”。
但在 ...
Java线程池的原理
Java线程池的原理线程池是一种池化技术,用于创建和管理线程,避免频繁的创建和销毁,提高性能和响应速度。
Java线程池有几个核心参数
1、核心线程数
2、最大线程数
3、工作队列
4、最大空闲时间
5、拒绝策略
主要工作原理如下
1、默认情况下是不会创建线程的,只有当任务提交也就是执行了submit方法之后才会创建线程
2、当核心线程数满了之后,也不会新建线程,而是把任务堆积在工作队列中
3、当核心线程满了,并且工作队列也满了才会创建新线程
4、当核心线程满了,并且超过最大线程数的时候就会采取拒绝策略
5、当线程运行一段时间,存在空闲线程的时候,如果空闲线程超过最大空闲时间就会销毁线程,直到线程数等于核心线程数才停止销毁。
通常会使用自定义线程池,一般通过java.util.concurrent.ThreadPoolExecutor构造函数
123456789public ThreadPoolExecutor( int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long k ...
Mybatis的执行原理
Mybatis的执行原理前置知识JDBC要说这个首先要知道JDBC的原理:首先JDBC其实也是远程调用的一种应用,然后Sun公司已经提供好对应的API了,然后JDBC访问数据库编码步骤就是先加载驱动Driver,然后创建数据库链接Connection,然后创建一个发送Sql的发送器Statement,然后通过Statement发送sql语句,然后Statement返回结果集,然后处理然后关闭资源就好了。
反射Java 反射的实现依赖于 JVM 的类加载机制 和 运行时的元数据存储。
类加载过程
当 JVM 加载一个类时,会创建一个对应的 Class 对象。
这个 Class 对象包含了类的所有元信息:字段、方法、构造器、注解、父类、接口等。
这些信息存储在 JVM 的 方法区(Method Area) 或 元空间(Metaspace,JDK 8+)。
反射如何工作
Class.forName() 触发类加载,返回 Class 实例。
通过 Class 实例可以获取 Field、Method、Constructor 等对象。
调用 invoke()、set() 等方法时,J ...
八股文集合
八股文集合计算机网络介绍一下TCP/IP模型和OSI模型的区别OSI和TCP/IP都是一个计算机进行通信的一种体系,而OSI模型师国际组织制定的一个标准体系,TCP/IP是实际网络通信中的实际的体系结构。
OSI自底向上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
TCP/IP分四层,每个层负责特定的网络功能。
自底向上是网络接口层,这层对应OSI的数据链路层和物理层,,这层负责物理传输媒介的定义和管理,比如有线的以太网传输,无线的WIFI传输,此外,网络接口层还管理硬件地址(MAC地址)的管理。
然后是网络层,这层对应OSI的网络层,主要协议是IP,他负责数据包的路由和转发,选择一个最佳路径来将数据包从源主机传送到目标主机。IP协议使用IP地址来进行逻辑地址寻址。
传输层对应OSI的传输层,这层负责应用与应用间的数据传输。主要的传输协议是TCP和UDP。TCP提供可靠的数据传输,UDP提供不可靠的实时传输。
应用层对应OSI的应用层、表示层和会话层,他用于网络上的各种应用提供服务,比如网页浏览,文件传输等。
以上就是osi和tcp/ip的区别了。
从输入URL到页 ...
算法合集
算法合集前导算法讲解019【必备】算法笔试中处理输入和输出_哔哩哔哩_bilibili
这是很必要的
简单来说用BufferReader可以把所有文件用内存来托管
然后用StreamTokenizer可以忽略所有的空格和换行把一个个数字读出来
按行读不推荐用动态
推荐使用全局静态空间
IO模板规定数据量的题性型
12345678910111213141516171819202122232425262728293031323334353637383940414243444546import java.io.*;public class Main{ //题目给定的行最大数据量 public static int MAXN = 201; //题目给定的列的最大数据量 public static int MAXM = 201; //静态的空间,不停的复用 public static int[][] mat = new int[MAXN][MAXM]; //能用静态就用静态 public stati ...







