有些文字,即使隔了多年,再看时,依然会触动不已。 从你的全世界路过 一个人的记忆就是座城市,时间腐蚀着一切建筑,把高楼和道路全部沙化。如果你不往前走,就会被沙子掩埋。所以我们泪流满面,步步回头,可是只能往前走。 2004 年的时候心灰意冷不想劳动,每天捧着电脑打牌,一打就是十几个钟头。但我的技术很差,毫无章法可言,唯一的优势是打字快,于是创造了自己的战术,叫作废话流。 一发牌,我就开始在聊天框里跟玩家说话:“赤焰天使,你娘舅最近身体好吗?”“天使为嘛是赤焰的呢,会炖熟的,你过日子要小心。”“咦,苍凉之心,好久不见你怎么改名字了?”“毛茸茸你好,帮帮我可以吗,我膝盖肿肿的呢……” 结果很多玩家忍无可忍,啪啪啪乱出牌,骂一句“我去你大爷的”就退出了。这样我靠打字赢了打牌,赚到胜率 75%。后来慢慢不管用,我又想了新招。 我在对话框里讲故事。 系统发牌,我打字:“从前有个神父,他住的村子里最美的姑娘叫小芳。突然小芳怀孕了,死也不肯说是谁的孩子。村民就暴打她,要将她浸猪笼。小芳哭着说,是神父的呢。村民一起冲进教堂,神父没有否认,任凭他们打断了自己的双腿。过了二十年,奇迹发生了。” 然 ...
课外开发
未读订单状态定时处理、来单提醒和客户催单 Spring Task介绍Spring Task 是 Spring 框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 应用场景: 信用卡每月还款提醒 银行贷款每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 cron 表达式cron 表达式其实就是一个字符串,通过 cron 表达式可以定义任务触发的时间 构成规则:分成 6 或 7 个域,由空格分隔开,每个域代表一个含义 每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选) 例如:2024 年 10 月 17 日上午 10 点整 对应的 cron 表达式为:0 0 10 17 10 ?2024通常周跟日的位置会有一个问号一个日期 在线生成器:https://cron.ciding.cc/ 入门案例 导入 maven 坐标 spring-context(已存在) 启动类添加注解@EnableScheduling 开启任务调度 自定义定时任务类 订单状态定时处理处理超时订单1234567891011121314151617/** * 定时任务:处理超时订单 ...
大学生涯
未读Web 场景1.web 开发简介Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置) The auto-configuration adds the following features on top of Spring’s defaults: Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans. 内容协商视图解析器和 BeanName 视图解析器 Support for serving static resources, including support for WebJars (covered later in this document)). 静态资源(包括 webjars) Automatic registration of Converter, GenericConverter, and Forma ...
大学生涯
未读最佳实践1.SpringBoot 应用如何编写 引入场景依赖 官方文档 查看自动配置了哪些(选做) 自己分析,引入场景对应的自动配置一般都生效了 配置文件中 debug=true 开启自动配置报告。 Negative(不生效) Positive(生效) 是否需要修改 参照文档修改配置项 官方文档 自己分析。xxxxProperties 绑定了配置文件的哪些。 自定义加入或者替换组件 @Bean、@Component… 自定义器 XXXXXCustomizer; 2.Lombok 简化开发Lombok 用标签方式代替构造器、getter/setter、toString()等鸡肋代码。 spring boot 已经管理 Lombok。引入依赖: 1234<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency> IDEA 中 F ...
大学生涯
未读底层注解1. @Configuration详解基本使用 Full模式与Lite模式 示例123456789101112131415161718192021222324252627/** * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的 * 2、配置类本身也是组件 * 3、proxyBeanMethods:代理bean的方法 * Full(proxyBeanMethods = true)(保证每个@Bean方法被调用多少次返回的组件都是单实例的)(默认)全配置 * Lite(proxyBeanMethods = false)(每个@Bean方法被调用多少次返回的组件都是新创建的)轻量级配置 */@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件public class MyConfig { /** * Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象 * @return ...
大学生涯
未读一. Spring生态圈 覆盖了: web开发 数据访问 安全控制 分布式 消息服务 移动开发 批处理 Spring5重大升级 响应式编程 内部源码设计 基于Java8的一些新特性,如:接口默认实现。重新设计源码架构。 为什么用SpringBoot Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.link 能快速创建出生产级别的Spring应用。 SpringBoot优点 Create stand-alone Spring applications 创建独立Spring应用 Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files) 内嵌web服务器 Provide opinionated ‘starter’ dependencies to simplify your build configuratio ...
一. Filter 过滤器1. 概括过滤器,顾名思义就是对事物进行过滤的,在 Web 中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。如登录控制,权限管理,过滤敏感词汇等,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 2. 原理当我们使用过滤器时,过滤器会对浏览器的请求进行过滤,过滤器可以动态的分为 3 个部分,1.放行之前的代码,2.放行,3.放行后的代码,这 3 个部分分别会发挥不同作用。 第一部分代码会对浏览器请求进行第一次过滤,然后继续执行 第二部分代码就是将游览器请求放行,如果还有过滤器,那么就继续交给下一个过滤器 第三部分代码就是对返回的 Web 资源再次进行过滤处理我们使用过滤器,也就是说,不止请求会经过过滤器,我们的响应也会经过过滤器。 3. api定义过滤器 12345678910111213141516171819//定义一个类,实现一个标准的Filter过滤器的接口public class DemoFilter implements Filter { ...
一. 概述Spring Security 是一个 Java 框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security 基于过滤器链的概念,可以轻松地集成到任何基于 Spring 的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security 还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。总之,Spring Security 是一个强大且易于使用的框架,可以帮助开发人员提高应用程序的安全性和可靠性。 二. 先决条件Spring Security 要求有 Java 8 或更高的运行环境。 由于 Spring Security 旨在以独立的方式运行,你不需要在你的 Java 运行时环境中放置任何特殊的配置文件。特别是,你不需要配置一个特殊的 Java 认证和授权服务(JAAS)策略文件,也不需要把 Spring Security 放到普通的 classpath 位置。 同样地,如果你使用 EJB 容器或 Servlet 容 ...
一. 设计原则1. 一致 Consistency与现实生活一致: 与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念; 在界面中一致: 所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。 2. 反馈 Feedback控制反馈: 通过界面样式和交互动效让用户可以清晰的感知自己的操作; 页面反馈: 操作后,通过页面元素的变化清晰地展现当前状态。 3. 效率 Efficiency简化流程: 设计简洁直观的操作流程; 清晰明确: 语言表达清晰且表意明确,让用户快速理解进而作出决策; 帮助用户识别: 界面简单直白,让用户快速识别而非回忆,减少用户记忆负担。 4. 可控 Controllability用户决策: 根据场景可给予用户操作建议或安全提示,但不能代替用户进行决策; 结果可控: 用户可以自由的进行操作,包括撤销、回退和终止当前操作等。 二. 导航导航可以解决用户在访问页面时:在哪里,去哪里,怎样去的问题。 一般导航会有「侧栏导航」和「顶部导航」2 种类型。 1. 选择合适的导航选择合适的导航可以让用户在产品的使用过程中非常流畅,相反若是不合适就会 ...
课外开发
未读响应结构一个请求的响应包含以下信息。 1234567891011121314151617181920212223{ // `data` 由服务器提供的响应 data: {}, // `status` 来自服务器响应的 HTTP 状态码 status: 200, // `statusText` 来自服务器响应的 HTTP 状态信息 statusText: 'OK', // `headers` 是服务器响应头 // 所有的 header 名称都是小写,而且可以使用方括号语法访问 // 例如: `response.headers['content-type']` headers: {}, // `config` 是 `axios` 请求的配置信息 config: {}, // `request` 是生成此响应的请求 // 在node.js中它是最后一个ClientRequest实例 (in redirects), // 在浏览器中则是 XMLHttpRe ...