【学习笔记】手写 Tomcat -- 预备知识

tomcat学习笔记 tomcat学习笔记 tomcat学习笔记 立即下载

目录

一、新建项目

二、IO流

1. 什么是IO流?

2. IO的流向说明图解

3. IO 流的分类

4. 字节流

输出流

字节输出流的细节

输入流

字节输入流的细节

5. 练习

6. 字符流

输入流

字符流读取的细节

字符输入流原理解析

字符输出流原理解析

三、网络编程

1. UDP通信程序

UDP 发送数据

UDP 接收数据

2. TCP 通信程序

TCP发送端

TCP 服务器端

3. 解读代码

Socket 套接字

传输数据的类型

accept 方法

read 方法

返回的 -1 

作业

1. 实现在线聊天室

2. 预习


一、新建项目

二、IO流

1. 什么是IO流?

I 是 Input,O 是Output,也就是输入输出流。

当我们操作数据时,以内存为基准,把数据读取到内存中是输入,把数据从内存写入到硬盘是输出

2. IO的流向说明图解

图片来自哔哩哔哩黑马程序员

3. IO 流的分类

根据数据的流向可以分为:输入流和输出流

根据数据的类型可以分为:字节流和字符流

操作文件类型

字节流:以字节为单位,可以操作所有文件类型

字符流:以字符为单位,只能输入输出纯文本文件

4. 字节流

输出流
//1. 创建 FileOutputStream 对象,指定写入的文件路径。

FileOutputStream fos = new FileOutputStream("文件路径");


//2. 将字符串转换为字节数组并写入文件。

fos.write("hello".getBytes());


//3. 关闭输出流

fos.close();

 

字节输出流的细节

1.创建字节输出流的对象

  1. 参数是字符串表示的路径或者File文件对象都是可以的
  2. 如果文件不存在,就会创建一个新的文件,不过需要父级路径是正确的
  3. 如果文件已经存在,会覆盖原文件

2.写数据

是根据字节对应的ASCII码表

3.关闭数据流

追加

在创建字节输出流的对象的时候,第二个参数是打开追加

输入流
//1. 创建 FileInputStream 对象,指定读取的文件路径。

FileInputStream fis = new FileInputStream("文件路径");


//每次只会读取一个字节,读取出来的是int型,需要转成Char类型

System.out.println((char)fis.read());


//释放资源

fis.close();

字节输入流的细节

1. 创建对象

        如果指定的路径文件不存在,会字节报错

2. 读取内容

        一次只会读取一个字节,读取的是ASCII码表对应的数值

        当读取指针指到末尾没有内容了,会返回-1

3. 释放资源

5. 练习

拷贝文件

当使用一个字节一个字节来读取数据,再写入数据的方式,速度比较慢

所以,可以定义一个数组,一次读取尽量把数组装满,一次写入整个数组的数量

FileInputStream fis = new FileInputStream(要读取的文件路径);
FileOutputStream fos = new FileOutputStream(要写入的文件路径);

//创建一个数组,用来一次读取多少字节
byte [] buf = new byte[1024*1024*10];

int b;
while ((b = fis.read(buf)) != -1) {
    fos.write(buf, 0, b);            //第一个参数表示将buf数组里的数据写入到文件里
}                                    //第二个参数是从 0 索引开始,写入的字节数是 b
fis.close();
fos.close();

 

解读代码

fis.read(buf)用于从输入流中读取数据到缓冲区buf,返回值b表示实际读取到的数据字节数。当读取到的数据为-1时,表示输入流已经到达末尾,循环结束。

fos.write(buf, 0, b)则用于将缓冲区中的数据写入到输出流中,写入的字节数为b。

6. 字符流

输入流
//创建字符流对象
FileReader fr = new FileReader("要读取的文件路径");
int ch;
//字符流的底层也是字节流,默认也是一次读取一个字节
while ( (ch = fr.read() )  != -1){
    System.out.print( (char) ch);        //读取出来后会自动解码然后转成十进制
}                                        //所以再转成字符就可以了
fr.close();
字符流读取的细节
  •         字符流的底层也是字节流,默认也是按照一个字节一个字节读取的
  •         遇到中文就会一次读取多个字节,这样可以避免乱码,编码不同,一次读取的字节也不同
  •         在读取之后,底层会自动解码然后转成十进制数,然后把十进制数返回
  •         返回的十进制数也是表示字符集上的数值, 如果需要看到汉字,那么就需要再转成字符就行了

字符输入流原理解析

1. 创建字符输入流对象

底层会关联文件,并且在内存里创建一个byte数组作为缓冲区,长度为8192字节的数组

2. 读取数据

        底层:        1.判断缓冲区有没有数据可以读取

                           2.缓冲区没有数据:从文件里读取数据到缓冲区,尽量把缓冲区装满

                                如果文件里没有数据了,返回-1

                           3.缓冲区有数据:从缓冲区获取数据。

                                空参的read方法:一次读取一个字节,遇到中文一次读取多个字节(根据字符集),把字节解码后并且转成十进制数字返回

                                有参的read方法:把读取字节,解码,转成文字合并了,然后把文字放在数组里

字符输出流原理解析

创建字符输出流的对象的时候,在内存会创建一个缓冲区

有三种情况会把缓冲区的数据写入到文件里

  1. 当缓冲区存放满了的时候
  2. 手动刷新,flush刷新之后还可以继续写数据
  3. 释放资源

要学习 Tomcat ,就需要先了解什么是网络编程

创建两个类 一个作为客户端,一个作为服务器端

三、网络编程

1. UDP通信程序

  • Java中的UDP通信
    • UDP协议是一种不可靠的无连接的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
    • Java提供了DatagramSocket类作为基于UDP协议的Socket
  • 构造方法

方法名

说明

DatagramSocket()

创建数据报套接字并将其绑定到本机地址上的任何可用端口

DatagramPacket(byte[] buf,int len,InetAddress add,int port)

创建数据包,发送长度为len的数据包到指定主机的指定端口

  • 相关方法

方法名

说明

void send(DatagramPacket p)

发送数据报包

void close()

关闭数据报套接字

void receive(DatagramPacket p)

从此套接字接受数据报包

UDP 发送数据
//创建发送端的Socket对象(DatagramSocket)
DatagramSocket ds = new DatagramSocket();

//创建数据,并把数据打包
//构造一个数据包,发送长度为 length 的数据包到指定IP上的指定端口号。
byte[] bys = "你好".getBytes();

DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("127.0.0.1"),8888);

//调用DatagramSocket对象的 send 方法发送数据
ds.send(dp);

//关闭通信通道
ds.close();

UDP 接收数据
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {
    public static void main(String[] args) throws IOException {

        // 创建一个DatagramSocket实例,绑定到8888端口,用于接收UDP数据包。
        DatagramSocket ds = new DatagramSocket(8888);

        // 创建一个大小为1024字节的字节数组,用于存储接收到的数据。
        byte[] bytes = new byte[1024];
        // 该实例用于接收UDP数据包。
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);

        // receive方法接收来自任何发送者的数据包,并将其存储在dp中。
        // 这个方法是阻塞的,直到接收到一个数据包。
        ds.receive(dp);

        // 获取接收到的数据包中的数据部分和长度。
        byte[] data = dp.getData();
        int length = dp.getLength();

        // 将接收到的字节数据转换为字符串并打印。
        // 字符串的起始位置是0,长度是数据包的实际长度。
        // 这样可以确保只打印接收到的有效数据部分。
        System.out.println(new String(data,0, length));

        // 释放资源
        ds.close();

    }
}

测试

2. TCP 通信程序

  • Java中的TCP通信
    • Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。
    • Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
TCP发送端
import java.io.IOException;
import java.io.OutputStream;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {

        //1.创建Socket对象
        //细节:在创建对象的同时会连接服务端
        //      如果连接不上,代码会报错
        Socket socket = new Socket("127.0.0.1",8080);

        //2.可以从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();
        //写出数据
        os.write("hello".getBytes());

        //3.释放资源
        os.close();
        socket.close();
    }
}
TCP 服务器端
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {

        // 创建一个ServerSocket对象,监听8888端口,等待客户端连接
        ServerSocket ss = new ServerSocket(8080);

        // 调用accept()方法阻塞等待,直到有客户端连接到服务器,返回一个Socket对象用于与该客户端通信
        Socket socket = ss.accept();

        System.out.println("客户端连接成功");

        // 获取Socket对象的输入流,用于读取客户端发送的数据
        InputStream is = socket.getInputStream();

        // 定义一个整型变量b,用于存储读取到的字节
        int b;

        // 循环读取输入流中的数据,read()方法返回-1表示流已结束
        while ((b = is.read()) != -1){
            // 将读取到的字节转换为字符并输出
            System.out.print((char)b);
        }

        // 关闭与客户端的连接
        socket.close();
        // 关闭连接通道
        ss.close();
    }
}

3. 解读代码

TCP 服务器端

  1. accept 方法是阻塞的,作用就是等待客户端连接
  2. 客户端创建对象并连接服务器,此时是通过三次握手协议,保证跟服务器之间的连接
  3. 针对客户端来讲,是往外写的,所以是输出流,针对服务器来讲,是往里读的,所以是输入流
  4. read 方法也是阻塞的
  5. 客户端在关流的时候,还多了一个往服务器写结束标记的动作,结束标记 -1 
  6. 最后一步断开连接,通过四次挥手协议保证连接终止

Socket 套接字

Socket 套接字,作用就是用来实现网络上不同主机的应用程序进行双向通信。

套接字包括 IP 地址和端口号两个部分。

Socket 被用于应用层和传输层之间的通信。

Java 提供的 Socket 的类的核心功能就是 建立连接,发送数据,接收数据

Socket(InetAddress address,int port)         建立连接

getoutputStram()                                        发送数据

getInputStream()                                        接收数据

传输数据的类型

在网络中,数据传输的都是字节 byte,然后把字节放到字节数组里发送,这就是为什么在发送数据前要把数据转成字节

accept 方法

accept 方法用于接收来自客户端的连接请求。这个方法是阻塞的,也就是它会一直等待,直到有一个新的客户端连接才会继续往下执行

read 方法

read 方法是从当前建立的连接通道中读取字节,一次读取一个字节,所以使用循环读取数据。

read 方法也是阻塞的,这意味着它会一直等待直到有足够的数据可读,或者直到连接关闭。

那数据读取完了怎么结束等待呢?判断数据是否读取完,如果读取完,就停止循环

返回的 -1 

当客户端主动关闭连接后会发送一个结束标志,服务端的 read 方法就会返回 -1 ,表示客户端关闭了连接

当读完数据时,read 方法会返回 -1 ,表示数据读取完毕

作业

1. 实现在线聊天室

可以使用TCP建立连接

张三发送:你好

李四发送:你好呀

2. 预习

网络通信三要素:IP、端口、协议

TCP、UDP,它们之间的区别是什么?

三次握手、四次挥手

HTTP 传输协议:请求协议,响应协议

进程和线程的关系

tomcat学习资料 关于tomcat的书籍,详细讲解了tomcat的工作原理 立即下载

相关推荐

用Multisim和74HC系列芯片,手把手教你搭建一个能“算数”的简易CPU模型

本文详细介绍了如何使用Multisim仿真软件和74HC系列芯片搭建一个简易CPU模型,重点解析了74HC194寄存器和74HC283加法器的核心功能与连接方法。通过分步图解和实战调试,帮助读者理解CPU工作原理,掌握数字电路设计的基本技能,适合计算机组成原理初学者和电子爱好者实践学习。

weixin_26843605的博客 139

Tomcat学习笔记

Tomcat学习笔记

weixin_44736938的博客 754

双斜率积分ADC:高精度测量中的经典选择与TC530/TC534实战指南

模数转换器(ADC)是连接模拟世界与数字系统的关键桥梁,其核心任务是将连续的模拟信号转换为离散的数字量。在众多ADC类型中,双斜率积分ADC以其独特的原理脱颖而出,它通过积分与反积分的线性过程,用时间换取精度,实现了对噪声的卓越抑制和极高的线性度。这种技术价值使其在对抗工频干扰、追求长期稳定性的场景中无可替代,尤其适用于精密测量仪表和工业传感器信号采集。本文聚焦于双斜率积分ADC的经典代表TC530与TC534,深入剖析其工作原理、关键参数如积分电阻、积分电容的选择,并提供从硬件电路设计到软件驱动的完整实战

weixin_30847063的博客 359

Tomcat服务器系统架构学习笔记

Tomcat服务器的功能为:处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化,加载和管理 Servlet,以及具体处理 Request 请求。因此服务器包含连接器(Connector)--对外交流和容器(Container)--内部处理两大核心组件。

AOLDGOAT的博客 263

Ubuntu20.04下Pycharm的快速安装与配置指南

本文提供了一份详细的Ubuntu 20.04系统下PyCharm社区版的安装与配置指南。文章重点介绍了通过手动下载.tar.gz压缩包进行安装的灵活方法,并涵盖了系统准备、依赖安装、首次运行、创建快捷方式以及解释器配置等关键步骤,帮助Python开发者快速搭建高效、可控的本地开发环境。

weixin_28831341的博客 379

用51单片机和LD3320语音模块DIY一个会说话的温度报警器(附完整代码)

本文详细介绍了如何使用51单片机和LD3320语音模块DIY一个智能温度报警器,包括硬件选型、电路设计、软件开发及核心功能实现。通过DS18B20温度传感器和语音模块的结合,实现温度超标时的语音报警功能,适合智能家居系统等应用场景。附完整代码,方便开发者快速复现。

weixin_42525632的博客 420

Tomcat 知识点总结,看看你掌握的怎么样?

思维导航: 架构 各组件的实现与执行组件实现 配置文件Server.xml(重点)ServerServiceExecutorConnectorEngineHostContexttomcat-user.xml(权限管理)Web.xml(不常用)ServletContext 初始化全局参数会话设置 安全与优化安全配置安全应用安全传输安全性能优化性能测试 Tomcat 附加功能 WebSocketWebSocket 请求过程 文章正文: Tomcat 学习笔记。本文相关配置均为 tomcat8 .

Java6888的博客 491

DICOM三维重建:基于VTK实现三种面绘制算法

版本:VS2019、VTK9.0.1 #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2) #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2) #include "vtkDICOMImageReader.h" #include "vtkRenderWindowInteractor.h" #i

一直在笑的博客 5922

Tomcat技术知识点总结

参考地址: 《tomcat架构》 《四张图带你了解Tomcat系统架构》 一. Tomcat 的结构 一个 Tomcat 中有一个 Server,每个 Server 中至少有一个 Service。一个 Service 由至少一个 Connector 与一个 Container 组成。 Service 的结构主要可以被分为两部分:Connector 与 Container。 Connector: 用于接受客户端传来的数据,解析其协议,将解析后的数据传输给 Servlet; Container: 封装和.

琦小虾的代码世界 855

宇树G1二次开发资料汇总

宇树科技G1是一款29自由度的商业级人形机器人,配备NVIDIA Jetson Orin NX计算平台和完整SDK生态。本文系统介绍了G1的硬件架构、29个关节配置、传感器外设、双计算单元设计等关键信息,并详细解析了软件生态体系,包括C++/Python SDK、ROS2接口、仿真工具和AI框架。开发者可通过DDS通信实现高层运动控制或底层关节级精确控制,支持快速二次开发。文档提供了网络配置、接口调用示例等实用指南,帮助开发者高效利用该平台进行人形机器人应用开发。

m0_47999117的博客 1313

Winform利用动画控制实现各种特效

动画绘制控制类代码 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Threading; using System.Windows.Forms; namespace Mengliao.CSharp.A14 { #region 动画类型枚举 // 本例为了简单起见没有使用见名知意的名称,如用于实际可将这些枚举成员更名

LilyCoder的博客 2501

JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)

JavaEE平台技术——预备知识 1. Web基础知识 2. Servlet 3. Tomcat并发原理

这里有一只小马吖 1172

【YOLOv8改进-损失函数】 YOLOv8自带损失函数CIoU / DIoU / GIoU 详解,以及如何切换损失函数

在介绍YOLOv8中的各种Iou之前,我们先来了解了解目标检测中的损失函数。目标检测模型通常包含两类损失函数:类别损失(分类)和位置损失(回归)。这两类损失函数用于检测模型的最后一部分,根据模型的输出(类别和位置)以及实际标注框(类别和位置),分别计算类别损失和位置损失。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 5190

tomcat原理_手写TOMCAT服务器,模拟其实现原理

本文将从手写一个微型服务器,模拟实现TOMCAT服务器的运行过程及原理,废话不多说,先看整个项目的类架构。本文需具有以下预备知识:1.Socket编程 2.HTML基础知识 3.HTTP协议相关知识 4.反射及容器集合框架的相关知识第一步:我们先要按上图的包类关系,把整个服务器的项目框架搭建好,然后编写XML文档,最后写IOCloseUtil.java工具类。以下是XML文档和IOClos...

weixin_39942213的博客 182

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【tomcat】3、预备知识与参数解析

一、socket和http 1 tcp和http socket是tcp层上面封装的协议,http是应用层封装的协议 计算机网络的知识告诉我们, tcp需要先三次握手后才能通信,udp无需握手。 应用层是软件之间的通信,就是我们说的浏览器和服务器 流程: TCP连接三次握手。可以把这里认为是socket,但是socket是tcp之上的封装 发送HTTP请求 响应HTTP请求 1.1 TCP 要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使

努力充实,远方可期 719

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

乡村核酸检测预备系统(源码+开题)

乡村核酸检测预备系统的研究,不仅有助于提升乡村公共卫生应急管理能力,还能通过信息化手段优化资源配置,加强乡村居民对疫情防控的认知和参与。首先通过调研了解乡村核酸检测的实际需求,然后设计系统的功能模块和交互界面,接着进行系统的开发和实现,最后通过实际应用测试评估系统的性能和效果。本研究旨在设计并开发一套适用于乡村环境的核酸检测预备系统,通过系统功能如用户管理、防疫知识普及、核酸检测通知等,提升乡村地区居民的防疫意识,保障核酸检测工作的有序进行,从而为乡村疫情防控提供有力支持。

光冯毕设程序 1329

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java预备知识

Java 预备知识 一、Java三大版本 JavaSE:标准版(桌面程序,控制台开发) JavaME:嵌入式开发(手机,小家电…) JavaEE: 企业级开发(web端,服务器开发…) 二、JDK、JRE、JVM JDK:Java Development Kit JRE:Java Runtime Environment JVM:Java Virtual Machine 三、平台,系统,工具 构建工具:Ant, Maven, Jekins 应用服务器:Tomcat,Jetty,Jboss,Websphere,

SunnyLovesStudy的博客 219

手写Tomcat服务器

预备知识 编写服务器用到的知识点 1) Socket 编程2) HTML3) HTTP 协议4) 反射5) XML 解析6) 服务器编写 Socket编程 https://www.cnblogs.com/bfcs/p/10790130.html HTML知识 HTML:HyperText Markup Language 超文本标记语言用于描述网页文档的一种标记语言 表单(for...

weixin_30443731的博客 217

java 跨服务器文件夹创建_学习Java的026天,手写服务器(未完成...)?

今天是学习Java的第26天。今天的内容是运用学过的知识去做手写服务器的项目。手写服务器的项目需要综合前面的知识,并在eclipse中建立框架。预备知识:编写服务器的内容和用到的知识点 :1) Socket 编程 2) HTML 3) HTTP 协议 4) 反射 5) XML 解析 6) 服务器编写 Socket 编程: C/S 结构:客户端与服务器端一次双向通信 B/S 结构:浏览器与服务器...

weixin_39611072的博客 156

Java乡村核酸检测预备系统(毕设源码+mysql+lw)

其次,通过系统的建立,可以提高乡村地区居民的防控意识,增强他们的自我保护能力,减少疫情对乡村社会的影响。最后,该系统的建立还可以促进乡村地区的医疗资源整合和优化配置,提高乡村医疗服务水平,为乡村振兴战略的实施提供有力支撑。然而,由于乡村地区的医疗资源相对匮乏,检测能力有限,导致乡村地区的疫情防控工作面临较大的挑战。通过该系统的建立,可以为乡村地区的疫情防控工作提供有力的支持,保障乡村居民的生命安全和身体健康,推动乡村振兴战略的顺利实施。: 流行的开源关系型数据库管理系统,用于存储和检索数据。

天成程序设计 980

Java—手写服务器

1.预备知识_Socket知识回顾 1.1编写服务器用到的知识点 1)Socket编程 2)HTML 3)HTTP协议 4)反射 5)XML解析 6)服务器编写 1.2复习Socket编程 1)C/S结构:客户端与服务器端一次双向通信 2)B/S结构:浏览器与服务器 httpClient_1 Client.java package com.bjsxt.test; import java.io.DataInputStream; import java.io.DataOutputStream; import

LiLi的博客 1033

springboot毕设基于的预备役人员管理系统源码+论文+部署

现代战争形态的演变也对预备役人员的军事素质提出了更高要求,需要通过系统的训练计划和准确的训练记录来提升预备役人员的作战能力,同时军事教官在预备役人员训练过程中的作用也需要通过有效的管理系统进行优化配置,从而提高整体的训练质量和预备役部队的战斗力。这一系统能够优化军事教官资源的配置,使他们在预备役人员的训练中发挥最大效能,提高训练的科学性和有效性。系统要能准确记录训练过程和结果,以便对预备役人员的军事素质进行评估,同时也为后续的训练计划调整提供依据,从而提高预备役部队的整体战斗力。

家林学长 1168

手写框架专栏:实现tomcat和ssm框架核心功能

手写一个基于BIO的Java服务器手写spring框架预备知识:三级缓存解决循环依赖问题手写spring框架预备知识:责任链模式解决cglib多重代理问题手写spring框架:实现ioc和aop功能;使用三级缓存解决循环依赖问题手写springmvc框架:整合手写的spring和服务器,实现前后端的请求处理和视图渲染手写mybatis框架:完成对数据库的增删改查操作手写框架项目预备知识:整合spring和mybatis手写框架项目:实现基本的crud和自定义aop切面功能

qq_44993268的博客 197

【Java网络编程与IO流】Apache Tomcat和Nginx的区别是什么?

Apache Tomcat和Nginx的区别是什么? Nginx的势头很足,在2020 11月份使用份额上领先Apache。 一、预备知识 线程 阻塞和非阻塞 同步和异步 线程: 当一个程序在执行的时候,一般会创建一个进程,也可以有多个进程。而一个进程至少会创建一个线程,多个线程共享一个进程的内存。程序的最终运行是通过线程来操作的。线程的数量跟CPU的核数有关,一个核最多能发出两个线程。线程的操作主要分为给:CPU进行程序命令的执行;IO的操作(读取或输出数据)或请求网络数据。 阻塞和非阻塞: 阻塞:线程

Mind_programmonkey的博客 866

Tomcat单点登录配置及源码分析

我们上网的时候,一定遇到过类似这样的情况,例如使用网易邮箱时进行了登录操作,之后再访问网易的博客系统时,发现自动以之前的ID登录了。这种实现在计算机中称为SSO(Single Sign On),即我们常说的单点登录。这种在关联网站间共享认证信息,避免需要在多个系统中重复输入帐户信息的行为,是SSO要解决的。 对于许多应用,可能会独立部署等情况,所以常会采用cas的形式,来实现SSO。 我们今天要了解的,是作为在同一个Tomcat中部署的应用之间,如何实现SSO,避免重复登录。 预备: 首先,有几点预

qwer123451234123的博客 586
上一篇: Spring-MVC 结合 Swagger2
下一篇: 【学习笔记】手写 Tomcat 一
LearnTech_123
博客等级 码龄3年 445粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值