- 博客(132)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
转载 SpringMVC的执行流程
1. SpringMVC的执行流程先给出执行流程的示意图:浏览器发出请求到达中央处理器(2-3步)DispatchServlet接收到请求后,把请求交给处理器映射器,处理器映射器是springmvc框架中的一种对象,框架把视线了HandlerMapping接口的类均叫做处理器映射器(在框架中是多个)。处理器映射器的作用:根据请求从springmvc容器中获取处理器对象即:MyController myController = ct.getBean(“xxx.do”);处理器映射器把获得的co
2020-11-13 21:12:20 362
原创 SpringMVC学习(五):SpringMVC中的异常处理和拦截器
七、SpringMVC中的异常处理(1)异常处理的思路 系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。 系统的 dao、service、controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端控制器交由异常处理器进行异常处理,如下图:(2)实现步骤1、编写异常类和错误页面//自定义异常类public clas
2020-11-12 23:56:18 459
原创 SpringMVC学习(四):SpringMVC实现文件上传
六、SpringMVC实现文件上传1、普通文件上传form 表单的 enctype 取值必须是:multipart/form-data,(默认值是:application/x-www-form-urlencoded),enctype:是表单请求正文的类型method 属性取值必须是 Post提供一个文件选择域<h3>文件上传</h3><%--传统方式上传文件--%><form action="user/fileupload1" method="post
2020-11-12 21:35:46 419
原创 SpringMVC学习(三):数据处理及跳转
五、响应数据和结果视图1、返回值分类(1)字符串controller方法返回字符串可以指定逻辑视图名,通过试图分析器解析为物理视图地址。//返回值类型是字符串@RequestMapping("/testString")public String testString(Model model){ System.out.println("testString方法执行了"); User user = new User(); user.setUsername("杨健");
2020-11-12 20:43:53 213
原创 SpringMVC学习(二):参数的绑定及常用注解
三、请求参数的绑定1、绑定说明绑定机制我们都知道,表单中请求参数都是基于 key=value 的。SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。 例如: <a href="account/findAccount?accountId=10">查询账户</a>中请求参数是: accountId=10@RequestMapping("/findAccount")public String findAccount(In
2020-11-11 14:33:00 475 2
原创 SpringMVC学习(一):三层架构及入门案例
一、三层架构和SpringMVC1、三层架构我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务端。另一种是B/S架构,也就是浏览器服务器,在javaEE开发中,几乎全都是基于B/S架构的开发,那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多。三层架构中,每层各司其职,我们来说说具体每层都负责哪些方面?表现层: 也就是我们常说的web层,它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求,web 层
2020-11-11 11:08:39 1979
原创 Spring Boot学习(七):分布式(Zookeeper,Dubbo)、热部署、监控管理(Actuator)
十四、Spring Boot与分布式1、分布式应用分布式应用(distributed application)指的是应用程序分布在不同计算机上,通过网络来共同完成一项任务的工作方式。为什么需要分布式?单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的W
2020-11-09 18:54:37 545
原创 Spring Boot学习(六):任务(异步,定时,邮件)、安全
十二、Spring Boot与任务1、异步任务在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,springboot中可以用异步任务解决。两个注解@Async在需要异步执行的方法上标注注解@EnableAsync在主类上标注开启异步任务支持开启异步任务之后,当controller层调用该方法会直接返回结果,该任务异步执行@Servicepublic class Asyn
2020-11-09 18:50:12 563
原创 Spring Boot学习(五):消息(RabbitMQ)与检索(ElasticSearch)
十、Spring Boot与消息消息简介:(1)大多数应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力。(2)消息服务中两个重要概念:消息代理(message broker)和目的地(destination)当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。(3)消息队列主要有两种形式的目的地:队列(queue):点对点消息通信(point-to-point)主题(topic):发布(publish)/订阅(subscribe)消息通信(4)消息代理
2020-11-09 09:55:53 772
原创 Spring Boot学习(四):缓存
九、SpringBoot与缓存1、JSR107Java Caching定义了5个核心接口CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvicer。CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。Cache一个类似Map的数
2020-11-07 23:56:29 1164
原创 Spring Boot学习(三):Docker容器、SpringBoot与数据访问、启动配置原理、自定义starter
五、Docker1、简介Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器,容器启动速度是非常迅速的。2、核心概念docker主机(Host):安装了Docker程序的主机(Docker直接安装在操作系统上);docker客户端(Client):连接docker主机进行操作;docker仓库(Register):用来保存各种打包好的软件镜像
2020-11-06 23:35:51 343
原创 Spring Boot学习(二):Spring Boot与日志(SLF4j)、Web开发(thymeleaf)、SpringMVC自动配置
三、Spring Boot与日志1、日志框架 (1)System.out.println("");将关键数据打印在控制台;去掉?写在一个文件? (2)框架来记录系统的一些运行时信息;日志框架 ; zhanglogging.jar; (3)高大上的几个功能?异步模式?自动归档?xxxx? zhanglogging-good.jar? (4)将以前框架卸下来?换上新的框架,重新修改之前相关的API;zhanglogging-prefect.jar; (5)JDBC—数据库驱动
2020-11-05 00:07:43 659
原创 Spring Boot学习(一):Spring Boot入门、配置文件(YAMY语法)
一、Spring Boot入门1、Spring Boot 简介简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;SpringBoot的优点:快速创建独立运行的Spring项目以及与主流框架继承使用嵌入式的Servlet容器,应用无需打成war包starters自动依赖与版本控制大量的自动配置,简化开发,也可修改默认值无需配置XML,无代码生成,开箱即用准生成环境的运行时应用监控与云计算的天然集成2、微服务2014,mart
2020-11-02 00:09:49 324 1
原创 20201027:算法+错题
文章目录错题一错题二错题三错题四错题五错题六算法一错题一下列代码的运行结果是()public class Test{ static boolean foo(char c) { System.out.print(c); return true; } public static void main( String[] argv ) { int i = 0; for ( foo('A'); foo(
2020-10-30 20:16:27 632
原创 Redis缓存穿透、缓存击穿、缓存雪崩及其解决方案
Redis缓存穿透、缓存雪崩、缓存击穿(面试高频,工作常用!)Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。另外的一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿。目前,业界也都有比较流行的解决方案。缓存穿透(查不到)概述:缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向
2020-10-29 10:11:06 234
原创 Redis主从复制以及Redis哨兵模式
Redis主从复制概念:主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader) ,后者称为从节点(slavefollower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以读为主。默认情况下,每台Redis服务器都是主节点;且-一个主节点可以有多个从节点(或没有从节点) ,但-一个从节点只能有一个主节点。主从复制的作用主要包括:1.数据冗余:主从复制实现了数据的热备份,是持久化之外的- -种数据冗余方
2020-10-29 10:08:22 228
原创 Redis持久化以及Redis实现订阅发布
Redis持久化面试和工作,持久化都是重点!Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能!RDB(Redis DataBase)什么是RDB:在主从复制中,rdb就是备用了,从机上面几乎不使用!在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建( fork ) - -个子进程来进行持久化,会先将数据写入
2020-10-29 10:04:34 445
原创 基础API之Jedis详解&Redis.config配制文件详解
基础API之Jedis详解我们要使用Java来操作Redis什么是Jedis?Jedis是Redis官方推荐的Java连接开发工具!使用Java操作Redis中间件!如果你要使用Java操作Redis,那么一定要对Jedis十分的熟悉!1.导入对应的依赖:<!--导入jedis包--> <dependencies> <dependency> <groupId>redis.clients</grou
2020-10-29 09:59:41 820 1
原创 Redis五大基本类型&三种特殊数据类型&事务操作(悲观锁,乐观锁)
Redis五大基本类型 Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询。Redis内置了复制(replication),LUA脚本(Lua.scripting),LRU驱动事件(LRU eviction),
2020-10-29 09:57:33 489
原创 Redis入门及安装
Redis入门概述Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为结构化数据库。Redis的功能(1)内存存储,持久化,内存中是断电即失,所以说持久化很重要(rdb,aof)(2)效率高,可以用于高速缓存(3)发布订阅系统(4)地图信息分析(5)计时器,计数器(浏
2020-10-29 09:52:47 114
原创 Redis学习:Nosql概述,数据类型,四大分类
Nosql概述(1)单机Mysql的时代(2)Memcached(缓存)+MySQL+垂直拆分网站80%的情况都是在读取,每次都要去查询数据库的话就会很麻烦,所以说我们希望减轻数据库的压力,我们可以使用缓存来保证效率。发展过程:优化数据结构和索引-->文件缓存(IO)-->Memcached(当时最热门的技术)(3)分库分表+水平拆分+MySQL集群技术和业务在发展的同时,对人的要求也越来越高。本质:数据库(读,写)早些年MyISAM;表锁,十分影响效率,高并发下就会出现严
2020-10-29 09:51:02 351
原创 20201026:算法+错题
文章目录错题一错题二错题三错题四错题五错题六错题七错题八算法一错题一关于抽象类和接口叙述正确的是?() 答案及解析:D抽象类:(1)抽象类中可以构造方法(2)抽象类中可以存在普遍属性,方法,静态属性和方法。(3)抽象类中可以存在抽象方法(4)如果一个类中有一个抽象方法,那么当前类一定是抽象类,抽象类不一定有抽象方法(5)抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。(6)抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰关键字使用注意
2020-10-26 22:04:15 155
原创 20201025:算法+错题
文章目录错题一错题二错题三错题四错题五错误六错题七错题八错题九错题十算法一错题一对抽象类的描述正确的是() 答案及解析:DA:抽象类可以有非抽象的方法,而接口中的方法都是抽象类B:Java中类只能单继承,可以继承多个接口,一个类只能继承一个类,但可以继承多个接口C:抽象类必须有构造方法,接口一定没有构造方法,类都有构造方法,但是不能newD:实例化一把指new一个对象,所以抽象类不能实例化错题二假设num已经被创建为一个ArrayList对象,并且最初包含以下整数值:[0,0,4
2020-10-25 23:48:22 133
原创 第 4 章 链表
1、链表(Linked List)介绍1.1、内存结构内存上来看:链表存储空间不连续(不像数组)1.2、逻辑结构逻辑上来看:链表属于线性结构1.3、链表特点链表是以节点的方式来存储,是链式存储data 域存放数据,next 域指向下一个节点链表分带头节点的链表和没有头节点的链表, 根据实际的需求来确定2、链表应用场景2.1、水浒英雄榜使用带 head 头的单向链表实现【水浒英雄排行榜管理】2.2、链表节点定义no :英雄编号name :英雄名字nickN
2020-10-24 23:46:18 139
原创 20201024:算法+错题
文章目录错题一错题二错题三错题四错题五错题六错题七错题八算法一错题一Java接口的方法修饰符可以为?(忽略内部接口) 答案及解析:D考察点:抽象类和接口相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法不同点:1、设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。 2、使
2020-10-24 22:54:42 318
原创 Spring基于注解的IOC以及IOC的案例
使用Spring的IOC实现账户的CRUD1.spring中ioc的常用注解2.案例使用xml方式和注解方式实现单表的CRUD操作 持久层技术选择:dbutils3.改造基于注解的IOC案例,使用纯注解的方式实现 spring的一些新注解使用4.spring和junit整合创建数据库create table account( id int primary key auto_increment, name varchar(40), money float)character
2020-10-24 21:35:19 197
原创 20201023:算法+错题
文章目录错题一错题二错题三错题四错题五错题六错题七算法一错题一下列说法正确的是() 答案及解析:Csychronized关键字和volatile关键字比较:(1)volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。(2)多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞(3)volatile关键字
2020-10-23 15:22:05 161
原创 20201022:算法+错题
文章目录错题一错题二错题三错题四错题五算法一错题一为AB类的一个无形式参数无返回值的方法method书写方法头,可以用AB.method()方式调用,该方法的形式为() 答案及解析:AA:static修饰方法,方法属于类本身,可以类名调用B:正常的实例方法,公有方法,必须实例化对象才可以调用。C:final修饰方法,方法不可以被重写,但是可以被重载。D:abstract修饰方法,方法不能有方法体,abstract修饰方法,方法必须在抽象类或者接口中错题二在Java中,HashMap
2020-10-22 16:01:22 155
原创 20201021:算法+错题
文章目录错题一错题二错题三错题四错题五错题六错题七错题八错题九错题十错题十一算法一错题一下列程序的运行结果是String str1 = "hello";String str2 = "he" + new String("llo");System.err.println(str1 == str2);答案及解析:BString str1 = "hello";这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的; String str2 = "he" + new Stri
2020-10-22 10:24:46 846
原创 20201020:算法+错题
文章目录错题一错题二错题三错题四算法一错题一关于AOP错误的是?答案及解析:CAOP:Aspected Oriented Programming 面向方面编程AOP将程序分解为各个方面或者关注点,偏重于业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。OOP:面向对象编程OOP是对业务分析中抽取的实体进行方法和属性的封装。也可以说AOP是面向业务中的动词领域,OOP是面向名词领域。AOP的一个很重要的特点就是源代码无关性,也就是说如果我们的系统中引用了
2020-10-20 09:48:42 241
原创 20201019:算法+错题
文章目录错题一错题二错题三错题四错题五错题六错题七错题八错题九算法一错题一下面有关java final的基本规则,描述错误的是?正确答案及分析:Bfinal修饰的方法,不允许被子类覆盖。final修饰的类,不能被覆盖。final修饰的变量,不能改变值。final所修饰的成员变量只能赋值一次,可以在类方法中赋值,也可以在声明的时候直接赋值,而final修饰的局部变量可以在声明的时候初始化,也可以在第一次使用的通过方法或者表达式给它赋值。错题二下列哪个线程会导致线程销毁?正确答
2020-10-19 16:25:36 182
原创 leetcode 52:回溯算法--n皇后问题
前几天在学习数据结构与算法的课程中,B站视频老师也讲到了N皇后问题,不过没有深入讲,说是后面会有一节课会专门讲N皇后问题,今天做这个算法就遇到了这个问题,那就先解决一下吧,这道题我在B站上找了几个人讲的解决方法,都不太一样。 回溯算法是搜索算法中一种控制策略,基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原
2020-10-17 23:40:42 359 2
原创 leetcode:977 有序数组的平方
这道题目是我见过最简单的,写下来太轻松了给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例一:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例二:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1 <= A.length <= 10000-10000 <= A[i] <= 10000A 已按非递减顺序排序。class Solution { pub
2020-10-16 21:55:53 72
原创 leetcode:116 填充每个节点的下一个右侧节点指针
这个是补昨天的leetcode给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:输入:{"$id":"1","left":{"$id"
2020-10-16 21:54:59 111
原创 第1,2,3章:稀疏数组和队列
1.数据结构与算法的关系数据结构是一门研究组织数据方式的学科,有了编程也就是有了数据结构。数据结构就是用程序解决生活中遇到的问题。程序=数据结构+算法数据结构就是算法的基础。2.五子棋程序问题如何判断游戏的输赢,可以完成存根退出和继续上局的功能1)棋盘 二维数组<—>稀疏数组线性结构和非线性结构数据结构包括:线性结构和非线性结构线性结构(1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。(2)线性结构有两种不同的存储结构,即顺序存储结构(数
2020-10-16 20:32:11 193
原创 线程安全与线程不安全的总结
下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:(A E)java.util.ConcurrentHashMapjava.util.Mapjava.util.TreeMapjava.util.SortMapjava.util.Hashtablejava.util.HashMap题目分析1.先说HashMap和HashTable的区别最开始的时候 只有HashMap和HashTable,他们最重要的区别就是HashMap不是线程安全的,而HashT
2020-10-16 15:30:34 309
原创 静态代码块,构造代码块,构造函数三者在父类和子类中的执行顺序
检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果(C)父类的静态代码块->子类的静态代码块->父类的构造代码块->父类的构造函数->子类的构造代码块->子类的构造函数public class HelloB extends HelloA { public HelloB() { } { System.out.println("I’m B class"); } static { System.out.println("st
2020-10-16 15:21:33 291
原创 Java多态经典例题
Test.main()函数执行后的输出是(B)public class test1 { public static void main(String[] args) { System.out.println(new B().getValue()); } static class A { protected int value; public A (int v) { setValue(v); }
2020-10-15 10:17:47 2040
原创 leetcode1002:查找常用字符
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。示例 1:输入:["bella","label","roller"]输出:["e","l","l"]示例 2:输入:["cool","lock","cook"]输出:["c","o"]提示:1 <= A.length <= 1001 <
2020-10-14 11:59:36 95
原创 leetcode24.两两交换链表中的节点Java
题目描述:定义一个链表,两两交换其中相邻的节点,并返回交换后的链表你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:假如给定:1->2->3->4 应该返回:2->1->4->3 使用递归来解决,主要就是递归的三部曲:(1)找终止条件:本题终止条件很明显,当递归到链表为空或者链表只剩一个元素的时候,没得交换了,自然就终止了。(2)找返回值:返回给上一层递归的值应该是已经交换完成后的子链表。(3)单次的过程:因为递归是重复做一样
2020-10-13 22:23:30 85
TA创建的收藏夹 TA关注的收藏夹
TA关注的人