【学习笔记】手写 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的工作原理 立即下载

相关推荐

[ESP32]:基于esp-modbus实现serial主机

[ESP32]:基于esp-modbus实现serial主机

LINKKEEE的博客 2567

Tomcat学习笔记

Tomcat学习笔记

weixin_44736938的博客 754

Adams软件安装与配置全攻略:从入门到机器人仿真

机械系统动力学仿真软件Adams是工业机器人开发的重要工具,其安装过程涉及许可证配置、环境变量设置等关键技术环节。专业仿真软件安装通常需要处理系统兼容性、组件依赖和授权验证等工程问题,特别是在机器人控制仿真等场景中,还需集成MATLAB/Simulink等第三方工具。本文以Windows平台为例,详解Adams安装的核心步骤,包括系统环境检查、许可证服务器配置、工业机器人专项模块安装等实践要点,并针对NVIDIA Quadro显卡优化、27500端口通信等常见问题提供解决方案,帮助用户快速搭建可靠的仿真环境

weixin_28523493的博客 199

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

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

AOLDGOAT的博客 263

Vanna 2.0:基于LLM的智能文本到SQL框架,实现企业级数据查询与权限控制

文本到SQL技术是自然语言处理与数据库交互的重要桥梁,它允许用户使用日常语言直接查询数据库,无需编写复杂的SQL语句。其核心原理是利用大语言模型理解用户意图,并结合检索增强生成技术,将自然语言问题转换为准确的结构化查询语言。这项技术的价值在于大幅降低了数据访问门槛,提升了业务人员的数据自助分析能力,并能在金融分析、销售报表、运营监控等场景中实现实时数据洞察。Vanna 2.0作为一个开源框架,通过引入用户感知的智能体架构和行级安全策略,解决了企业级应用中的多租户数据隔离与权限控制等关键问题,使得自然语言数据

weixin_42629522的博客 544

记录:rk3568适配开源GPU驱动(panfrost)

摘要:本文介绍了在RK3568芯片上移植Mali-G52 GPU驱动的过程。主要包括内核dts文件修改和内核配置调整两部分。

xuesong10210的博客 2237

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

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

Java6888的博客 491

从BIOS到路由器:深入拆解SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)奥秘

本文深入解析SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)技术,从BIOS到路由器的应用场景出发,详细介绍了其架构精髓、典型连接方案、时序设计及性能优化方法。通过实际案例和参数对比,帮助开发者掌握NOR Flash在嵌入式系统中的关键作用与设计技巧,提升电路设计效率与可靠性。

weixin_30522183的博客 492

Tomcat技术知识点总结

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

琦小虾的代码世界 855

Orange Pi 3B+刷入EmuELEC全过程:手把手教程

手把手教你如何在Orange Pi 3B+上成功刷入emuelec系统,涵盖烧录工具、镜像下载到启动设置的完整流程,让复古游戏体验轻松实现。

weixin_35732273的博客 1092

巧妙解决网页弹窗重复出现问题

本文探讨了网页弹窗关闭后刷新重现的问题及解决方案。通过分析原生JavaScript实现的弹窗代码存在的缺陷,提出了使用jQuery改进的方法。关键点包括:利用event.preventDefault()阻止默认行为避免刷新,采用jQuery的hide("slow")方法实现优雅的关闭动画,确保关闭状态持久化。改进后的方案既解决了弹窗重复出现的问题,又提升了用户体验,为网页弹窗交互提供了更优的实现方式。文中提供了完整的HTML、CSS和JavaScript代码示例,便于开发者直接应用。

2501_90323865的博客 181

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

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

这里有一只小马吖 1172

YOLO26 网络结构逐模块解析:Backbone/Neck/Head

本文解析了YOLO26目标检测网络的架构设计,重点介绍其在Backbone、Neck和Head三个核心组件的创新优化。Backbone采用改进的CSP模块与轻量级注意力机制,提升特征提取效率;Neck使用改进的BiFPN结构实现高效多尺度特征融合;Head采用完全解耦设计简化回归流程。文章详细分析了各模块的技术演进、实现细节和设计思想,通过流程图和代码示例展示了YOLO26的整体架构和关键组件实现。该研究对模型优化、定制开发和硬件部署具有重要指导意义。

一键难忘的博客 1246

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

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

weixin_39942213的博客 182

深度学习工具包 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")

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

光冯毕设程序 1329

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、付费专栏及课程。

余额充值