springMvc的理解

●springmvc  理解
 SpringMvc是基于过滤器对servlet进行了封装的一个框架,
 我们使用的时候就是在web.xml文件中配置DispatcherServlet类;
 SpringMvc工作时主要是通过DispatcherServlet管理接收到的请求并进行处理。

JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架

https://blog.csdn.net/tianxiaxiaomage/article/details/78402366

●Spring框架的核心:IOC(控制反转)、DI(依赖注入)、AOP(面向切面编程)。

https://blog.csdn.net/weixin_37539378/article/details/78937655
 
●Servlet 生命周期:
加载、实例化—>初始化—>服务—>销毁。


●Servlet 工作原理
1.Web Client 向Servlet容器(Tomcat)发出Http请求
2.Servlet容器接收Web Client的请求
3.Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
4.Servlet容器创建一个HttpResponse对象
5.Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet 对象。
6.HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
7.HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
8.Servlet容器把HttpServlet的响应结果传给Web Client。
 
●struts2和springmvc区别?
struts基于filter开发的,springmvc基于servlet开发的。
struts是基于类的,springmvc是基于方法开发的。
单例和多例的区别:springmvc可以进行单例开发

1. 什么是单例、多例:
所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action; 

https://www.cnblogs.com/zdf159/p/7595382.html


●AOP
aop是面向切面编程,主要记录日志,控制访问权限,与IOC(控制反转)组成spring的核心
aop实现原理其实是java动态代理


●mybaits  理解
首先Mybatis是一个对象关系映射(Object Relational Mapping,简称ORM)框架,
是为了解决面向对象与关系数据库存在的互不匹配的现象。也就是说Mybatis的关注点在于对象与数据库之间的映射,
Mybatis会把从数据库中得到的松散数据进行封装,使开发者直接拿到一个对象。
Mybatis其实是对jdbc的操作数据库的过程进行了封装,使开发者只需要关注 SQL 本身,
而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码


● mybatis和hibernate的区别
1、hibernate 入门门槛高,是一个标准的ORM矿建(对象关系映射),不需要程序写sql,
sql语句自动生成,对sql语句进行优化、修改比较困难。
mybatis专注于sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。
是一个不完全的ORM框架,虽然程序员自己写sql,mybatis也可以实现映射(输入映射,输出映射)

应用场景方面:
2、hibernate适用于需求变化不多的中小型项目,比如:后台管理系统,orm、oa......
   mybatis适用于需求变化较多的项目,比如:互联网项目。

 

●java基本数据类型(8种)
整数型 byte(8位) short(16位) int(32位) long(64位) 
浮点型 float double
字符型 char
布尔型 boolean

●Java常用的设计模式有哪些?
1.单例模式
    确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
2.抽象工厂模式
    为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。
3.工厂模式
    定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
4.代理模式
    为其他对象提供一种代理以控制对这个对象的访问。
5.装饰模式
    动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。    

 

●Java中synchronized的用法

synchronized是Java中的关键字,是一种同步锁。加上synchronized后线程安全

它修饰的对象有以下几种:
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

http://www.importnew.com/21866.html

●Java网络异步、并发编程

java-异步与并发之基础
同步与异步:
同步运行指代码运行是有先后顺序的执行
异步运行指代码与代码间是“各干各的”互不影响
多线程并发是异步运行代码的,但是有时候又需要这些线程间的同步运行时可以使用join完成线程间的同步。
当一个方法被synchronized修饰后,该方法称为同步方法,即:多个线程不会同时对beans这个数据进行操作没有抢的问题,就不会出现并发安全问题了
互斥锁:synchronized修饰不同的代码,当同步监视器对象是相同的时候这些代码片段之间就是互斥的。多个线程不能同时进到这些代码片段中一起执行。

线程池:线程池主要解决两个问题:
1:控制线程数量:每条线程都需要占用一部分内存,线程数量越多占用内存资源越多,并且线程多了以后CPU轮询时间会变长形成CPU过度切换,这些都会导致系统变慢,甚至瘫痪。
2:重用线程:频繁创建销毁线程也会给线程调度带来负担。尽量重用线程。减小系统开销。

https://www.cnblogs.com/CaiNiao-TuFei/p/7476035.html

●Java多进程及多线程编程

进程:就是正在运行的程序的实例,是资源分配的基本单位。(通过任务管理器可以查看进程,一个程序可以启动多个进程,比如你可以用qq程序登陆多个qq账号,所以我理解为是程序的实例)

多进程:就是多个程序实例同时运行(同时不够严谨,可能还与电脑核数有关)

线程:运行在进程当中的运行单元,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。多线程:进程中存在多个相互独立或相互有协作关系的运行单元就是多线程(比如音乐播放器,一边下载音乐,一边播放音乐)
https://blog.csdn.net/qq_34996727/article/details/80416277

http://www.importnew.com/21897.html

 

●maven和gradle 区别
maven  XML配置代码较长,不够灵活,学习成本高
gradle build.gradle  简洁  灵活

●Restful风格接口

在Restful风格中,用户请求的url使用同一个url而用请求方式:get,post,delete,put...等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口。
在Restful风格中,现有规定如下:
GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。

POST(CREATE):在服务器新建一个资源,调用insert操作。

PUT(UPDATE):在服务器更新资源,调用update操作。

PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。(目前jdk7未实现,tomcat7也不行)。

DELETE(DELETE):从服务器删除资源,调用delete语句。

了解这个风格定义以后,我们举个例子:
如果当前url是 http://localhost:8080/User
那么用户只要请求这样同一个URL就可以实现不同的增删改查操作,例如
http://localhost:8080/User?_method=get&id=1001  这样就可以通过get请求获取到数据库 user 表里面 id=1001 的用户信息
http://localhost:8080/User?_method=post&id=1001&name=zhangsan  这样可以向数据库 user 表里面插入一条记录
http://localhost:8080/User?_method=put&id=1001&name=lisi  这样可以将 user表里面 id=1001 的用户名改为lisi
http://localhost:8080/User?_method=delete&id=1001  这样用于将数据库 user 表里面的id=1001 的信息删除
这样定义的规范我们就可以称之为restful风格的API接口

 

●拦截器和过滤器的区别:
1 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
6 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。


●ArrayList与LinkedList有什么区别?
ArrayList与LinkedList都实现了List接口。 
ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高, 
Linked是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时效率较低


●sql 优化
 分表 分区 
 redis放到缓存里面
 把登录用户信息,经常用的信息放到缓存里
 带查询条件的查询直接查数据库
 

●分布式消息队列rocketmq 的接收  发送
Producer
消息生产者,生产者的作用就是将消息发送到 MQ,
1、Consumer   消息消费者,简单来说,消费 MQ 上的消息的应用程序就是消费者,
2、Topic   是一种消息的分类,比如说你有订单类的消息
3、Message  是消息的载体。一个 Message 必须指定 topic,相当于寄信的地址。
4、Tag   标签可以被认为是对 Topic 进一步细化。
一般在相同业务模块中通过引入标签来标记不同用途的消息。

●接口 http  加密  
客户端:
    1、设置一个key(和服务器端相同)
    2、根据上述key对请求进行某种加密(加密必须是可逆的,以便服务器端解密)
    3、发送请求给服务器
服务器端:
    1、设置一个key
    2、根据上述的key对请求进行解密(校验成功就是「信任」的客户端发来的数据,否则拒绝响应)
    3、处理业务逻辑并产生结果
    4、将结果反馈给客户端

●索引
索引用来提高读取数据的速度。
比如你要从一个有一万条记录的表中读取记录,那么如果有索引,他会通过索引定位,
找到你要找的记录,速度比一个一个记录的扫描表快很多很多倍。
表的某一个列可以建立索引,也可以是几个列一起建立索引。
索引有主键索引、唯一性索引等。
主键的索引是默认的,不能删除。


●存储过程  事务
存储过程就是预先定义好的SQL语句,然后存储起来,等你用的时候再把自己所需要的匹配的SQL语句用Execute(即exec)调用就行!
“一对多”:运用了“一对多”的原理,即一条SQL语句可以被多个地方使用!
性能高
安全

●apidoc接口文档
 接口名 接口说明 接口要传的参数  接口的返回报文

●shiro
配置shiro.xml文件,在web.xml,配置进去,
Realms:用于进行权限信息的验证
Subject :当前用户的操作
用户登录的时候进行
 Authentication 认证 账号密码
 Authorization 授权 拥有的权限
页面用shiro的权限标签,判断是否拥有权限

●ehcache和redis区别
EHCache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。
redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。
如果是单个应用或者对缓存访问要求很高的应用,用ehcache。
如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。


聊聊redis持久化 – 两种方式
redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,
只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。


●MongoDB的分片架构是指把数据分割成不同部分,在不同的机器上的存储过程,通过分割数据到不同的服务器上,
使得无需使用更强大的机器来存储更多的数据和处理更大的负载。MongoDB支持自动分片,集群可以自动分割数据和数据的再均衡。
MongoDB提供以下的分片技术:
(1)对负载的变换和数据的分布自动平衡;
(2)动态添加额外服务器;
(3)无单点故障;
(4)自动故障转移[6]。


●如何组织管理项目
1,先看需求原型文档
2,组织成员开需求会,确认需求,讨论功能实现
3,组织成员分解需求模块,分配任务,排开发时间,
4,根据排期跟进开发进度,是否有遇到问题,指导帮助解决问题
5,测试改BUG


●Linux20个常用命令
cd命令 切换当前目录
ls命令 查看文件与目录的命令
grep命令用于对一些命令的输出进行筛选加工等等
find命令
cp命令用于复制文件
mv命令该命令用于移动文件、目录或更名
rm命令删除文件或目录
kill命令该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号


●java重构:
指程序员对已有程序在尽量不改变接口的前提下,进行重新编写代码的工作,一般有以下几方面:
1、去除已知bug。
2、提高程序运行效率。
3、增加新的功能。


●java方法的重写 
发生在父子类中,方法签名相同,方法体不同:子类可以重写(覆盖)继承自父类的方法,
即方法名和参数列表与父类的方法相同,但方法的实现不同(方法体不同)
 
●sql 内 左 右连接 
内连接:显示左边右边共有的
左连接:左边有的,右边没有的为null
右连接:左边没有的,右边有的为null

 

●封装
4个轮子

有座位

●多态

公交车  推土车 洒水车
我们系统有使用人。定义了一个人的对象person。
然后实际登陆系统的,有几种情况,一种是系统管理人员,一种是客户,一种是系统的用户。
我们在前面只定义一个人来使用系统。但是后面到后台又会具体判断使用系统的人到底是什么人
,这就是多态的实际意义。


●apache和tomcat区别
apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展。
apache和tomcat都可以做为独立的web服务器来运行。但是apache不能解释java程序(jsp,serverlet)
Apache是普通服务器,本身只支持html即普通网页。


●Tomcat与Nginx区别与各自的用途.
nginx常用做静态内容服务和反向代理服务器,以及页面前端高并发服务器。适合做负载均衡,
直面外来请求转发给后面的应用服务(tomcat什么的),tomcat更多用来做做一个应用容器,
让java web app跑在里面的东西。大部分适用于静态资源文件的访问(图片,文件)
tomcat 更适合做部署jsp页面的项目。。


●设计模式

工厂方法模式、

抽象工厂模式、

单例模式、

建造者模式、

原型模式

 

●软件项目管理
一、是为了使软件项目能够按照预定的成本、进度、质量顺利完成,
而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动。


二、软件系统实施的基本原则是"全局规划,分步实施,步步见效",需求可以多,但是需求一定要分优先级,

三、无关能力和经验,有强烈的工作责任心和敬业精神。

 

工作职责:
1. 依据部门技术线路和技术规划,完成产品规划、定义和开发;
2. 分析产品需求,做出软件需求分析、功能设计及数据库设计;
3. 负责应用软件的开发、调试和维护;
4. 负责系统数据库的设计、开发和优化。
5. 配合相关人员进行测试,根据项目输出相关的技术文档;
6. 负责编写相应的开发和设计文档。

任职资格:
1. 计算机相关专业、本科以上学历,2年以上相关工作经验;
2. 具备扎实的Java基础,熟悉Java基础API和扩展API;
3. 熟悉J2EE体系结构,熟练掌握Struts2、SpringMVC、Spring、MyBatis等开发技术;
4. 熟悉Java网络异步、并发编程,熟悉Java多进程及多线程编程;
5. 熟悉 Json、xml及RESTful 接口;
6. 熟悉MySQL、Oracle等数据库开发,熟练掌握SQL语句,有较好的数据库分析设计能力;
7. 具有应用系统分析设计能力,能独自完成系统设计开发和实施,具有独立分析问题和解决问题的能力;
8. 能承担高负荷的工作,有良好的团队合作精神,责任心强、工作敬业

 

 

 

  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值