笔记

Springboot的功能和作用
在这里插入图片描述

加载过程
启动的时候通过@ SpringBootApplication和入口函数去启动程序然后@EnableAutoConfiguration自动装配,将pom启动器里面包放入classpath,配置内置tomcat,通过@ComponentScan去扫描内部的包和类加载到当前容器里面

技术/业务难题及解决
之前做的是一个旅游项目,主要是给一个旅行社做的项目,是想把线下的业务转到线上,进行一个旅游线路的预制定和下单,旅游景点的展示等等,当时用的是比较主流的框架springmvc,mybatis,springboot,thymeleaf模板引擎还有layui,ajax来搭建整个项目的架构和环境,功能比较简单,里面就是首页展示,轮播图展示,导游展示和定制,跟团,自助的游玩还有个人中心
这种项目不存在很复杂或很难的业务模块,但是业务流程这一块但是在实现的时候需要注意,比如说定制游,当时是这么考虑的,先在网上让客户去填写基本信息和需求及心理价位,
当时实现是想…直接在线上把方案制定出来,还是下线沟通,和客户面对面确定方案再把方案通过系统进行上传整理出来,过程的实现花了一些时间去考虑,这个功能的实现相比其他功能来说要复杂一些,业务的确定要麻烦一点,其他都没什么问题

项目后的提升
三个方面
单个技术,项目里面用到的框架平时用到的也比较多,更加熟悉了这些框架的使用,操作数据库统计查询,sql语句这一块也有所提升,对业务的流程,对旅游这一方面的业务、表结构还有实现的过程有了更清楚的认识,团队的合作,提升了团队协作能力

介绍thymeleaf
Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎
常用的模板引擎就是thymeleaf,他的使用很简单,首先把环境需要依赖的包和pom里面对应的模板引擎的配置文件的一个加载配置好,在页面上只需要引入一个thymeleaf的引入头文件就在页面加载成功了,主要使用表单请求,a标签请求和表单数据的替换还有列表数据的遍历,这几个功能都是使用的th标签form,href,text,foreach等将静态页面数据动态替换成我们要显示的内容
如何在静态页面实现动态数据加载

Springmvc对静态资源的放行
在DispatcherServlet中设置url-pattern为 /则必须对静态资源进行访问处理。
spring mvc 的

<mvc:resources mapping="" location="">

实现对静态资源进行映射访问。
还可以为

<mvc:default-servlet-handler/>

对spring框架的理解认识
轻量级整合框架,整合第三方框架作为项目架构,解耦,切面 通知前置后置…,ioc 和容器有关,把对象以容器的方式,通过反射和路径在容器里面生成通过依赖注入di的方式给生成的对象实现取值赋值

Spring框架架构
SpringCore:用来创建JavaBean工厂,获取bean对象
SpringAop:集成了面向切面的编程功能,可以将声明性事务管理集中到应用程序中
SpringContext:一个核心配置文件,为spring框架提供上下文信息
SpringDao:spring操作数据库的模块对传统的jdbc提供支持
SpringORM:方便spring集成各种ORM框架模块,处理对象的关系映射
SpringWeb:集成各种优秀的web层框架的模块
SpringWebMvc:springWeb层应用框架

Aop实现
AOP(Aspect-Oriented Programming),一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性

AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。
(1)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象。
(2)Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

Java多态表现形式
同一事物的不同表现形态
重写和重载
创建一个类型,可以根据这个类型创建多个不同的实例对象

为什么要有多态,在开发中有什么好处
在程序里面,只需要定义一个公共类,就可以根据这个公共类能够得到不同的具体实现类和不同功能方法的类,可以简化或优化程序的结构和程序的关联关系对程序的扩展和维护有帮助

Java值传递和引用传递
定义一个int a,
传递的是引用a的具体的值
定义一个student,他是在堆里面生成的对象,取个名字叫stu,stu是在栈里面变量是引用堆里面那个值的地址,传递的地址

反射概念
反射就是在我们Java运行机制中,对任意一个类,我们都能获取它的属性和方法,对于任意一个对象都能调用它的属性和方法,这种动态获取信息及调用对象方法的功能就是Java的反射机制。

Hashmap和hashtable区别

  1. 线程安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过 synchronized修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);
  2. 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;
  3. 对Null key 和Null value的支持: HashMap 中,null 可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为 null。但是在 HashTable 中 put 进的键值只要有一个 null,直接抛NullPointerException。
  4. 初始容量大小和每次扩充容量大小的不同: ①创建时如果不指定容量初始值,Hashtable 默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap 默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。②创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为2的幂次方大小。也就是说 HashMap 总是使用2的幂作为哈希表的大小,后面会介绍到为什么是2的幂次方。
  5. 底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。
  6. 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。

线程的生命周期
在这里插入图片描述

线程死锁
线程死锁是指两个或两个以上的线程都在等待对方释放线程或者使用权而且会一直死等下去,因此这便造成了死锁

数组转集合
• 数组转 List:使用 Arrays. asList(array) 进行转换。
• List 转数组:使用 List 自带的 toArray() 方法。

知道的加密算法,说一下,盐值加密的使用过程
MD5加密算法,这是一种不可逆的加密规则,在前端页面的数据交互、传输到后台的数据可以使用md5加密,确保我们程序数据的安全。
MD5 其实是一种哈希算法,它实质上是对一段信息产生信息摘要,以防止信息被篡改。严格来说MD5 不是一种加密算法而是一种摘要算法。无论是多长的字符串,MD5 都会输出长度为128字节的一个字符串,转换成16进制就是32个字符。

Session和cookie的作用和区别
存储位置不同
session:服务器
cookie:客户端
存储数据格式不同
session:存储obj对象
cookie:存储字符串,如果要存对象,必须转换才json
存储空间大小不同
session:受内存控制
cookie:单个不大于4k
生命周期
session:服务器控制,默认30分钟
cookie:客户端控制
默认会话级:随浏览器关闭而消失
非会话级:可以设置有效期 setmaxage方法
cookie其他配置
httpOnly=true:防止客户端xss攻击

&和&&区别
&和&&的区别
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

程序中的异常
Error 类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测,JAVA 应用程序也不应对这类错误进行捕获,一旦这类错误发生,通常应用程序会被终止,仅靠应用程序本身无法恢复;
Exception 类的错误是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。

哪些情况会出现error
系统崩溃,内存不足,堆栈溢出

数据库掌握情况

常用的函数
1.数学函数
2.字符串函数
3.日期和时间函数
4.流程控制函数
5.其他函数
聚合函数(重点)
count():统计数目
sum():求和
max():求最大值
min():求最小值
avg():求平均值

Sql语句将字符串转成时间数据
时间函数
str_to_date(dateStr,pattern)
dateStr :字符串日期表达式
pattern :匹配模式

select  str_to_date('2017/12/23','%Y/%m/%d');

convert(要转换成的类型,被转换的列或表达式)
cast(被转换的列或表达式 AS 要转换成的类型)

select CAST('2011-11-9 9:42:05' as datetime)
select CONVERT(datetime,'2011-11-9 9:42:05')

oracle

select to_char(to_date('20151130221756','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')

Java时间类型 java util data 和 java sql data

游标
是数据库当中查询出批量数据的一个临时存放介质,如何通过游标的方式存放并且遍历操作,通过标值的方式去读取游标里面的每一条数据,只能够往后读,不能向前读
作用:数据遍历,业务逻辑处理

员工表和薪资表联查男女员工的总薪资
Select 性别,sum(工资) from 员工表 leftjoin 薪资表 groupby 性别
筛选出级别为经理
having 级别=经理
查出工资大于平均薪资的员工信息
子查询(where是查询前判断)
Select * from 员工表 关联 薪资表 where 工资大于(select avg(工资) from 薪资表)

In exists not in not exists
In not in是范围查找,查找数据是否在in这个范围里面或者不在not in
Exists是判断要查找的内容是否在这个里面查找,返回true和false,true就取出查找的内容,false就不能取出查找内容

介绍项目:
首先从需求背景
然后业务流程,功能模块
再说技术实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值