Demor's Blog

Keep Growing


  • Home

  • Tags

  • Categories

  • Archives

  • Sitemap

  • Search

(八)函数

Posted on 2017-11-08 | In 《C语言程序设计》 | | Visitors:

在一个函数中调用另一个函数,需要具备的条件如下:
1、首先被调用的函数必须是已经存在的函数(库函数或者用户自己定义的函数)
2、如果使用库函数,需要再本文件开头用#include命令调用有关函数库时所需要的信息包含到本文件中
3、如果使用用户自己定义的函数,而该函数的位置在调用他的函数的后面,应该在主调用幻术中对被调用的函数作声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
void main()
{
float add(float x, float y);//对函数add声明
float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
c = add(a,b);
printf("sum is %f\n",c);
}

float add(float x, float y)//函数首部
{
float z; //函数体
z = x + y;
return(z);
}
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
类型标识符 函数名()
{
声明部分
语句部分
}

int max(int x,int y)
{
int z;
z = x>y ? x : y;
return(z);
}

//空函数
void dummy()
{

}
void main()
{
float verage(float array[10]);
float score[10];aver;
}

float average(float array[10])
{
int i;
float aver,sum = array[0];
for(i=1;i<10;i++)
{
sum += array[i];
}
aver = sum/10;
return aver;
}
Read more »

(七)数组

Posted on 2017-11-07 | In 《C语言程序设计》 | | Visitors:

7.1 一维数组的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int a[10]; 
int a[10]= {0,1,2,3,4,5,6,7,8,9};

//例子用数组来处理就Fibonacci数列
#include <stdio.h>
void main()
{
int i;
int f[20] = {1,1};
for(i=2;i<20;i++)
{
f[i] = f[i-2] + f[i-1];
for(i=0;i<20;i++)
{
if(i%5==0)printf("\n");
printf("%12d",f[i]);
}
printf("\n");
}
}

7.2 二维数组的定义和引用

1
2
3
float a[3][4],b[5][10];

int a[3][4] = {{1,2,3,4},{5,6,7,8},{2,4,5,6}};

7.3 字符数组

1
2
char c[] = {'I','a','m','h'};
char doamond[5][5] = {{'','','*'},{'','*','','*'}};
Read more »

(四)最简单的C程序设计

Posted on 2017-11-05 | In 《C语言程序设计》 | | Visitors:

4.1 C语句概述

4.2 赋值语句

4.3 数据输入输出的概念及在C语言中的实现

4.4 字符数据的输入输出

4.4.1 putchar 函数

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
void main()
{
char a,b,c;
a = 'B';
b = 'O';
c = 'Y';
putchar(a);putchar(b);putchar(c);putchar('\n');
//BOY

putchar('\101');//A
putchar('\'');//'
}

4.4.2 getchar函数

1
2
3
4
5
6
7
8
9
10
函数的值就是从出入设备得到的字符
#include <stdio.h>
void main()
{
char c;
c = getchar();//运行时,如果从键盘输入 a,只有在按Enter键之后才会从到内存
putchar(c);

//getchar只能接受一个字符
}

4.5 格式输入与输出

4.5.1 printf函数

1
2
printf(格式控制,输出表列)
printf("%d,%c",a,b);
Read more »

(三)数据类型、运算符与表达式

Posted on 2017-11-03 | In 《C语言程序设计》 | | Visitors:

3.1 C语言的数据类型

  • 基本类型
    整形、字符型、浮点型(单精度型、双精度型)、枚举类型
  • 构造类型
    数组类型、结构体类型、共用体类型
  • 指针类型
  • 空类型

3.2 常量与变量

3.2.1 常量和符号常量

1
2
# define PRICE 30
# include <stdio.h>

3.2.2 变量

变量代表内存中具有特定属性的一个存储单元,用来存放数据,也就是变量的值

在对程序年一连接时由编译系统给每一个变量名分配对应的的内存地址,从变量中取值,实际上是通过变量名找到对应的内存地址,从该存储单元中读取数据

C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线

Read more »

(二)程序的灵魂 - 算法

Posted on 2017-11-02 | In 《C语言程序设计》 | | Visitors:

第2章 程序的灵魂 - 算法

一个程序包括一下两个方面的额内容:
1、对数据的描述
2、对操作的描述,即操作步骤 也就是算法

数据结构 + 算法 = 程序

2.1 算法的概念

广义的讲,为解决一个问题而采取的方法和步骤就称为算法

2.2 算法举例

2.3 算法的特性

  • 有穷性
  • 确定性
  • 有零个或者多个输入
  • 有一个或者多个输出
  • 有效性

2.4 怎样表示一个算法

2.4.1 用自然语言表示算法

自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言,用自然语言表示通俗易懂,但文字冗长,容易出现歧义性

2.4.2 用流程图表示算法

用图形表示算法,直观形象,便于理解

2.4.3 3中基本结构和改进的流程图

Read more »

谈谈对MVC工作原理的认识和常见的MVC框架

Posted on 2017-10-06 | In Interview Prepare | | Visitors:

谈谈对MVC工作原理的认识和常见的MVC框架

Model、View、Controller

数据模型层,视图层、控制器(业务处理层)

TP、Yii2、CI、Yaf

单一入口工作原理

用一个处理程序文件处理多有的HTTP请求,根据请求参数的模块去完成对应操作

优势:

  • 可以进行统一的安全性的检查
  • 集中处理程序

劣势:

  • URL不美观
  • 处理效率会稍低

    模板引擎的理解

PHP 是一种HTML内嵌的在服务器端执行的脚本语言,但是PHP有很多可以使PHP代码和HTML代码分开的模板引擎,例如Smarty,Twig,Haml

工作原理:
庞大的完善的正则表达式的替换库

常见框架的特性考点

php框架有哪些,用过哪些,各自的优缺点是什么?

PHP框架的差异和优缺点

Yaf框架

使用php扩展的形式写的一个php矿建,以C语言为底层编写的,性能上要比PHP代码写的快一个数量级

优点:执行效率高,轻量级、扩展性高

缺点:高版本兼容性查、底层代码可读性差、需要安装扩展、功能单一、开发需要编写大量的插件

Yii2框架

Yii2框架是一款非常优秀的通用web后端框架,结构简单优雅,使用功能丰富,扩展性强,性能高

缺点:
学习成本高,量级重

常见框架的特性

Yii2的路由配置

TP框架

Mysql基础操作

Posted on 2017-10-05 | In Interview Prepare | | Visitors:

Mysql基础操作

连接和关闭:mysql -u用户名 -p密码 -h主机地址 -P端口号

其他:\G,\c,\q,\s,\h,\d

InnoDB 表引擎

  • 默认事务型引擎,最重要最广泛的存储引擎
  • 数据存储到共享表空间,可以通过配置分开
  • 对主键查询的性能高于其他类型的存储引擎
  • 内部做了很多的优化,从磁盘读取数据时自动创建哈希索引
  • 通过一些机制和功能支持真正的热备份
  • 支持崩溃后的安全回复
  • 支持行级锁
  • 支持外键

MyISAM表引擎

  • 拥有全文索引、压缩、空间函数
  • 不支持事务和行级锁,不支持崩溃后的安全回复
  • 表存储在两个文件 MYD和MYI
  • 设计简单,某些场景下性能很好

其他表引擎
Archive、Blackhole、CSV

Mysql锁机制

基础概念:
表锁是日常开发中年常见的问题,因此是面试中最常见的考察点,当多个查询同一时刻进行数据修改时,就会产生并发控制问题

分为共享锁和排他锁

读锁

共享的,不堵塞,多个用户可以同时读取一个资源,互不干扰

写锁

排他的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户进行的操作

锁粒度

表锁,系统性能开销最小,会锁定整张表,MyISAM

行锁,最大程度的支持并发处理,但是也带来了最大的锁开销InnoDB

事务处理

服务器层不管事务管理,由下层的引擎实现,所以一个事务中,使用多种存储引擎不靠谱

在非事务的表上执行事务操作Mysql不会提醒不会报错

存储过程

为以后的使用而保存的一条或者多条mysql语句的集合

存储过程就是有业务逻辑和流程的集合

可以在存储过程中创建表,更新数据、删除等等

使用场景::

通过把处理封装在容易使用的单元中,简化复杂的操作

保证数据的一致性

简化对变动的管理

Read more »

PHP如何解决网站大流量与高并发的问题(四)

Posted on 2017-10-04 | In Interview Prepare | | Visitors:

动态语言的并发处理

相关概念

  • 什么是进程、线程、协程
  • 什么是多进程、多线程
  • 同步阻塞模型
  • 异步非阻塞模型
  • php并发编程实践

什么是进程、线程、协程

进程

进程是一个执行中的程序

进程的三态模型:多道程序系统中,进程在处理器上交替运行,状态不断的发生变化

运行、就绪、阻塞

运行:当一个进程在处理机上运行时,则称该进程处于运行状态

就绪:当一个进程获得了除处理机以为的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态

阻塞:也成等待或睡眠状态,一个进程正在等待某一时间发生而暂停停止运行,这时即使把处理机分配给进程也无法运行

Read more »

PHP如何解决网站大流量与高并发的问题(三)

Posted on 2017-10-03 | In Interview Prepare | | Visitors:

七层负载均衡的实现

基于URL等应用层信息的负载均衡

Nginx的proxy是一个很强大的功能,实现了7层负载均衡

功能强大、性能卓越,运行稳定

配置简单灵活

能自动提出工作不正常的后端服务器

上传文件使用异步模式

支持多种分配策略,可以分配权重

Nginx负载均衡有内置策略,扩展策略两种方式

内置策略

  • IP Hash

    流程和轮询很相似,是一种变相的轮询算法

  • 加权轮询

    首先将请求分给高权重的机器,知道该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器

当所有后端机器都down掉时,Nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处在timeout的状态

Read more »

PHP如何解决网站大流量与高并发的问题(二)

Posted on 2017-10-02 | In Interview Prepare | | Visitors:

数据库缓存

相关概念

  • 什么是数据库缓存?
  • 为什么使用缓存
  • 使用MySQL查询缓存
  • 使用Memcache缓存
  • 使用Redis缓存

什么是数据库缓存

Mysql等一些常见的关系型数据库的数据都存储在磁盘中,在高并发场景下,业务应用对mysql产生的增删改查的操作造成巨大的I/O开销和查询压力,这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据的概念应运而生

数据库缓存极大的解决数据库服务器的压力

提高应用数据的响应速度

常见的缓存形式:内存缓存、文件缓存,为了避免I/O开销,推荐使用内存缓存

为什么使用缓存

缓存数据时为了让客户端很少甚至不访问数据库服务器进行数据的查询,高并发下,能最大程度的降低对数据库服务器的访问压力

用户请求–>数据查询–>连接数据库服务器并查询数据–>将数据缓存起来(HTML,内存,JSON,序列化数据)–>显示给客户端

用户再次请求或者新用户访问–>数据查询–>直接从缓存中获取数据–>显示给客户端

缓存方式的选择

缓存场景的选择

缓存数据的实时性

缓存数据的稳定性

Read more »
1…345
Demor

Demor

43 posts
11 categories
25 tags
© 2016 — 2019 Demor
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4