• 20155238 2016-2017-2 《JAVA程序设计》第十周学习总结


    教材学习内容总结

    # Java计算机网络基础

    计算机网络

    • 计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。

    • Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。

    • 计算机网络体系结构是计算机网络层次和协议的集合,网络体系结构对计算机网络实现的功能,以及网络协议、层次、接口和服务进行了描述,但并不涉及具体的实现。接口是同一节点内相邻层之间交换信息的连接处,也叫服务访问点(SAP)。

    • OSI参考模型

    • TCP/IP,即Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,是Internet最基本的协议、Internet国际互联网络的基础。

    • TCP/IP协议是一个开放的网络协议簇,它的名字主要取自最重要的网络层IP协议和传输层TCP协议。TCP/IP协议定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。TCP/IP参考模型采用4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求,这4个层次分别是:网络接口层、互联网层(IP层)、传输层(TCP层)、应用层。

    • 传输层的TCP、UDP协议和应用层的HTTP协议

    • TCP(Transmission Control Protocol ,传输控制协议)是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP协议采用字节流传输数据。

    • UDP,用户数据报协议,英文全称是User Datagram Protocol,它是TCP/IP协议簇中无连接的运输层协议。

    • HTTP,超文本传输协议,英文全称是Hypertext Transfer Protocol,它是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议,它是基于TCP协议之上的请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。

    Java网络编程

    • Java的网络编程主要涉及到的内容是Socket编程,那么什么是Socket呢?

    • 简单地说,Socket,套接字,就是两台主机之间逻辑连接的端点。TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket,本质上就是一组接口,是对TCP/IP协议的封装和应用(程序员层面上)。

    • Socket编程主要涉及到客户端和服务器端两个方面,首先是在服务器端创建一个服务器套接字(ServerSocket),并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口。

    • 客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。

    • Socket API

    • Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。

    • getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。

    • getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

    • 注意:其中getInputStreamgetOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。

    实例

    • 服务器端
    public class SocketServer {
    
        public static void main(String[] args) throws IOException {
    
            // 端口号
            int port = 7000;
            // 在端口上创建一个服务器套接字
            ServerSocket serverSocket = new ServerSocket(port);
            // 监听来自客户端的连接
            Socket socket = serverSocket.accept();
    
            DataInputStream dis = new DataInputStream(
                    new BufferedInputStream(socket.getInputStream()));
    
            DataOutputStream dos = new DataOutputStream(
                    new BufferedOutputStream(socket.getOutputStream()));
    
            do {
    
                double length = dis.readDouble();
                System.out.println("服务器端收到的边长数据为:" + length);
                double result = length * length;
                dos.writeDouble(result);
                dos.flush();
    
            } while (dis.readInt() != 0);
    
            socket.close();
            serverSocket.close();
        }
    }
    
    package com.lanber.socket;
    import java.io.DataInputStream;
      import java.io.DataOutputStream;
      import java.io.IOException;
      import java.net.ServerSocket;
      import java.net.Socket;
    public class ServerDemo {
    /**
      * 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,服务器必需先接收这条信息,
      * 而后才可以向客户端发送信息,否则将会有运行时出错。
      * @param args
      */
      public static void main(String[] args) {
      ServerSocket ss = null;
      try {
      ss = new ServerSocket(8888);
      //服务器接收到客户端的数据后,创建与此客户端对话的Socket
      Socket socket = ss.accept();
      //用于向客户端发送数据的输出流
      DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
      //用于接收客户端发来的数据的输入流
      DataInputStream dis = new DataInputStream(socket.getInputStream());
      System.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());
      //服务器向客户端发送连接成功确认信息
      dos.writeUTF("接受连接请求,连接成功!");
      //不需要继续使用此连接时,关闭连接
      socket.close();
      ss.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
    }
    

    Java 密码技术

    混合密码系统

    • 将对称密码和公钥密码结合起来的密码方式称为混合密码系统(hybrid cryptosystem),这种系统结合了对称密码和公钥密码两者的优势。

    • 对称密码(symmetric cryptography)是指在加密和解密时使用同一密钥的方式。

    • 公钥密码(public-key cryptography)则是指在加密和解密时使用不同密钥的方式,公钥密码又称为非对称密码(asymmetric cryptography)。

    • 加密

    • 解密

    Java与密码技术

    • Java安全体系结构

    • JCA( Java Cryptography Architecture, Java加密体系结构):JCA提供基本的加密框架, 如证书、 数字签名、消息摘要和密钥对产生器。

    • JCE( Java Cryptography Extension, Java加密扩展包):JCE在JCA的基础上作了扩展, 提供了各种加密算法、 消息摘要算法和密钥管理等功能。JCE的实现主要在javax.crypto包( 及其子包) 中

    • JSSE( Java Secure Sockets Extension, Java安全套接字扩展包):JSSE提供了基于SSL( Secure Sockets Layer,安全套接字层) 的加密功能。 在网络的传输过程中, 信息会经过多个主机(很有可能其中一台就被窃听) , 最终传送给接收者, 这是不安全的。这种确保网络通信安全的服务就是由JSSE来提供的。

    • JAAS( Java Authentication and Authentication Service, Java鉴别与安全服务):JAAS提供了在Java平台上进行用户身份鉴别的功能

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

    • 问题1: Java网络编程的优势有哪些?

    • 问题1解决方案: 通过自己理解和查找相关资料。

    • Java技术更加全面

    • Java面向对象进行程序设计,对于网络方面优势更加大

    • Java的网络通信部分封装的非常好用。

    • 问题2:

    • 问题2解决方案:

    • ...

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

    暂无

    代码托管

    结对及互评

    评分标准

    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

    • 参考示例

    点评过的同学博客和代码

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

    • 了解计算机网络的基本结构,以及对Java网络编程有了一定的理解。

    • 本学期正在学密码学,通过java中的密码学算法的编程,对java和密码技术都有了更深的理解。

    • 能合理的分配时间,学习相应的模块,循序渐进,而不是填鸭式的学习

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/4 8/12
    第二周 70/80 1/5 16/28
    第三周 120/200 1/6 12/40
    第四周 300/500 1/7 20/60
    第五周 500/1000 1/8 15/75
    第六周 600/1600 1/9 15/90
    第七周 400/2000 2/11 20/110
    第八周 500/2500 1/12 22/132
    第九周 500/3000 2/14 40/172
    第十周 200/3200 3/15 15/187

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

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

    • 计划学习时间:20小时

    • 实际学习时间:15小时

    • 改进情况:对于java学习的时间,有了系统性的规划,并不是像以前零散或者突击性的学习。对JAVA有了更深入的学习。

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

    参考资料

  • 相关阅读:
    三:oracle练习
    二:SQL 函数
    一:SQL基本语法
    生产者与消费者模式(理解) 进程间通信之消息队列编程
    C语言
    前端面试:基础javascript篇(二)
    Koa入门和源码分析
    前端面试:基础javascript篇(一)
    前端面试题(二)
    C复习
  • 原文地址:https://www.cnblogs.com/zjy072018/p/6785866.html
Copyright © 2020-2023  润新知