🧱 后端开发与架构
未读Apache Log4j 2 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。 log4j2 是 log4j 1.x 的升级版,参考了 logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有: 主要特点 异常处理,在的 logback 中,追加程序中的异常不会被应用感知到,但是在 log4j2 中,提供了一些异常处理机制。 性能提升,log4j2 相比于 log4j 1 和 logback 都具有很明显的性能提升,后面会有官方测试的数据。 自动重载配置,参考了的 logback 的设计,当然会提供自动刷新参数配置,最实用的就是我们在生产上可以动态的修改日志的级别而不需要重启应用 - 那对监控来说,是非常敏感的。 无垃圾机制,log4j2 在大部分情况下,都可以使用其设计的一套无垃圾机制,避免频繁的日志收集导致的 jvm gc。 一些概念之前看官方文档摘抄了一些概念,这里懒得翻译了,使用的 log4j 的都应该清楚,这里 ...
🧩 开发框架与中间件
未读Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,广泛用于构建网络应用程序。它允许开发者使用 JavaScript 来编写服务器端代码。本文将为你提供 Node.js 的入门步骤以及一些实用工具的使用。 安装 Node.js1. 安装 n 模块首先,你需要安装 n 模块,这是一个强大的版本控制工具,可以方便地管理多个 Node.js 版本。 1sudo npm install -g n 2. 更新到最新稳定版使用 n 可以轻松升级到最新的 Node.js 稳定版: 1sudo n stable 3. 升级到最新版本如果你想要安装最新版本的 Node.js,无论是稳定版还是长期支持(LTS)版,可以使用以下命令: 1sudo n latest 4. 安装指定版本n 还允许你安装任意历史版本的 Node.js。你可以使用版本号来升级到特定的版本: 1sudo n v0.10.26 或 sudo n 0.10.26 5. 切换版本要切换到某个特定的 Node.js 版本,可以使用以下命令: 1sudo n 7.10.0 6. 删除指定 ...
🖥️ 基础设施与运维
未读在 Linux 系统中,Python 是一个非常流行的编程语言,被广泛应用于 Web 开发、数据分析、人工智能等多个领域。本文将详细介绍如何在 CentOS 操作系统中安装和配置 Python 环境。 安装步骤1. 解压 Python 包首先,你需要下载 Python 的源代码包并将其解压到你的服务器上。由于你要求不使用外部工具安装 Python,我们将手动进行这一步。 12# 假设你已经下载了 Python 的源码压缩包到 /usr/local/src 目录下tar -xzf Python-3.8.x.tar.gz -C /usr/local/src 2. 进入解压后的文件夹接下来,进入 Python 的源代码目录: 1cd /usr/local/src/Python-3.8.x 3. 配置和安装 Python现在,我们可以执行 configure 脚本来配置 Python 的编译选项。如果你需要指定安装目录,可以添加 --prefix 参数。 12./configure --prefix=/opt/python38make && make install ...
🧩 开发框架与中间件
未读Redis 是一个开源的内存数据结构存储系统,它提供了多种数据类型和丰富的操作命令,使得它在处理快速读写和高并发场景下表现出色。下面将详细介绍 Redis 的主要特性和应用场景。 1. 支持持久化RDB 持久化RDB 是 Redis 的本地持久化方式,通过周期性地将内存中的数据写入磁盘来保存数据状态。在 redis.conf 配置文件中,可以通过设置定时任务或手动触发 RDB 快照。 AOF 持久化AOF(Append Only File)是另一种持久化方法,它记录每次写操作到文件中。当 Redis 重启时,它会重新执行这些命令来重建数据状态。开启 AOF 持久化对于防止数据丢失非常有用,但它可能会消耗更多磁盘空间。 2. 丰富的数据类型Redis 支持多种数据类型,包括: String:最简单的键值对存储。 List:列表,可以用于消息队列等场景。 Set:集合,支持成员的唯一性和操作如求交集、并集等。 Sorted Set:有序集合,常用于排行榜应用。 Hash:哈希表,适合用于存储结构化数据。 这些数据类型提供了高效的数据结构和丰富的操作命令,使得 Redis 可以适 ...
🧩 开发框架与中间件
未读RESTful API 是一种网络应用架构风格,强调通过统一的接口和资源操作设计 API。它使用 HTTP 协议中的不同方法来创建、读取、更新和删除资源,让开发者和用户能够直观地理解和操作应用程序。 RESTful API 设计原则1. 资源导向RESTful API 以资源为中心进行设计。每个资源都有一个唯一的 URI,客户端可以通过这个 URI 访问相应的资源。 URL 示例: GET /zoos:查看所有动物园 POST /zoos:创建一个新动物园 GET /zoos/1:获取指定动物园的信息 2. 方法使用RESTful API 使用 HTTP 协议中的不同方法来执行不同的操作: GET:从服务器检索资源。 POST:在服务器上新建一个资源。 PUT:更新资源(客户端提供改变后的完整资源)。 PATCH:部分更新资源(客户端提供改变的属性)。 DELETE:删除资源。 3. 状态码使用RESTful API 使用标准的 HTTP 状态码来表示请求的结果: 200 OK:成功检索数据 201 Created:创建新资 ...
🧱 后端开发与架构
未读Web 服务器一旦发出响应,一个请求响应过程就结束了.当再次发出请求时,Web 服务器不记得曾就做过的请求,也不记得给用户发出过响应.,这就是 http 的无状态模式 当需要跨多个请求需要保留与客户端会话状态时,我们有 4 种解决方案 表单隐藏字段<input type="hidden" name="userName" value="…">作用: 对用户在网上的访问进行会话跟踪 为服务器提供预定义的输入 存储动态产生的网页的上下文信息 缺点: 只有当每个网页是动态生成的才有效 Cookie将数据已键值对的形式通过响应保存在客户端方法: Cookie(name,value) get/setComment(String comment): 注释 get/setDomain(String domainPattern): 得到/设置应用 Cookie 的域 setMaxAge(int lifetime) 设置过期时间,默认为负数,表示在关闭浏览器后过期 getMaxAge() g ...
🧩 开发框架与中间件
未读APP 服务端的 Token 验证通过拦截器对使用了 @Authorization 注解的方法进行请求拦截,从 http header 中取出 token 信息,验证其是否合法。非法直接返回 401 错误,合法将 token 对应的 user key 存入 request 中后继续执行。具体实现代码: 1234567891011121314151617181920212223242526272829303132public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //如果不是映射到方法直接通过 if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod handlerMethod = (HandlerM ...
🧩 开发框架与中间件
未读什么是 RESTREST (Representational State Transfer) 是一种软件架构风格。它将服务端的信息和功能等所有事物统称为资源,客户端的请求实际就是对资源进行操作,它的主要特点有: - 每一个资源都会对应一个独一无二的 url - 客户端通过 HTTP 的 GET、POST、PUT、DELETE 请求方法对资源进行查询、创建、修改、删除操作 - 客户端与服务端的交互必须是无状态的 使用 Token 进行身份鉴权网站应用一般使用 Session 进行登录用户信息的存储及验证,而在移动端使用 Token 则更加普遍。它们之间并没有太大区别,Token 比较像是一个更加精简的自定义的 Session。Session 的主要功能是保持会话信息,而 Token 则只用于登录用户的身份鉴权。所以在移动端使用 Token 会比使用 Session 更加简易并且有更高的安全性,同时也更加符合 RESTful 中无状态的定义。 交互流程 客户端通过登录请求提交用户名和密码,服务端验证通过后生成一个 Token 与该用户进行关联,并将 Token 返回给客户端。 客户 ...
🧩 开发框架与中间件
未读作用: 两者都可以用来装配 bean,可以写在字段上或写在 setter 方法上。 默认注入方式: @Autowired (Spring 注解): 默认按类型 (byType) 注入。 @Resource (J2EE 注解): 默认按名称 (byName) 注入。 required 属性: @Autowired: 默认要求依赖对象必须存在,可以设置 required=false 允许 null 值。 @Resource: 默认情况下,找不到匹配的 bean 会抛出异常。 指定名称: @Autowired: 可以结合 @Qualifier 注解指定 bean 的名称。 @Resource: 可以直接在注解中通过 name 属性指定 bean 的名称。 代码示例: 1234567// 使用 @Autowired@Autowired@Qualifier("baseDao")private BaseDao baseDao;// 使用 @Resource@Resource(name="baseDao")private Ba ...
使用 Intellij idea 整合 SpringMVC+Spring+Mybatis 框架,基于 Annotation. intellij 配置1.新建一个 Spring 工程,勾选 SpringMVC 和 Web Application 支持,不选择下载 jar 包,而是自己导入 jar 包 2.新建好项目之后的包结构如下: 3.在 WEB-INF 目录下新建 classes 和 lib 这 2 个文件夹F4 进入项目设置页面.a. 设置编译后的 class 文件输出路径 b. 将 lib 添加到构建路径中 c. 添加 Tomcat jar 包 4.配置 Tomcat 服务器 因为以前设置过默认配置,这里就简单的设置一下就可以了 5.将需要的 jar 包复制到 lib 文件夹下 xml 配置1.在 src 目录下新建: spring-mvc.xml SpringMVC 使用 spring-config.xml Spring 容器使用 mybatis-config.xml Mybatis 配置文件 2.web.xml 的配置 a.配置 SpringMVC 的 ...
🧩 开发框架与中间件
未读SpringMVCSimpleMappingExceptionResolver在 Spring 的配置文件 applicationContext.xml 中增加以下内容: 123456789101112131415<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --> <property name="defaultErrorView" value="error"></property> <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为 exception --> <property name="exceptionAttribute" value="ex"></property> ...
🧱 后端开发与架构
未读框架模式和设计模式的区别有很多程序员往往把框架模式和设计模式混淆,认为 MVC 是一种设计模式。实际上它们完全是不同的概念。框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块; 代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示; 设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。框架模式有哪些?MVC、MTV、MVP、CBD、ORM 等等;框架有哪些?C++ 语言的 QT、 ...
SSH 整合时实现了简单的登录功能,这次实现简单的注册功能.需要改动的地方下面会提到,没有提到的地方就不改动 要求1.登录 register.jsp 页面,填入必要信息,点击注册;2.如果成功,跳转到 success.jsp,并显示出所有的用户信息;3.如果注册失败,则跳转到 error.jsp 页面4.实现分页功能,实现删除功能 实现1.新建 t_user 表 12345678910111213141516171819202122232425262728293031323334353637-- ------------------------------ Table structure for t_user-- ----------------------------DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `f_name` varchar(255) DEFAULT NULL, `f_password` varchar( ...
🧩 开发框架与中间件
未读1.mapper.xml 配置 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191<?xml versio ...















