meowrain

MeowRain

Life is Simple

C Stat函数使用

C stat函数使用 头文件:#include<sys/stat.h> #include<uninstd.h> 定义函数:int stat(const char * file_name, struct stat *buf); 函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中。 struct stat *buf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 struct stat { dev_t st_dev; //device 文件的设备编号 ino_t st_ino; //inode 文件的i-node mode_t st_mode; //protection 文件的类型和存取的权限 nlink_t st_nlink; //number of hard links 连到该文件的硬连接数目, 刚建立的文件值为1. uid_t st_uid; //user ID of owner 文件所有者的用户识别码 gid_t st_gid; //group ID of owner 文件所有者的组识别码 dev_t st_rdev; //device type 若此文件为装置设备文件, 则为其设备编号 off_t st_size; //total size, in bytes 文件大小, 以字节计算 unsigned long st_blksize; //blocksize for filesystem I/O 文件系统的I/O 缓冲区大小.

Linux C网络编程

转换ip inet_pton() inet_pton 函数用于将字符串表示的 IP 地址转换为网络字节序的二进制格式。与 inet_ntop 相反,inet_pton 的用途是从人类可读的字符串格式转换到机器可读的二进制格式。 函数原型 1 2 3 #include <arpa/inet.h> int inet_pton(int af, const char *src, void *dst); 参数 af:地址家族,可以是 AF_INET(表示 IPv4)或 AF_INET6(表示 IPv6)。 src:指向以字符串形式表示的地址(如 "192.168.1.1" 或 "2001:db8::1")。 dst:指向存储转换后地址的缓冲区。 返回值 成功时返回 1。 如果输入的字符串不是有效的网络地址,返回 0。 失败时返回 -1,并设置 errno 来指示错误。 使用示例 以下是使用 inet_pton 的示例,展示如何将 IPv4 和 IPv6 地址从字符串格式转换为二进制格式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <stdio.

计算机网络基础知识

基础知识 MAC 地址 (1)计算机联网必须的硬件是安装在计算机上的网卡 (2)通信中,用来标识主机身份的地址就是制作在网卡上的一个硬件地址。每块网卡在 生产出来后,都有一个全球唯一的编号来标识自己,这个地址就是 MAC 地址,即网卡的 物理地址 (3)MAC 地址由 48 位二进制数组成,通常分成六段,用 16 进制表示,其中前 24 位是生 产厂商向 IEEE 申请的厂商编号,后 24 位是网络接口卡序列号 (4)MAC 地址的第 8 位为 0 时,表示该 MAC 地址为单播地址;为 1 时,表示该 MAC 地址 为组播 MAC 地址。 (5)单播的发送方式为一对一,即一台主机发送的数据只发送给另一台主机。 (6)广播方式为一对多,即一台主机发送一个数据,在这个网段的所有主机都能收到 (7)组播方式介于单播和广播之间,也是一对多,但接收者不是网段上的全体成员,而 是一个特定的组的成员。 以太网帧格式: IP IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。 IP 包格式 IP 地址的基础知识 IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以二进制的方式处理的。 人类为了方便记忆采用了点分十进制的标记方式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「.」隔开,再将每组转换成十进制。 IP 地址分类 A 类: 0.

Java Spring笔记06 Bean的实例化模式 Spring

Bean的实例化模式 Spring为Bean提供了多种实例化方式,通常包括4种方式。(也就是说在Spring中为Bean对象的创建准备了多种方案,目的是:更加灵活) ● 第一种:通过构造方法实例化 ● 第二种:通过简单工厂模式实例化 ● 第三种:通过factory-bean实例化 ● 第四种:通过FactoryBean接口实例化 通过构造方法实例化 1 2 3 4 5 6 7 8 ConstructorBean.java package com.powercode.spring6.beans; public class ConstructorBean { public ConstructorBean(){ } } 1 2 3 4 5 6 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="constructorBean" class="com.powercode.spring6.beans.ConstructorBean"></bean> </beans> 1 2 3 4 5 6 7 8 9 测试程序` @Test public void testConstrucotrBean(){ Logger logger = LoggerFactory.getLogger(FirstSpringTest.class); ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring9.

Java Spring笔记05 工厂模式 设计模式

工厂模式的三种形态 工厂模式通常有三种形态: ● 第一种:简单工厂模式(Simple Factory):不属于23种设计模式之一。简单工厂模式又叫做:静态 工厂方法模式。简单工厂模式是工厂方法模式的一种特殊实现。 ● 第二种:工厂方法模式(Factory Method):是23种设计模式之一。 ● 第三种:抽象工厂模式(Abstract Factory):是23种设计模式之一。 简单工厂模式 简单工厂模式的角色包括三个: ● 抽象产品 角色 ● 具体产品 角色 ● 工厂类 角色 抽象产品角色: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.powernode.factory; /** * 武器(抽象产品角色) * @author 动力节点 * @version 1.0 * @className Weapon * @since 1.0 **/ public abstract class Weapon { /** * 所有的武器都有攻击行为 */ public abstract void attack(); } 具体产品角色:

Java Spring笔记04 Spring引入外部属性配置文件

Spring引入外部属性配置文件 我们都知道编写数据源的时候是需要连接数据库的信息的,例如:driver url username password等信息。这些信息可以单独写到一个属性配置文件中吗,这样用户修改起来会更加的方便。当然可以。 第一步:写一个数据源类,提供相关属性。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 MyDataSource.

Java Spring笔记03 Spring三种命名空间

p命名空间注入 目的:简化配置。 使用p命名空间注入的前提条件包括两个: ● 第一:在XML头部信息中添加p命名空间的配置信息:xmlns:p=“http://www.springframework.org/schema/p" ● 第二:p命名空间注入是基于setter方法的,所以需要对应的属性提供setter方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Customer.java package com.powercode.spring6.beans; public class Customer { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age){ this.age = age; } @Override public String toString() { return "Customer{" + "name='" + name + '\'' + ", age=" + age + '}'; } } 1 2 3 4 5 6 7 8 spring3.

Java Spring笔记02 Spring自动装配

基于的XML自动装配 根据名称自动装配 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 UserDao.java package com.powercode.spring6.dao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* * Bean * * */ public class UserDao { private static final Logger logger = LoggerFactory.getLogger(UserDao.class); public void insert() { //用log4j2日志框架 logger.info("数据库正在插入用户信息"); } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 UserService.

Java Spring笔记01 Set注入

maven配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>spring_first</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.

JavaPO,BO,VO,DTO,POJO,DAO概念

Java PO,BO,VO,DTO,POJO,DAO概念 一篇文章讲清楚VO,BO,PO,DO,DTO的区别 - 知乎 (zhihu.com) POJO (Plain Old Java Object) Java POJO (Plain Old Java Object) 是指一个最基本的、普通的Java对象。POJO通常具有以下特点: 只包含私有属性,没有public、protected的属性。属性通常用private修饰。 提供getter和setter方法来访问和修改属性。 不继承或实现任何特定的接口和类。 不包含任何注解。 不依赖外部jar包和类库。 除了基本的构造方法、getter/setter方法、equals/hashCode/toString方法之外,没有任何其他方法。 POJO主要用于表示简单的数据结构,其设计符合面向对象的基本原则,可以很方便地进行序列化和反序列化。在Java Web应用中,POJO常用来接收和传递数据,例如作为Model对象。Spring框架也大量采用POJO设计模式。所以简单来说,POJO就是一个最基本的Java类,没有复杂的依赖关系,用来表示简单的数据模型。 DTO(Data Transfer Object)数据传输对象 DTO是一个比较特殊的对象,他有两种存在形式: 在后端,他的存在形式是java对象,也就是在controller里面定义的那个东东,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架 在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体 这也是为什么把他画成横跨两层的原因 这里可能会遇到个问题,现在微服务盛行,服务和服务之间调用的传输对象能叫DTO吗? 我的理解是看情况 DTO本身的一个隐含的意义是要能够完整的表达一个业务模块的输出 如果服务和服务之间相对独立,那就可以叫DTO 如果服务和服务之间不独立,每个都不是一个完整的业务模块,拆开可能仅仅是因为计算复杂度或者性能的问题,那这就不能够叫做DTO,只能是BO VO (View Object) VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看到的,这就叫VO VO主要的存在形式就是js里面的对象(也可以简单理解成json) VO和DTO的区别 PO(bean,entity等命名) Persisitant Object 持久对象,数据库表中的记录在java对象中的显示状态 一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象 通常PO里面除了get,set之外没有别的方法 对于PO来说,数量是相对固定的,一定不会超过数据库表的数量 等同于Entity,这俩概念是一致的 BO(Business Object)业务对象 BO就是PO的组合 简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象 复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象 BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法 为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成 很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用 BO和DTO的区别 这两个的区别主要是就是字段的删减 BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供 在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成 DAO(Data Access Object) 数据访问对象 DAO(Data Access Object) 是数据访问对象的简称,是JavaWeb应用中用于封装对数据源的访问的组件。
0%