C语言读写文件
主要讲解系统提供的读写文件的函数简单使用方式,以及简单的示例代码与运行结果
fgetc和fputc此函数主要用于字符的读入与写出出,一般一次读入或写出一个字符。
函数原型1234567891011121314151617// focus 重点int fgetc(FILE *stream);int getc(FILE *stream);int getchar(void);int ungetc(int c, FILE *stream);// focus 重点int fputc(int c, FILE *stream);int putc(int c, FILE *stream);int putchar(int c);
函数介绍函数描述12345678910111213fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.getc() is equivalent to fgetc() excep ...
Fork 学习
TODO
js变量的解构赋值与基本使用场景
主要讲解JS变量的解构赋值的语法,与其在开发过程中的实际使用场景。
js解构赋值数组解构赋值数组的解构遵循只要等号两边的模式相同,左边的变量就会被赋予对应的值。在使用的过程中可以使用默认值,默认值可以引用解构赋值的其他变量,但该变量必须已经声明
注意:数组的解构赋值,如果右边不是数组(不是可遍历的结构)会报错
正常的使用情况
123456789101112131415161718//完整的使用 //结果:a=1,b=2,c=3 var [a, b, c] = [1, 2, 3]; //结果:foo=1,bar=2,baz=3 let [foo, [[bar], baz]] = [1, [[2], 3]];//左边少,右边正常 //结果:c=3 var [, , c] = [1, 2, 3] //结果:a=1 var [a] = [1, 2, 3] //剩下的情况,聪明的你肯定已经明白//右边少,左边正常 //结果:a=1,b=undefined,c=undefined var [a, b, c] = [1] / ...
音视频领域认识
这个音视频领域主要集中在流媒体这一块,主要讲解视频会议、直播与点播。由于曾供职于一家传统视频会议厂商,后供职于一家互联网公司(需要做点播服务),因而对本人的经历进行总结。其中音视频领域分布很广,就我所知在这其中还有信令与编码两块主要内容,我主要关注于相对简单的信令层面。
视频会议、直播与点播的异同视频会议视频会议基本认知视频会议的本质就是要保证视频双方能够互相实时的交流沟通。
无论中间经过多少个MCU与桥接,都是为了互连互通,保证实时的交流沟通。
市场格局如题主要专注于专业视频会议这一块儿。区别与微信,qq,facebook等互联网视频互连,视频会议对于画质成像,音频音质,网络带宽,私有部署等都有着较高的要求。
这一块市场各方势力犬牙交错,有着CISCO、HUAWEI、宝利通等老牌厂商,也有诸如小鱼,VHD,腾讯视频会议,钉钉会议等新入局的硬件或软件企业。其中腾讯视频会议、钉钉会议主要解决的是传统厂商领域无法触及的公共视频服务领域,但是就本人观察而言他们与传统视频会议领域有一定的重合性。例如,在一些非重要场合有些部门仍采用公共视频服务。在疫情新新形势下,专业视频会议与公共视频服务的更是 ...
Mybatis基本使用
本文主要讲解mybatis的$与#的使用,关联查询中各个关键字的使用
动态语法的使用#{}的使用解析为一个JDBC预编译语句的参数标识符,把参数部分用占位符?代替
123select * from t_user from username = ?;#处理后,会对传入数据加''select * from t_user from username = 'Alice';
${}的使用只做简单的字符串替换,在动态SQL解析阶段将会进行变量替换
1select * from t_user where username = 'Alice';
#{}与${}对比#{}用占位符站位后,JDBC的PreparedStatement会对传入的参数进行校验,防止SQL注入。
${}替换为具体的字符串后不会再做任何检测
使用场景${}可以用于order by后的排序字段,表名,列名等。其中表名只能采用此
注:能使用#{}尽量用,如表名,order by的排序字段作为变量时使用${}
关联查询之一对多association与c ...
springcloud服务注册-eureka的使用
本文主要讲解eureka的简单使用,由于eureka的停更所以目前的学习只作为基础的了解。其中eureka的配置主要涉及pom(依赖导入)、application.yaml(配置)、代码注解这三个方面,本文主要着重在这三个方面!
Eureka服务端服务端pom的引入内容123456789101112131415<!--引入最新的eureka的server端--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!--引入springboot的web启动程序--><dependency> <groupId>org.springframework.boot</groupId> &l ...
c语言版本认识
主要讲解C语言从开始到目前的版本发展,以及新版本c语言标准对应支持的gcc版本。
C语言版本发展表格
主版本
C89
AMD1
C99
C11
别名
C90ANSICX3.159-1989ISO/IEC 9899:1990
C94C95
ISO/IEC 9899:1999
ISO/IEC 9899:2011
标准通过时间
1989
标准发布时间
1990
1995
1999
2011
GCC使用参数
-ansi-std=c90-std=iso9899:1990
-std=iso9899:199409
-std=c99-std=iso9899:199
-std=c11-std=iso9899:2011
GCC版本
GCC4.7.x
GCC使用此版本且带扩展时用参数
-std=gnu90
-std=gnu99
-std=gnu11
C语言实现时所对应的库
<float.h><limits.h><stdarg.h><stddef.h>
<iso646.h>
<stdbool.h& ...
两种编译tomcat源代码运行方式-maven与ant
解决直接通过idea编译运行tomcat源代码
ant方式ant是一种基于java的build工具,与maven的显著区别是ant的依赖关系需要编写者自己去确定,maven将这个过程自动化了。
安装ant从apache官网上下载ant,然后环境变量中创建ANT_HOME的路径,将%ANT_HOME%/bin添加到path后面。在cmd中ant -version得到如下图所示,则安装正确:
下载编译运行Tomcat的依赖通过cmd或powershell在tomcat源码路径下面运行以下命令
1ant ide-intellij
注意:依赖可能下载失败,可以采用浏览器下载,然后放置到c:/users/登录win的用户名/tomcat-build-libs中。
IDEA配置环境与添加依赖包
配置IDEA中的环境,主要配置ANT_HOME和TOMCAT_BUILD_LIBS,如下图所示:
项目中加载上一步下载的依赖
注意:在加载依赖过程中需要额外增加一个ant的jar包,主要用于后续编译使用,如上图圈红部分
IDEA编译Tomcat在IDEA中将Tomcat源码中的buil ...
springcloud工程搭建pom依赖
本文主要讲解SpringCloud项目搭建的时候涉及的pom文件依赖内容,以及对maven的字段的解释。在SpringCloud项目搭建过程中使用多模块的形式,因而主要解释多模块情况下pom的依赖问题
SpringCloud父项目的pom依赖123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687<!-- 统一管理jar包版本 --> <properties> <!--https://maven.apache.org/pom.html#Properties--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <proj ...
springboot源代码解析(1)
主要对spring boot的源代码进行解析,解析的内容包括启动顺序、代码的作用和设计代码的设计模式。第一次内容目标需要解决的问题关于springboot的配置的加载!
Spring Boot的入口类12345678@SpringBootApplicationpublic class SpringBootBestPracticeApplication { public static void main(String[] args) { SpringApplication.run(SpringBootBestPracticeApplication.class, args); } }
以上入口类主要使用SpringApplication中的方法,跟踪代码进入run
123456789101112public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) { ...