- 博客(56)
- 资源 (1)
- 收藏
- 关注
原创 java.lang.ClassNotFoundException: jakarta.servlet.Servlet
联系servlet的使用时,编写了servlet的处理器,但是浏览器报500错误,有时候是404错误。换成import javax.servlet.最后发现是导入的servlet包有问题。不要使用jakarta.servlet.
2024-01-09 09:48:39
1187
原创 Java操作Mysql实现学生管理系统
利用java的mysql驱动包连接并操作mysql server,访问数据库、创建和查询表、新增和查询表内信息。
2023-12-07 16:55:11
706
原创 C++11提供的并发编程
在C++11之前,如果想要实现并发编程,就需要使用具体平台提供的并发编程相关的库,非常的不方便,而且还不支持跨平台。在C++11之后,终于在语言层面有了并发编程的支持。包括线程控制、互斥锁、条件变量、区域锁(lockguard)、原子操作、异步等。
2023-03-26 20:42:59
851
1
原创 【linux服务器编程学习】10.多线程编程
线程是linux中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境,可分为内核线程和用户线程,分别由内核和程序线程库调度。关于linux多线程编程,需要掌握怎么创建和结束线程,怎么读取和设置线程属性,线程同步方式等。
2023-03-26 15:55:55
524
原创 数据结构知识点速记1
数据结构是程序员的“内功”,根据不同场景的需要,选择合适的数据结构来设计代码。数据结构的定义是:相互之间存在一种或多种特定关系的数据元素的集合。常用的数据结构有线性表、单向链表、双向链表、栈、堆、二叉树、二叉排序树、红黑树、图等。
2023-03-25 15:49:25
516
原创 一个WebServer的基本要素(高级篇)
首先我们在上篇中讲了WebServer的最基本的内容,包括调用socket接口让用户和服务器通信,服务器对用户请求的处理,如何解析http请求报文,IO模型等问题,这样就实现了最基本的服务器功能,但是一个优秀的服务器还需要很多其他技术的支持。
2023-03-24 10:18:22
356
原创 操作系统知识速记1
操作系统是计算机专业的核心课程,做程序开发需要对操作系统有深入了解,以便对程序的运行过程有更清晰的认识,以便让程序更高效的运行。
2023-03-23 22:15:44
608
原创 一个Web Server的基本要素(基础篇)
Web Server 就是一个服务器软件,或者是运行这个服务器软件的硬件。通过HTTP协议与客户端通信,可以接收、存储、处理来自客户端的HTTP请求,并做出HTTP响应,返回客户端请求的资源。
2023-03-22 16:44:53
510
原创 【linux服务器编程学习】9、多进程编程
多进程编程主要包括 * 复制进程映像的fork和替换进程映像的exec系列 * 进程间通信(IPC)的方式,包括管道、信号量、消息队列、共享内存。
2023-03-20 21:23:59
226
原创 c++ 一些常识 2
STL一共提供六大组件,有容器、算法、迭代器、仿函数、配接器、配置器,彼此可以组合套用,容器通过配置器取得存储空间,算法通过迭代器存取容器内容,仿函数协助算法完成不同策略,配接器可以应用于容器。容器是封装好的各种数据结构。算法是各种常用的算法,可以对容器内的数据操作。迭代器是将一些指针相关操作重载的类模板。仿函数是一种重载了()的类模板,可以帮助算法实现不同策略配接器用来修饰容器配置器负责空间配置与管理。
2023-03-19 13:33:15
4840
4
原创 【linux服务器编程学习】8.定时器
定时器在网络编程中应用广泛,服务器通常管理众多定时事件。我们将每个定时事件封装成定时器,使用某种数据结构,比如链表、时间轮,将定时器串联起来,统一管理。
2023-02-17 16:25:54
189
原创 【linux服务器编程学习】6、IO复用技术
IO复用使得程序能同时监听多个文件描述符,这对提高程序性能至关重要。Linux下实现IO复用主要由select、poll、epoll。
2023-02-05 18:35:38
197
原创 【linux服务器编程学习】3、TCP协议
TCP是传输层的主要协议之一,相对于UDP,TCP的特点是面向连接、字节流和可靠传输。使用TCP的双方都需要先建立连接,为连接分配必要的内核资源。TCP是全双工的,完成数据交换后双方必须断开连接以释放系统资源。TCP的连接只能是一对一的,所以基于广播和多播的应用程序无法使用TCP。字节流的概念:应用程序对于数据的发送和接收没有边界限制。TCP传输是可靠的,体现在序号机制、应答机制、超时重传机制、校验机制。
2023-02-02 21:07:03
283
原创 【设计模式】状态模式、责任链模式、迭代器模式、解释器模式
责任链模式为请求创建了一个接收者对象的链。每个接受者都含有另一个接收者的引用,如果一个接收者不能处理他的请求,就会把这个请求发送给他的下一个接受者了,以此类推。客户只需要将请求发送到责任链上就可以了,不必关心请求处理的细节和请求的传递过程,实现了请求的发送者和请求的处理者解耦。将请求和处理分开,实现解耦,提高系统的灵活性简化了对象,使对象不需要知道链的结构调试不方便。采用了类似递归的方式,调试时逻辑可能比较复杂。
2023-01-22 23:08:13
303
原创 【设计模式】中介者模式、命令模式、访问者模式
命令模式将请求以命令的形式封装如一个对象中,并传递给调用对象,使得可以用不同的请求来对调用客户参数化。访问者模式封装一些对于某些数据结构各元素的操作,在不改变数据结构元素的前提下定义作用于这些元素的新操作,将操作与数据结构分离。原理是在被访问的类中添加一个对外提供接待访问者的接口。应用于当需要对某些数据结构元素进行一些操作,同时避免这些操作污染这些元素的场景。
2023-01-21 23:34:47
321
原创 【设计模式】组合实体模式、享元模式、外观模式、代理模式
为了避免程序中使用了过多重复的对象而造成过大的内存开销,让重复的对象共享一个对象。将对象的状态分为外部状态和内部状态,可以共享的状态作为内部状态存储在对象中。有一些接口,分散在不同的独立模块中,客户不需要知道它们具体都是在哪里实现的,需要将这些接口组合在一起。比如说KTV中有电视、音响、灯光等设备,都有各自的开关,就可以实现一个总开关的功能。
2023-01-05 00:39:19
86
原创 【设计模式】桥接模式、适配器模式、装饰器模式
将抽象部分与实现部分分离,使它们都可以独立的变化。桥接模式的核心意图就是把这些实现对立出来,让它们各自变化。这就使得每一种实现的变化不会影响其他实例。比如说我实现了A手机品牌上某个软件的类,但是如果客户需求改变,需要改为B手机品牌上实现,明天又改变软件的需求,这样的话如果都放在一个类里实现,就会很混乱。我可以设计一个手机品牌的抽象类和一个手机软件的抽象类,不同的手机品牌和软件继承他们的抽象类,具体的手机品牌中拥有手机软件的指针。
2023-01-03 18:22:46
182
原创 【设计模式】单例模式、建造者模式、原型模式
抽象工厂模式、建造者模式、原型模式实际上都是通过一个类或实例来创建新实例的模式。他们的区别是,抽象工厂模式更注重产品类之间的联系,建造者更注重创建产品的每个步骤,原型模式更注重创建自身的拷贝。
2023-01-01 20:48:35
107
原创 【设计模式】工厂模式:简单工厂、工厂、抽象工厂
在工厂模式中,工厂父类负责定义创建产品对象的公告接口,而工厂子类负责生成具体的产品对象。目的是将产品的实例化操作延迟到工厂子类中完成,通过工厂子类来确定究竟应该实例化哪一个具体产品类。抽象工厂模式是工厂方法模式的泛化版,工厂模式是一种特殊的抽象工厂模式,在工厂模式中,每个具体工厂只能生产一种具体的产品,而抽象工厂方法模式中,一个具体的工厂可以生产多个具体产品。
2022-12-31 17:34:45
210
原创 c++实现一个高并发服务器(三)服务器
本服务器利用linux提供的epoll io复用技术来实现高并发访问对于客户端提供指定目录下文件的下载功能,利用线程池来处理客户端的请求前文c++实现一个高并发服务器(二)线程池c++实现一个高并发服务器(一)任务队列到这里我们的高并发服务器基本上以及实现完毕了,后续还会做一些小的改进,或者添加一些新的功能。
2022-12-24 16:51:00
1606
原创 c++ 使用mysql++ 操作数据库进行增删改查
MySQL++是官方发布的一套C++ API;MySQL++是对MySQL和MariaDB C api的再次封装,是 MySQL C API 的强大 C ++包装器(使用 STL 容器);它建立在与标准c++库相同的原则之上,使处理数据库如同处理std容器(STL)一样简单。MySQL++还提供了一些工具,可以让您在自己的代码中避免重复的SQL,为这些常见任务提供了本地c++接口。我运行了mysql++文件中的resetdb,自动创建练习数据库,编写一个基于控制台的用户程序对此数据库增删改查。/*
2022-12-17 13:51:17
500
原创 c++实现一个高并发服务器(二)线程池
我们使用线程的目的本是出于效率考虑,可以为了创建这些线程却消耗了额外的时间,资源,对于线程的销毁同样需要系统资源。线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。工作线程:在线程池创建时被创建,用一个线程数组保存,没有任务时阻塞,有任务时取出任务并执行。线程无法管理,无节制地创建线程对于有限的资源来说似乎成了“得不偿失”的一种作用。cpu资源有限,上述代码创建线程过多,造成有的任务不能即时完成,响应时间过长。在上次我实现了线程池的一个组件:任务队列。
2022-12-16 16:51:28
718
原创 reactor模式学习
reactor基于事件驱动的,它有一个或多个并发输入源,有一个Service Handler,和有多个Request Handlers。reactor模式是将一个请求通过Service Handler分发给event Handler实现一个reactor,主要由以下几部分组成:reactor:反应堆;主要功能:注册事件、移除事件、分发事件EventHandler:事件,事件处理SynchronousEventDemultiplexer:采集事件。
2022-12-15 23:15:29
112
原创 libevent库学习 bufferevent
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。Libevent 已经被广泛的应用,作为底层的网络库;
2022-12-14 17:11:24
94
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人