发表于: 2020-06-13 23:21:30
1 1809
今天完成的事情:今天完结了深度思考,开发了banner模块,先写测试类,再写业务。
明天计划的事情:明天开发作品模块,要写到分页,前面没有实现过,明天好好学下。
遇到的问题:总是在Mapper映射出错,以及找不到包之类的,都是以前遇到过的,几下就解决了。由于自己不熟悉mapper书写,没有用自动生成的dao和实体类,mapper文件的mybatis-generator工具。
收获:
banner接口模块
测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-biz.xml")
public class BannerTest {
@Resource
private BannerService bannerService;
@Test
public void addBanner(){
Banner banner= new Banner();
banner.setPictureId(2);
banner.setImage("www.ooo.ooo");
banner.setState(0);
banner.setPriority(2);
banner.setCreateAt(20202002L);
banner.setUpdateAt(2022069L);
banner.setUpdateBy("张三丰");
banner.setCreateBy("张三丰");
int num = bannerService.addBanner(banner);
System.out.println(num);
}
@Test
public void findBanner(){
List<Banner> list = new ArrayList<Banner>();
list = bannerService.findBanner();
System.out.println(list);
}
@Ignore
public void updateBanner(){
Banner banner= new Banner();
banner.setId(1);
banner.setState(1);
int num = bannerService.updateBanner(banner);
System.out.println(num);
}
@Ignore
public void deleteBanner(){
int num = bannerService.deleteBanner(2);
System.out.println(num);
}
}
service
@Service("bannerService")
public interface BannerService {
int addBanner(Banner banner);
List<Banner> findBanner();
int updateBanner(Banner banner);
int deleteBanner(int id);
}
@Service
public class BannerServiceImpl implements BannerService {
@Resource
private BannerDao bannerDao;
@Override
public int addBanner(Banner banner) { return bannerDao.addBanner(banner); }
@Override
public List<Banner> findBanner() {
return bannerDao.findBanner();
}
@Override
public int updateBanner(Banner banner) { return bannerDao.updateBanner(banner); }
@Override
public int deleteBanner(int id) { return bannerDao.deleteBanner(id); }
}
BannerDaoMapper.xml(个人薄弱点,最重要的模块,总是在映射对应上出错,哈哈)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hyx.dao.BannerDao">
<resultMap id="forBanner" type="Banner">
<id column="id" property="id" javaType="Integer"></id>
<result column="picture_id" property="pictureId" javaType="Integer"/>
<result column="create_at" property="createAt" javaType="Long"></result>
<result column="update_at" property="updateAt" javaType="Long"></result>
<result column="create_by" property="createBy" javaType="String"></result>
<result column="create_by" property="updateBy" javaType="String"></result>
</resultMap>
<select id="findBanner" resultMap="forBanner">
select * from banner
</select>
<insert id="addBanner" parameterType="Banner" useGeneratedKeys="true" keyProperty="id">
insert into banner (
picture_id,image,url,state,priority,create_at,update_at,create_by,update_by)
value (#{pictureId},#{image},#{url},#{state},#{priority},#{createAt},#{updateAt},#{createBy},#{updateBy})
</insert>
<update id="updateBanner" parameterType="Banner">
update banner set state=#{state} where id = #{id}
</update>
<delete id="deleteBanner" parameterType="Long">
delete from banner id = #{id}
</delete>
</mapper>
33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService被认为太重了,只有银行和大型国企才会使用的更多有些?
什么是Web Service
- 从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。例如,你想创建一个Web service ,它的作用是返回当前的天气情况。那么你可以建立一个ASP页面,它接受邮政编码作为查询字符串,然后返回一个由逗号隔开的字符串,包含了当前的气温和天气。要调用这个ASP页面,客户端需要发送下面的这个HTTP GET
- 返回的数据就应该是这样:
- 这个ASP页面就应该可以算作是Web service 了。因为它基于HTTP GET请求,暴露出了一个可以通过Web调用的API。当然,Web service 还有更多的东西。
- Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。
WEBService框架
cxf、jwx、XFire与Axis2,jwx也就是jax-ws,是java6提供的对webservice的一种实现。cxf框架则简化了服务发布过程。Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新。
基于soap协议的webservice的安全性较高,但是效率较低,不如REST.
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
1. OSI七层结构与TCP/IP协议四层体系结构网络通信模型
2. TCP
TCP是TCP/IP体系结构中最主要的传输层协议,它只提供面向连接的传输层服务。
TCP面向连接,可靠的,全双工,基于字节流,仅支持单播传输的协议。
TCP是基于链接的,三次握手建立链接。TCP 在传输上是双工传输,不区分 Client 端与 Server 端,为了便于理解,把主动发起建连请求的一端称作 Client 端,把被动建立链接的一端称作 Server 端。
(1)首先是服务器初始化的过程,从CLOSED(关闭)状态开始通过顺序调用SOCKET、BIND、LISTEN和ACCEPT原语创建Socket套接字,进入LISTEN(监听)状态,等待客户端的TCP传输连接请求。
(2)客户端最开始也是从CLOSED状态开始调用SOCKET原语创建新的Socket套接字,然后在需要在调用CONNECT原语时,向服务器发送一个将SYN字段置1(表示此为同步数据)的数据段(假设初始序号为i),主动打开端口,进入SYN SENT(已发送连接请求,等待对方确认)状态。
(3)服务器在收到来自客户端的SYN数据段后,返回一个SYN字段置1(表示此为同步数据段)、ACK字段置1(表示此为确认数据段)、ack(确认号)=i+1的应答数据段(假设初始序号为j),被动打开端口,进入到SYN RCVD(已收到一个连接请求,但未进行确认)状态。这里注意的是,确认号是i+1,而不是i,表示服务器希望接受的下一数据段序号为i+1.
(4)客户端在收到来自服务器的SYN+ACK数据段后,向服务器发送一个ACK=1(表示此为确认数据段)、序号为i+1、ack=j+1的确认数据段,同时进入ESTABLISHED(连接建立)状态,建立单向连接。要注意的是,此时序号为i+1,确认号为i+1,表示客户端希望收到服务器的下一个数据段的序号为j+1
(5)服务器在收到客户端的ACK数据段后,进入ESTABLISHED状态,完成双向连接的建立。
建立2次的的话,在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。
建立4次就多余了。浪费资源。
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
HTTP:超文本传输协议。是用于从万维网服务器传输超文本到本地浏览器的传送协议。
1)请求与响应
HTTP 定义了 4 种与服务器交互的方式:GET、POST、PUT、DELETE。URL全称为资源描述符,一个 URL 对应着一个网络上的资源,而 HTTP 中的 GET、POST、PUT、DELETE 就对应着这个资源的查询、修改、添加、删除 4 个操作。
HTTP 请求由 3 部分组成,分别是:状态行、请求头(Request Header)、请求正文
HTTP 响应由 3 部分组成,分别是:状态行(状态码)、响应头头(Response Header)、响应正文
三种Content-Type,指互联网媒体类型
1. application/x-www-form-urlencoded:在最开始的请求方式中,请求参数都是放在url中,表单提交的时候,
都是以key=&value=的方式写在url后面。这也是浏览器表单提交的默认方式。
2. multipart/form-data: 此种方式多用于文件上传,表单数据都保存在http的正文部分,各个表单项之间用boundary分开。
3. application/json: 它用来告诉服务端消息主体是序列化后的 JSON 字符串。
状态码:
a.1开头(信息提示)这些状态代码表示临时的响应。100(继续)
b.2开头 (请求成功)表示成功处理了请求的状态代码.200(成功) 202(已接受)
c.3开头 (请求被重定向)表示要完成请求,需要进一步操作。305(使用代理)
d.4开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。404 (找不到)
e.5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器
36.了解maven的module。
创建Maven Module工程必须有存在的父工程,maven就是通过父子工程进行工程管理的
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
REST即表现层状态转换,表现层指的是一种资源的信息实体,一张图片,一段音乐在网络上以URI的形式表现。访问一个网站,互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。就代表了客户端和服务器的一个互动过程,在这个过程中,涉及到数据和状态的变化。rest风格就是定义一些交互形式的规范。
为什么使用rest风格?
近些年的互联网发展,客户端的形式多样,有了RESTful结构,不管是电脑端还是手机端,或者是APP,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。
在之前就是按照好记,随意定义。
38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
① 使用json工具类库转化生成,如FastJson(阿里巴巴)、Gson(谷歌)、Jackson等;
② 使用注解ResponseBody返回java对象或集合,自动转化生成;
③ 使用JsonTaglib在jsp中设置字段或者嵌套生成。
那为什么推荐使用JsonTaglib来处理Json呢?
因为使用JsonTaglib与其他的最大区别就是更加灵活,修改更加方便,只需要在jsp中修改即可,不需要修改controller中的代码。
并且,在项目简单的情况下,controller中的代码简洁度并不明显,但是当项目复杂时,可以很清晰的认识到代码的简洁、易读。而这其实也就是Json诞生原因之一。
39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
之前日报记录过。
40.Http的Header里面包含哪些字段,每个字段都有哪些含义?
41.如何写shell脚本?尝试自己编写一个简单脚本。
前面写过部署的脚本
42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
Shell俗称壳,类似于DOS下的cmd.exe.作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
linnux怎么给脚本授权?
在当前路径下输入
chmod 777 脚本名
给脚本授权,
然后就可以执行脚本
./脚本名
777 是最高权限,有读、写、执行权限;和属组用户和其他用户的读、写、执行权限。
43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
最好配置多个容器,一个容器的死掉,会影响全部web服务,但是配置多个容器,对服务器的资源的要求要高,性能提高了,但是成本增加
44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?
内存配置一般1-2G。应该先通过实时数据或者压力测试调整,再根据最大占用估计内存大小
45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
常见配置:1.是:port(端口) 2是:Context(上下文)path,也就是web项目的部署根目录,还有内存大小,编码和日志的配置
46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
之前有对比
47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
常用的打包工具
非maven的有两个,在maven中配置的有三个
1.package,maven自带的命令打包,平时的打包基本够用,但不能打可直接运行的jar包
2.IDEA自带的打包工具,不过打的包很容易出现冲突
3.jar-dependency插件,繁琐,性能差,不建议使用
4.assembly插件,可以打多种格式的包,具有基本的解决所打jar包内依赖包冲突的问题,但一旦出现冲突则无法解决
5.shade插件,终极杀器,jar包出现依赖包冲突可以通过调整配置解决
48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
War 包就是一个web应用的打包格式,一个web应用,需要一个用户交互的界面,负责给用户提供信息输入的地方,即jsp页面。数据需要保存下来,jsp把网页上的数据穿送给后台的java类,java类在得到这些数据之后再进行数据相关的工作,如存入数据库,给出相关统计数据等等。
49.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
Put请求,我是在控制层用@RequestBody,接受参数。
50.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
1、@PathVariable:接收 Url 中的占位参数 student/list/{id}
2、@RequestParams:接收请求中的参数 name=123&phone=123(application/x-www-form-urlencoded)
目标方法中接受参数
3、@RequestBody:接收其他类型的参数,如 application/json {"name":"手机","price":"999"}
注意目标方法中要接收这个 JSON 字符串,然后反序列化
4、对于文件上传 (multipart/form-data):需要使用 CommonsUpload 组件配合使用
51.什么是restful?rest的请求方法有哪些,有什么区别?
GET用来获取资源,对应着查询.
POST用来新建资源(也可以用于更新资源),对应着新增.
PUT用来更新资源,对应着更改.
DELETE用来删除资源,对应删.
评论