自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 面试题(一)

Netty 是一个高效、灵活、异步的网络框架,它通过事件驱动模型、非阻塞 I/O 和强大的内存管理,提供了在高并发场景下的卓越表现。Netty 适用于各种网络应用场景,并广泛用于高性能、分布式系统的开发中。I/O 多路复用是一种非常高效的并发处理机制,尤其是在需要同时处理大量网络连接的场景中,能有效提升系统的吞吐量和响应能力。随着epoll和kqueue等高效机制的引入,I/O 多路复用已经成为现代服务器开发的关键技术之一。在高并发、高性能要求的场景下,select。

2024-09-22 23:07:48 826

原创 面试题(二)

综上所述,选择最优的通信机制要考虑具体的应用场景、性能需求、同步要求和实现复杂度等因素。没有绝对的“最优”方案,只有适合的解决方案。在不同的应用场景中,通信机制的“最优”取决于具体需求和环境。(Internet Assigned Numbers Authority)管理。:49152 到 65535。:1024 到 49151。端口值的范围和分配标准由。前者速度快,但不够安全。

2024-09-22 23:07:38 446

原创 面试题(三)

分段和分页各有优缺点,分段适合逻辑模块化的程序,分页则更擅长减少内存碎片并提供更灵活的内存管理。结合两者的方式能够更好地平衡这两者的缺点,实现高效的内存管理。虚函数表存放在静态的内存区域,由编译器在类定义时生成并初始化,而 vptr 则存储在每个对象中,指向该类的虚表,保证虚函数能够在运行时进行正确的动态调用。

2024-09-22 23:06:52 1061

原创 面试题(四)

通过这种方法,只用两刀就能把金条分成满足每天需求的 7 段金条。每段的长度是通过组合来满足每一天的需要。通过优化进程使用的 CPU 时间、内存、I/O 资源、文件句柄、网络带宽和系统调用等,可以有效降低各个资源的使用,提高系统的整体性能和响应速度。这不仅有助于提高单个进程的效率,也能减少对系统资源的压力,提升多进程环境下的稳定性和可用性。设计一个好的接口需要综合考虑功能、简洁性、一致性、扩展性、安全性等多个方面。通过清晰的文档和示例,可以帮助用户更好地理解和使用接口,从而提高整体开发效率和用户体验。

2024-09-22 23:06:08 662

原创 面试题(五)

虽然 HTTPS 在数据加密和身份验证方面提供了重要的保护,但它并不能直接防止 DNS 攻击。为了全面防护,结合 DNSSEC 和安全 DNS 服务等措施可以有效提高安全性。

2024-09-22 23:01:04 452

原创 面试题(六)

封装是面向对象编程中的一个基本原则,旨在将对象的状态(属性)和行为(方法)隐藏起来,仅通过公开的接口与外部进行交互。这有助于保护对象的内部状态,减少系统复杂性,提高代码的可维护性。继承可能会破坏封装,特别是当子类直接访问父类的受保护成员或依赖于父类的实现细节时。然而,通过使用适当的访问修饰符、设计良好的接口和考虑组合的使用,可以在一定程度上减少这种影响,从而保持良好的封装性。MVC 是一种有效的架构模式,通过分离模型、视图和控制器的关注点,促进了代码的组织和维护。

2024-09-22 22:59:06 921

原创 面试题(七)

尽管 HTTPS 大幅提高了数据传输的安全性,但它并不是绝对安全的。通过中间人攻击、证书伪造、协议漏洞、钓鱼等多种方式,攻击者仍然有可能绕过安全措施。采取一系列防范措施,包括使用强加密、确保证书的有效性、强化身份验证和监控网络活动,可以大大降低安全风险。MAC 地址在网络通信中扮演着关键角色,通过唯一标识设备、支持数据链路层通信、进行地址解析和增强网络安全等方式,确保了局域网中数据的可靠传输和管理。## 66、进程,程序,线程的区别。

2024-09-22 22:53:07 753

原创 面试题(八)

客户端数据库在离线访问、快速数据访问、用户偏好设置、缓存机制等多个场景中得到了广泛应用。它们帮助提高应用性能和用户体验,适应不同的使用需求。保证客户端数据库和服务端数据库消息一致性的方法有多种,包括数据同步机制、版本控制、增量更新、操作队列等。选择合适的策略取决于应用的具体需求和场景,以及对一致性、可用性和性能的权衡。通过合理设计和实施这些策略,可以有效地提高系统的一致性和可靠性。数据库存储一条数据的过程涉及接收数据、解析 SQL 语句、优化查询、执行计划、事务管理、数据写入、索引更新、日志记录等多个步骤。

2024-09-22 22:48:35 789

原创 面试题(九)

用户态和内核态的切换是操作系统实现多任务、保护内存和资源管理的重要机制。切换通常发生在系统调用、中断、异常和进程调度等时机,通过保存和恢复上下文来实现状态转变。理解这些机制有助于更深入地掌握操作系统的工作原理。接口(Interface)是一个重要的概念,在计算机科学中有多个层面的含义,尤其是在计算机组成原理和软件工程中。以下是对这两种接口的理解以及它们之间的相同点和不同点。接口在计算机组成原理中侧重于硬件组件之间的交互,而在软件工程中侧重于定义对象的行为和功能。

2024-09-22 22:44:25 1795

原创 【无标题】

选择哪种方案取决于具体的应用场景、数据量和可用资源。外部排序适合非常大的数据集,最小堆方法简单高效,分布式计算适合大规模并行处理,而采样则适用于快速处理和初步分析。选择合适的方案取决于数据规模、可用资源和具体需求。哈希表适合较大文件且内存足够的情况,排序适合较小文件,数据库处理则适合非常大的数据集,而外部工具提供了一种简单快速的解决方案。

2024-09-22 22:32:32 1027

原创 http请求怎么解析的 平时常用的正则表示式

http请求怎么解析的 平时常用的正则表示式ChatGPT在处理 HTTP 请求时,解析是一个重要步骤,通常包括解析请求行、请求头和请求体。正则表达式在解析 HTTP 请求时非常常用,特别是处理简单的 HTTP 请求格式。下面我会介绍 HTTP 请求的解析步骤,以及一些常用的正则表达式。HTTP 请求的基本结构HTTP 请求由以下几个部分组成:请求行:包含请求方法、请求路径和 HTTP 版本,例如:bashCopy code。

2024-09-22 21:11:37 1016

原创 多线程异步回调

多线程异步回调是一个强大的工具,能够提高应用程序的并发性和响应性。通过合理的线程管理和同步机制,可以避免常见的并发问题,如死锁和数据竞争。

2024-08-15 09:57:22 1261

原创 100万个用户访问共享内存,不能用锁、信号量,怎么保证互斥访问

在不使用锁和信号量的情况下,保证互斥访问可以通过原子操作、无锁数据结构、线程局部存储、分区锁等技术来实现。这些技术可以有效避免传统锁带来的开销和问题,但在使用时需要小心管理数据的一致性。选择哪种技术要根据实际的应用场景和需求来决定。

2024-08-14 18:09:52 690

原创 异步回调导致的野指针,怎么加锁

使用互斥锁可以确保在回调函数执行期间对象不会被销毁,但可能会增加锁的开销。智能指针(std::shared_ptr 和 std::weak_ptr) 是管理对象生命周期的好工具,能有效避免野指针问题,推荐在异步回调场景中使用。根据具体场景选择合适的方法,确保对象的生命周期和回调之间的同步控制。

2024-08-14 18:07:40 277

原创 MySQL笔记(十):MySQL管理

【代码】MySQL笔记(十):MySQL管理。

2024-08-07 16:48:22 466 1

原创 MySQL笔记(十):视图

看一个需求emp表里的列信息很多,有些信息是个人重要信息(比如sal,comm,mgr,hiredate),如果我们希望某个用户只能查询emp表的(empno,ename,job,deptno)信息,有什么办法 =》视图。

2024-08-07 12:36:45 358

原创 MySQL笔记(九):存储引擎

例如网吧,用户再次上线时会更新状态#表类型和存储引擎-- 查看所有的存储引擎-- 1、innodb 支持事务,外键,行级锁id INT,-- 1、添加速度快 2、不支持外键和事务 3、支持表级锁-- memory-- 1、数据存在内存 [关闭mysql服务,数据丢失,表结构还在] 2、执行速度快 没有I/O读写 3、默认支持索引 基于哈希表 4\id INT,COMMIT;-- 修改存储引擎。

2024-08-07 11:59:05 293

原创 MySQL笔记(八):事务

多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离事务,以保证各个连接在获取数据时的准确性如果不考虑隔离性,可能会引发:脏读:dirty read,当一个事务读取另一个事务尚未提交的修改时,产生脏读不可重复读:nonrepeatable read, 同一查询在同一事务中多次进行,由于其他连接提交事务所做的**修改或删除,**每次返回不同的结果集,发生不可重复读。

2024-08-07 11:27:07 409

原创 MySQL笔记(七):索引

全文索引:在一个文章里找一个关键字。普通索引允许该字段重复。

2024-08-06 22:25:07 330

原创 MySQL(六):mysql 约束

基本介绍:约束用于确保数据库的数据满足特定的商业规则,约束包括:not null、unique、primary key、foreign key 、check五种。一、主键的使用(primary key)用于唯一的表示表行的数据,当定义主键约束后,该列不能重复。

2024-08-06 20:40:52 536

原创 MySQL笔记(五):多表查询

对单表进行加强查询。

2024-08-06 10:45:00 447

原创 MySQL(四):函数

【代码】MySQL(四):函数。

2024-08-05 16:52:40 397

原创 MySQL笔记(三):修改表

二、CRUD([create][read][update][delete],增删改查)语句。##注:需要在cmd管理员命令行链接mysql再打开sqlyog。5、统计、合计函数(count、sum、avg、max\min)4、select语句(查询语句)1、insert语句。2、update语句。3、delete语句。

2024-08-05 11:34:48 2332

原创 TInyWebServer面试题

⾸先我项⽬中使⽤了I/O多路复⽤技术,每个线程中管理⼀定数量的连接,只有线程池中的连接有请求,epoll就会返回请求的连接列表,管理该连接的线程获取活动列表,然后依次处理各个连接的请求。在开发阶段对于⼀些功能的不同实现⽅法,我先思考⼀下各个⽅法的应⽤场景和效率,再进⾏选择,通过这个项⽬,我学习了两种Linux下的⾼性能⽹络模式,熟悉了Linux环境下的编程,并在后期优化的过程中了解了⼀些服务端性能调优的⽅法。这部分的难点主要是找出服务器的性能瓶颈,然后结合⾃⼰的想法去突破这个瓶颈,提⾼服务器的性能。

2024-08-01 22:39:20 979

原创 TinyWebServer详解(3):http连接处理

如果缓冲区 m_read_buf 已经填满了数据(即 m_read_idx 达到 READ_BUFFER_SIZE),但在这些数据中没有找到行结束标志,则此时的行是尚未完全读取的。例如,根据请求的Content-Type判断请求的数据类型,选择相应的处理方式。主状态机在处理请求的不同阶段(如请求行、请求头、消息体)之间切换,确保按照协议要求逐步解析和处理请求。在HTTP服务器中,请求处理完成后将主状态机转移到处理请求头的原因通常是因为HTTP协议的请求处理是分阶段的,需要逐步解析请求内容。

2024-08-01 22:38:59 601

原创 TinyWebServer详解(2):半同步半反应堆线程池

信号量的P操作会使信号量减1,如果信号量为0,线程会阻塞在这里,直到信号量大于0。这个构造函数创建一个线程池,初始化成员变量,分配线程数组内存,并循环创建并分离线程。相对地,非分离状态的线程需要通过 pthread_join 来等待它的结束,并回收它的资源。对于非分离状态的线程,必须使用 pthread_join 来等待线程结束并回收资源,否则会导致资源泄漏。通过将线程设置为分离状态,可以避免主线程或其他线程显式等待该线程的结束,简化了线程的管理。存储位置、线程属性、线程执行函数和传递给线程函数的参数。

2024-08-01 22:38:49 587

原创 TImyWebServer项目详解(1)-线程同步机制封装类

如果在指定的超时时间内条件变量被其他线程用pthread_cond_signal 或 pthread_cond_broadcast唤醒,线程会重新获得互斥锁并返回。在等待条件变量时,pthread_cond_wait会自动释放互斥锁,并在被唤醒后重新加锁。在构造函数中申请分配资源,在析构函数中释放资源,因为C++的语言机制保证了,当一个对象创建的时候,自动调用构造函数,当对象超出作用域的时候会自动调用析构函数,所以,在RAII的指导下,我们应该使用类来管理资源,将资源和对象的生命周期绑定。

2024-08-01 22:38:37 958

原创 TinyWebSever代码解析(一):初始化,进程通信部分

这段代码定义了 WebServer 类中的 eventListen 方法,用于初始化网络编程所需的基本步骤,包括创建监听 socket,设置 socket 选项,绑定地址,开始监听,以及配置 epoll 和信号处理等。这两行代码的目的是将 m_pipefd 和 m_epollfd 的值赋给 Utils 类的静态成员变量 u_pipefd 和 u_epollfd。socket() 函数的参数共同决定了创建的套接字的类型和行为,包括使用的地址族(协议族)、套接字的类型(面向连接或无连接)以及使用的具体协议。

2024-08-01 22:38:04 1086

原创 MySQL笔记(二):创建表

使用规范:再能狗满足需求的情况下,尽量选择占用空间小的类型。character set:如不指定则为所在数据库字符集。三、备份恢复数据库(备份到另一个DBMS中去)collate:如不指定则为所在数据库校对规则。如果数据是定长,推荐使用char,如邮编、电话。恢复数据库(进入mysql命令行再执行)如果数据不定长,使用vachar,如文章。五、列类型(即mysql的数据类型)备份数据库(在DOS中执行)命令行。一、创建数据库(create)二、查询数据库(show)datatype:数据类型。

2024-07-31 12:30:45 806

原创 MySQL笔记(一):基础

1、所谓安装MySQL数据库,就是在主机上安装一个数据库管理系统(DBMS,database manage system),这个管理程序可以管理多个数据库。(3)在安装mysql文件夹里无法新建txt文件(因为装在了C盘)3、数据库管理系统(DBMS),数据库和表的关系如图所示。在其他文件夹建立my.ini.txt后复制到安装路径里。然后在cmd里输入mysql -u root -p。2、一个数据库可以创建多个表,以保存数据(信息)。DBMS、数据库、数据库里的文件。(1)MySQL端口查询命令。

2024-07-30 18:06:16 300

原创 LINUX学习日记(十一):日志管理

日志轮替之所以可以再指定的时间备份日志,是依赖系统定时任务,在/etc/cron.daily/目录,就会发现这个目录中是由logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行。centos7.6日志服务是rsyslogd,centos6.X是syslogd,rsyslogd功能更强大,它的使用、日志文件的格式,和syslogd服务兼容。1、日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、启动信息、安全信息、邮件相关信息、各种服务相关信息等。

2024-06-26 21:35:52 419

原创 LINUX学习日记(十):rpm和yum

Yum使一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖性关系,并且以此安装所有依赖的软件包,yum list | grep 软件列表。查询yum服务器是都有需要安装的软件。

2024-06-26 11:14:20 242

原创 LINUX学习日记(九):进程管理(重点)

服务本质就是进程,但是运行在后台,通常都会监听某个端口,等待其他程序的请求,比如(mysql,sshd,防火墙等),因此又称为守护进程。打开一个txt,在界面下方会显示gedit,执行kill gedit,可以强制关闭,也支持通配符,这在系统负载过大而变得很慢时,很有用。在root登录下输入u,在输入milan,再输入k,在输入milan的bash行对应的pid,然后回车,然后输入9(强制删除),再回车。3、一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。

2024-06-26 10:55:39 899

原创 LINUX学习日记(八)网络配置

编辑->虚拟网络编辑器->右下角更改设置->子网ip改成192.168.200.0->NAT设置,192.168.200.2->确定->确定。#IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)tom下不能修改/etc/hostname的内容,需要改到root下(太懒了不想重新截图了)要求:将ip地址配置成静态的,比如:ip地址为192.168.200.130。设置完之后,可以看到shell页面挂掉了,因为ip变了连不上。

2024-06-24 20:12:07 621

原创 LINUX学习日记(七):磁盘分区机制

2、Linux采用了一种叫“载入”的处理方法,它的整个文件系统包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入的一个分区将使它的存储空间在一个目录下获得。1、LINUX来说无论有几个分区,分给哪个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。说明:开始分区后,输入n,新增分区,然后选择p,分区类型为主分区,两次回车后默认剩余全部空间,最后输入w写入分区并退出,暂不保存退出输入q。1、统计/opt文件夹下的文件个数。

2024-06-24 17:01:27 1023

原创 LINUX学习日记(六):定时任务调度

步骤2):0 2 * * * myaqldump -u root -proot testdb > /home/db.bak。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。date >> /home/mycal(将当前日期追加写入到mycal)cal >> /home/mycal (将当前日历追加写入到mycal)一次性定时任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。2天后的下午5点执行 /bin/ls /home。

2024-06-24 11:21:27 469

原创 LINUX学习日记(五):组和权限

usermod -d 目录名 用户名 :改变该用户登录的初始目录,**特别说明:**用户需要有进入到该目录的权限。u:所有者 g:所有组 o:其他人 a:所有人 (u,g,o的总和)3)jack创建一个文件,自己可以读写,本组人可以读,其他组人可以。一般为文件的创建者,谁创建了该文件,就自然地成为了该文件的所有者。1)chmod u=rwx,g=rx,o=x 文件/目录名。4)jack修改该文件,让其他组人可以读,本组人可以读写。如果要对目录内的文件进行操作,需要有对该目录的相应权限。

2024-06-23 17:39:16 342

原创 LINUX学习日记(四):实用指令

基于Vi编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容,more内置了若干快捷键(交互的指令)软链接也称符号链接,类似于windows的快捷方式,主要存放了链接其他文件的路径。zip -r myhome.zip /home/:包括home的所有文件夹都压缩。5) date “+%Y-%m-%d %H:%M:%S”(年月日时分秒)-a :显示当前目录下所有文件和目录,包括隐藏的。(2)help 命令 (查看指令信息)(3)pwd 指令:显示文件的绝对路径。which 指令:查看指令在哪个目录下。

2024-06-22 12:31:20 685

原创 LINUX学习日记(三):登录注销、用户管理

退出root,输入logout(只能用shell时这么退,在linux终端用exit)useradd -g 组名 用户名(如要切换所在组,直接将组名换成指定组)useradd -d /home/test(目录) king(用户名)一般使用非管理员(root)用户登录,然后授予管理员权限。第三个参数表示用户组,在未指定用户组时默认是自己。cd /root(cd和/之间有空格)su - root(-和前后都有空格)pwd查看用户在哪个目录下创建。(1)删除用户,但要保留家目录。userdel -r 用户名。

2024-06-21 20:53:51 337

原创 LINUX学习日记(二):vim编辑器

在命令行输入 vim “hello.cpp”(建立一个名为"hello.cpp"的文件)然后输入i,I,o,O,a,A,r,R等任意一个字母进入插入模式,才能编辑。然后点击esc,表示结束输入,再输入:,进入命令行模式,一般模式:输入 vim hello.cpp后进入的模式。7、一般模式下,输入 行号,shift+g。6、一般模式下(按esc回到一般模式):wq (表示write,quit)3、查找在命令行模式下输入。1、yy在一般模式下输入。2、dd在一般模式下输入。:进入命令行 +/关键字。

2024-06-21 16:55:04 186

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除