20155333 2016-2017-2 《Java程序设计》第十周学习总结

教材学习内容总结

  • 网络概览
    • 两台计算机用于通信的语言叫做“协议”。我们只需关心应用层中的协议,而不必关心其他层的协议。Java中提供了类来封装应用层协议,使你无需了解协议就能向协议的服务器发送信息。
    • 网络使用一种地址系统来区分计算机,每台计算机都分配了一个唯一的IP地址。
  • 超文本传输协议(HTTP):允许Web服务器和浏览器之间通过互联网发送和接受数据的协议。
    • 一次HTTP请求包含三个部分:
      • 方法——统一资源标识符——协议/版本
      • 请求头
      • 请求实体
    • HTTP响应包含三个部分:
      • 协议-状态码-说明
      • 响应头
      • 响应实体:响应自身的HTML内容。
  • java.net.URL
    • 可以使用URL类的OpenStream方法来读取一个Web资源。
  • java.net.URLConnection
    • 要获取URLConnection的实例,不能用new构造,需在一个URL对象上调用openConnection方法。
  • java.net.Socket
    • 一旦成功创建了Socket类的一个实例,就可以使用它发送或接收字节流。
  • 客户端(Client)是指网络编程中首先发起连接的程序,客户端一般实现程序界面和基本逻辑实现,在进行实际的客户端编程时,无论客户端复杂还是简单,以及客户端实现的方式。
  • 客户端的编程主要由三个步骤实现:
    • 建立网络连接
    • 交换数据
    • 关闭网络连接
  • 服务器端(Server)是指在网络编程中被动等待连接的程序,服务器端一般实现程序的核心逻辑以及数据存储等核心功能。
  • 服务器端的编程步骤和客户端不同,是由四个步骤实现,依次是:
    • 监听端口
    • 获得连接
    • 交换数据
    • 关闭连接
  • InetAddress类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部
  • 在客户端网络编程中,首先需要建立连接,在JavaAPI中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接。
  • 客户端程序需要完成的处理为:
    • 客户端发送协议格式的生成
    • 服务器端反馈数据格式的解析
  • 网络程序的功能都分为客户端程序和服务器端程序实现,下面先描述一下每个程序分别实现的功能:
    • 客户端程序功能:
      • 接收用户控制台输入
      • 判断输入内容是否合法
      • 按照协议格式生成发送数据
      • 发送数据
      • 接收服务器端反馈
      • 解析服务器端反馈信息,并输出
    • 服务器端程序功能:
      • 接收客户端发送数据
      • 按照协议格式解析数据
      • 判断数字是否是质数
      • 根据判断结果,生成协议数据
      • 将数据反馈给客户端

教材学习中的问题和解决过程

  • 问题1:TCP协议和UDP协议的区别?
  • 问题1解决方案:这个问题是纯粹的计算机网络的问题。TCP协议是传输控制协议,UDP协议是用户数据报协议,两者都是传输层的协议,主要区别在于前者是可靠的,面向连接的协议,后者是不可靠的,无连接的协议。其它的区别还有,TCP协议传输速度慢,UDP常用于一次性传输比较少量数据的网络应用。
  • 问题二:java.net.SocketException四大异常解决方案。
  • 问题二解决方案:
    1.java.net.BindException:Address already in use: JVM_Bind。
    该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。

2.java.net.SocketException: Connection refused: connect。

该异常发生在客户端进行 new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。

3.java.net.SocketException: Socket is closed,

该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。

4.java.net.SocketException: (Connection reset或者Connect reset by peer:Socket write error)。

该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。

代码调试中的问题和解决过程

本周代码还未写完,暂时未出现问题。

代码托管

上周考试错题总结

  • 在下面,你将看到一堆杂乱的类与接口,这是取自一个动作冒险游戏。你将看到代表游戏角色的类,以及武器行为的类。每个角色一次只能使用一个武器,但是可以在游戏的过程中换武器。你的工作是要弄清楚这一切. . .

    • a) 把下面散乱的类画成一个UML类图, 找出一个抽象类、一个接口、以及四个具体类,画出类之间的关系:继承,实现接口
      • King,Queen继承Character抽象类, AxeBehavior BowAndArrayBehavior实现WeaponBehavior接口
        Character依赖WeaponBehavior
    • b) 把s e t W e a p o n ( ) 方法放到正确的类中。
      • 放到Character中

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)
    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分
  6. 其他加分:
    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:
    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 基于评分标准,我给本博客打分:XX分。得分情况如下:xxx

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

    • 20155312
    • 结对照片
    • 结对学习内容
      • 这周我和搭档一起分析电子版教材中网络方面的代码,共同解决我们不明白的地方并督促双方学习。
      • ...
  • 上周博客互评情况

其他(感悟、思考等,可选)

课程过半,感觉自己这段时间做了不少事情,但是学习效果离自己的期望还是很远,还需要继续努力。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 12/12 1/4 20/20
第二周 64/76 1/5 22/42
第三周 560/636 1/6 22/64
第四周 532/1168 1/7 20/84
第五周 510/1728 1/8 20/104
第六周 697/2425 1/9 15/119
第七周 269/2694 2/11 15/134
第八周 581/3275 1/12 20/154
第九周 368/3643 2/14 25/179
第十周 238/3881 1/15 15/194

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:25小时

  • 实际学习时间:15小时

  • 改进情况:本周学习计划未按时完成,学习效率未见提高,但终于离目标又近了一点。

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

20155333 2016-2017-2 《Java程序设计》第十周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第十周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...

  2. Java程序设计第十周学习总结

    Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...

  3. 20155333 2016-2017-2 《Java程序设计》第九周学习总结

    20155333 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC(Java DataBase Connectivity) 驱动的四种类型 JDBC- ...

  4. 20155333 2016-2017-2《Java程序设计》第二周学习总结

    20155333 2016-2017-2<Java程序设计>第二周学习总结 教材学习内容总结 1. Java 类型系统:基本类型和类类型(参考类型) 2. 基本类型: 整数:short整数 ...

  5. 20155333 2016-2017-2 《Java程序设计》第一周学习总结

    <java程序设计>第一周学习总结 学习目标 •了解java基础知识 •了解JVM.JRE与JDK,并下载.安装.测试JDK •了解PATH.CLASSPATH.SOURCEPATH的作用 ...

  6. 20155201 2016-2017-2 《Java程序设计》第九周学习总结

    20155201 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC全名JavaDataBaseConnecticity,是Jav ...

  7. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  8. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  9. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  10. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

随机推荐

  1. Apache Spark : Introduction

    看了一点<数据算法:Hadoop/Spark大数据处理技巧>,觉得有必要了解一下 Spark . 以上. Spark was introduced by Apache Software F ...

  2. metasploit 渗透测试笔记(基础篇)

    0x00 背景 笔记在kali linux(32bit)环境下完成,涵盖了笔者对于metasploit 框架的认识.理解.学习. 这篇为基础篇,并没有太多技巧性的东西,但还是请大家认真看啦. 如果在阅 ...

  3. 11、Node.js 函数

    内容:普通函数,匿名函数,函数传递是如何让HTTP服务器工作的 ###普通函数例子: function say(word) { console.log(word); } function execut ...

  4. Java虚拟机13:Java类加载机制

    前言 我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用.而虚拟机如何加载这些.class文件?.class文件的信息 ...

  5. Apache Kafka系列(七)Kafka Repartition操作

    Kafka提供了重新分区的命令,但是只能增加,不能减少 我的kafka安装在/usr/local/kafka_2.12-1.0.2目录下面, [root@i-zk1 kafka_2.-]# bin/k ...

  6. 1067. [SCOI2007]降雨量【线段树】

    Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003, ...

  7. 20155203 2016-2017-4 《Java程序设计》第9周学习总结

    20155203 2016-2017-4 <Java程序设计>第9周学习总结 教材学习内容总结 课堂内容 两个类如果有公共的部分要放在父类中,多次复用.当我们用父类或接口去声明对象的引用生 ...

  8. Kali-linux控制Meterpreter

    Meterpreter是Metasploit框架中的一个杀手锏,通常作为利用漏洞后的攻击载荷所使用,攻击载荷在触发漏洞后能够返回给用户一个控制通道.当使用Armitage.MSFCLI或MSFCONS ...

  9. php回调函数数组的排序函数

    array_filter() array_map() sort()升序不保存key resort() asort()升序保存key arsort() ksort()根据key排序 krsort()

  10. LayIM.AspNetCore Middleware 开发日记(二)预备知识介绍

    前言 开发一个AspNetCore的中间件需要理解RequestDelegate.另外,还需要理解.NET Core中的依赖注入.还有一个就是内嵌资源的访问.例如:EmbeddedFileProvid ...