自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

samson

A good programmer is someone who always looks both ways before crossing a one-way street.

  • 博客(126)
  • 资源 (6)
  • 收藏
  • 关注

原创 knative

一.简略介绍二.文字介绍1.Serverless1.1 Serverless介绍:字面理解即无服务架构,指由第三方云计算供应商以服务的方式为开发者提供所需功能,例如数据库、消息,以及身份验证等。它的核心思想是让开发者专注构建和运行应用,而无需管理服务器。1.2 Serverless优点:Serverless 最大的优点就是自动扩展伸缩、无需自己管理。 在以往部署一个应用时,需要经历购买服务器、安装操作系统、购买域名等等一系列步骤,应用才能真正的上线。后来.

2022-02-23 18:03:18 746

原创 k8s-kubectl配置及使用

一.kubectl 安装kubectl是用于针对Kubernetes集群运行命令的命令行接口。你可以通过kubectl部署集群应用,检查和管理集群资源,查看日志等。1.安装brew install kubernetes-cli2.增加可执行权限chmod+x./kubectlsudo mv./kubectl/usr/local/bin/kubectl3.验证kubectl version二.kubectl配置1.配置文件2.配置生效...

2021-09-01 10:18:50 2003

原创 k8s-helm配置及使用

一.helm介绍应用程序封装 版本管理依赖检查 便于应用程序分发二.helm安装1.安装Homebrewruby -e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2.安装helmbrew install kubernetes-helm3. 查看版本helm version三.helm命令helm create:在本地创建新的 chart

2021-09-01 10:14:35 464

原创 k8s-基本概念

一.术语1.node(结点)Node 是机器。它们是 Kubernetes 用于部署 Pod 的“裸机”(或虚拟机)。Node 为 Kubernetes 提供可用的集群资源用于以保持数据、运行作业、维护工作负载、创建网络路由等。2.podPod 是 Kubernetes 中最小的可互动单元。一个 Pod 可以由多个容器组成,这些容器共同部署在单个节点上形成一个单元。一个 Pod 具有一个 IP,该 IP 在其容器之间共享。在微服务世界中,一个 Pod 可以是执行后台工作或服务请求的微服务的单

2021-09-01 10:12:34 548

原创 故障演练平台

1.为什么需要故障演练平台,能带来什么价值? 一个好的系统并不是说不会出现故障,而是在故障发生之后能够重试、限流或者熔断等操作,这对系统的弹性及健壮性有很大的要求。如果能够将策略再次前置,通过主动制造故障,测试系统在各种极端场景下的反应,就可以提前识别或修复故障。 2.什么是故障演练? 目标是沉淀通用的故障模式,以可控成本在线上重放,以持续性的演练和回归方式运营来暴露问题,不断推动系统、工具、流程、人员能力的不断前进。 3.故障演练平台与可观测平台3.1平台间联系 我理解的混.

2021-09-01 10:07:22 598

原创 可观测平台-日志系统

二.思考与学习(可观测平台->日志系统)2.1日志的基本要素日志处理是一个很大范畴,其中包括实时计算、数据仓库、离线计算等众多点。在实时计算场景中,如何能做到日志处理保序、不丢失、不重复,并且在上下游业务系统不可靠(存在故障)、业务流量剧烈波动情况下,如何保持这三点。 保序(Ordering):通过一致性Hash来处理,使得不同的机器或者不同的服务能够映射到固定的处理队列中。这样一直是同一个处理队列来处理同一个机器或者同一个服务发来的日志。 不丢失(At-Least...

2021-07-30 10:34:15 325

原创 Pilot源码解析

Pilot路由配置下发Pilot本地配置监听

2021-03-17 11:42:49 281

原创 全链路监控

全链路监控方案调研/实现过程一.全链路监控的背景随着微服务的普及,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。 2. 内存选型,首先排除内存,内存的存储量小且珍贵;NoSQL数据库储在内存中的直接不考虑,Pik...

2021-03-17 11:22:01 2737

原创 Golang-排序

1.冒泡排序步骤1: 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 步骤2: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 步骤3: 针对所有的元素重复以上的步骤,除了最后一个; 步骤4: 重复步骤1~3,直到排序完成。func BubbleSort(array *[]int) { if array == nil {...

2020-02-20 13:53:05 266

原创 Golang-算法

1.在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:数组排序后找到重复数字,排序数组时间复杂度O(nlogmn)。 遍历数组建立哈希表,key存数组中的值,value存数组中值出现的次数。 遍历数组,当遍历到下标为i的数字(m)时,比较下...

2020-02-04 16:34:29 878

原创 Rpcx实现

一.代码介绍1.1 server结构// Server is rpcx server that use TCP or UDP.type Server struct { ln net.Listener //监听 readTimeout time.Duration //读取client数据的超时时间 writeTimeout ...

2020-01-10 18:12:14 2451

原创 Golang-队列

一.使用链表实现队列package Algorithmimport ( "container/list" "errors" "fmt" "sync")type Queue struct { list *list.List mutex sync.Mutex}func GetQueue() *Queue { return &Queue{ list:list...

2020-01-08 18:47:01 2878

原创 Golang-链表

一.链表的实现1.1 代码package Algorithmimport ( _ "container/list" "errors" "fmt")type Node struct { data interface{} pre *Node next *Node}type List struct { head *Node tail *Node len...

2020-01-07 18:36:48 615

原创 Golang设计模式-适配器模式

一.介绍意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一...

2020-01-07 11:44:00 731

原创 Golang逃逸与GC

一.Golang内存管理我们先来对比下C与Golang的内存分配: Golang内存分配特点:预先从操作系统申请一大块内存。 内存分配算法采用Google的 TCMalloc算法,预先将申请的内存分成不同大小的内存集合,给不同场景的内存使用。 回收内存会放入内存池,并不会直接分配给操作系统。介绍TCMalloc的几个重要概念Page:操作系统对内存管理以页...

2020-01-06 19:25:10 595

原创 Golang设计模式-代理模式

一.介绍意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。何时使用:想在访问一个类时做一些控制。如何解决...

2020-01-06 16:35:31 666

原创 Pika的设计与实现

一.介绍pika 的单线程的性能肯定不如redis, pika是多线程的结构, 因此在线程数比较多的情况下, 某些数据结构的性能可以优于redis pika 肯定不是完全优于redis 的方案, 只是在某些场景下面更适合. 所以目前公司内部redis, pika 是共同存在的方案, DBA会根据业务的场景挑选合适的方案1.1 redis大容量问题:恢复时间长:我们线上的redis 一般...

2020-01-03 17:50:31 2581

原创 Golang设计模式-观察者模式

一.观察者模式介绍意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。如何解决:使用面向对象技术,可以将这种依赖关系弱化。观察者...

2020-01-02 19:16:07 390

转载 为什么 Redis 快照使用子进程

虽然我们经常将 Redis 看做一个纯内存的键值存储系统,但是我们也会用到它的持久化功能,RDB 和 AOF 就是 Redis 为我们提供的两种持久化工具,其中 RDB 就是 Redis 的数据快照,我们在这篇文章想要分析 Redis 为什么在对数据进行快照持久化时会需要使用子进程,而不是将内存中的数据结构直接导出到磁盘上进行存储。概述 在具体分析今天的问题之前,我们...

2019-12-24 11:43:56 500

原创 Matlab快速入门

一. 方程求根1.1 方程求根的主要方法1.2 MATLAB主要命令介绍二. 线性方程组求解三.插值和拟合...

2019-12-20 19:48:29 135

原创 LRU及其在InnoDB、Redis中的使用

一.页面置换算法 地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。1.1 最佳置换法(OPT)- 理想置换法 从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最...

2019-12-17 10:36:35 294

原创 Golang设计模式-单例模式

一.介绍意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。二.代码2.1 懒汉模式type singleton struct{}var ins *singleton...

2019-12-16 14:55:05 298

原创 Golang设计模式-工厂模式

一.介绍定义一个用于创建对象的接口,让子类界定实例化哪个类。工厂方法使一个类的实例化延迟到子类。二.工厂模式和简单工厂模式的区别 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户的选择动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。如果是翻译,让客户端不管用哪个类的实例,只需把翻译类型(int 1,2,3)给工厂,工厂自动给出了相应的实例,客户...

2019-12-12 18:05:57 2115

原创 Golang设计模式-简单工厂模式

一.背景 假设我们在做一款小型翻译软件,软件可以将德语、英语、日语都翻译成目标中文,并显示在前端。二.使用接口 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分别是German Translater、English Translater、Japanese Translater,他们都共同实现了一个接口Translator。//翻译接口ty...

2019-12-12 16:54:02 218

转载 微服务-部署策略

一.动机 部署单体应用意味着运行一个或多个来自单个较大应用的相同副本。你通常会配置 N 个服务器(物理或虚拟),每台服务器上会运行 M 个应用实例。单体应用的部署并不总是那么简单,但它比部署微服务应用要简单得多。 微服务应用由数十甚至上百个服务组成。服务使用不同的语言和框架编写。每个服务都是一个迷你应用,有自己特定的部署、资源、扩展和监视要求。例如,你需要根据服务的需求...

2019-12-12 16:09:20 1941

转载 系统高可用方案

一.系统设计相关1.扩展 扩展是最常见的提升系统可靠性的方法,系统的扩展可以避免单点故障,即一个节点出现了问题造成整个系统无法正常工作。换一个角度讲,一个容易扩展的系统,能够通过扩展来成倍的提升系统能力,轻松应对系统访问量的提升。一般地,扩展可以分为垂直扩展和水平扩展:1.垂直扩展:是在同一逻辑单元里添加资源从而满足系统处理能力上升的需求。比如,当机器内存不够时,我们可以帮...

2019-12-11 16:42:03 946

翻译 微服务-降级、熔断

一.降级 当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。1.1 使用场景 服务降级主要用于什么场景呢?当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,我们可以将一些不重要或不紧急的...

2019-12-10 16:01:48 1014

原创 微服务-限流

一.介绍 互联网应用发展到今天,从单体应用架构到SOA以及今天的微服务,随着微服务化的不断升级进化,服务和服务之间的稳定性变得越来越重要,分布式系统之所以复杂,主要原因是分布式系统需要考虑到网络的延时和不可靠,微服务很重要的一个特质就是需要保证服务幂等,保证幂等性很重要的前提需要分布式锁控制并发,同时缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 限流的目的...

2019-12-09 20:00:31 593

转载 分布式锁的几种实现方式

一 介绍 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数...

2019-12-09 15:40:50 127

原创 MySQL三大范式和五大约束

一 数据库设计三大范式1.1第一范式(1NF) 原子性、 数据不可再分。原地址表 ID StuAddress 1 天津 10080 2 上海 10082 3 杭州 10083 4 深圳 10084 ... ... 调整之后的表 ID StuAddresss StuCall ...

2019-12-05 19:52:02 807

原创 Epoll原理剖析

从事服务端开发,少不了要接触网络编程。epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,nginx、Redis、Skynet 和大部分游戏服务器都使用到这一多路复用技术。 epoll 很重要,但是 epoll 与 select 的区别是什么呢?epoll 高效的原因是什么? 网上虽然也有不少讲解 epoll 的文章,但要么是过于浅显,或者陷入源码解析,很少能有通俗易懂的。笔...

2019-12-05 17:16:17 243

翻译 HTTP、HTTP2.0 详解

一 HTTP详解介绍1.1 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。1.2 HTTP工作原理HTTP协议工作于客户...

2019-12-05 15:28:00 6133

原创 Golang中Mutex的实现

一.Golang中的锁 Golang的提供的同步机制有sync模块下的Mutex、WaitGroup以及语言自身提供的chan等。 这些同步的方法都是以runtime中实现的底层同步机制(cas、atomic、spinlock、sem)为基础的。1 cas(Compare And Swap)和原子运算是其他同步机制的基础原子操作:指那些不能够被打断的操作被称为原子操作,当有...

2019-11-13 19:17:04 2219

原创 Kafka实现原理

一.kafka定义 Kafka是一款分布式消息发布和订阅系统,它的特点是高性能、高吞吐量。最早设计的目的是作为LinkedIn的活动流和运营数据的处理管道。这些数据主要是用来对用户做用户画像分析以及服务器性能数据的一些监控。所以kafka一开始设计的目标就是作为一个分布式、高吞吐量的消息系统,所以适合运用在大数据传输场景。kafka的简单定义:分布式的基于发布订阅的消息系统,它的特...

2019-11-13 11:51:29 3229 3

原创 MySQL索引实现

一.索引的类型1.1 B-Tree索引 B-Tree实际上是一个术语,NDB使用了T-Tree存储索引,InnoDB使用B+Tree。B-Tree通常意味着所有的值是按顺序存储的,B-Tree索引能加快数据的访问速度,是因为存储引擎不再需要全表扫描来获取数据,而是从根节点向叶子结点搜索,通过匹配当前结点的值和要查找的值来确定是否继续向下查找。1.2 哈希索引...

2019-11-07 18:31:26 201 1

原创 网卡与中断

一.中断1.1 中断概念 指CPU在运行期间,由于外部或由预先安排的事件引起的CPU暂时停止正在运行中的程序,然后进入内部或外部的预先安排的事件服务的程序中去,服务完毕后再返回继续运行被暂时中断的程序。1.2 中断上下部 在一个特定中断的时候,内核会执行一个函数,该函数叫中断服务例程。要是既想中断服务例程运行的快,又想中断例程完成的任务多,我们把中断处理成...

2019-10-29 17:59:46 3478

原创 Golang-slice实现

一.slice实现1.1 slice结构体type slice struct { array unsafe.Pointer len int cap int}array:指向所引用的数组指针(unsafe.Pointer可以表示任何可寻址的值的指针) len:长度,当前引用切片的元素个数 cap:容量,当前引用切片的容量(底层数组的元素总数)在实际使用中,cap...

2019-10-23 19:52:43 151

原创 用例建模-在线购物(四)

一.问题描述 基于Web的“在线购物系统”中,客户可向供应商请求购买一件或多件商品。客户提供个人信息,例如地址和信用卡信息。这些信息被存储在客户账户中。如果信用卡是有效的,那么系统创建一个配送订单并且发给供应商。供应商检查可用的库存,确认订单,并且输入一个计划号的配送日期。当订单完成配送后,系统通知客户并且向客户的信用卡账户收费。二.用例建模2.1 浏览目录用例...

2019-10-22 17:25:30 5890

原创 用例建模-银行系统(三)

一.背景二.用例分析用户“取款“、”查询账户“、”“转账都使用了统一用例-验证PIN码。三.实体四.确定类4.1 确定ATM客户端类4.2 确定ATM服务端类五.动态建模 在以往的开发中会遇到很多问题,在相关的技术文档中明确用例图实体之后就急着画类图以及调用关系,但其实在实际中类和类之间的关系是靠类的实例化对象来实现的。所...

2019-10-21 16:34:44 4913

原创 用例建模-SOA(二)

一.简介 面向服务的体系系统设计是由多个自治的服务组成的分布式软件体系体统。由于这些服务是分布式的,因此他们可以在不同的节点上运行并由不同的服务者来提供。面向服务的体系结构使用标准的协议来支持服务之间的通信与信息交换。为了使应用能够发现服务并与服务进行通信,每个服务都有一个服务描述。这些服务描述定义了服务的名字、服务的位置以及服务的数据交换要求。服务意在自包含和松耦合,这就意味...

2019-10-18 17:40:56 252

Linux下的软路由

路由器项目可以获取通信双方的MAC地址,通过修改ICMP包来实现数据的转发,从而实现不同网段的通信。除此之外,还可以通过过滤ARP缓存表来实现防火墙的功能,并可以实时打印网卡信息和ARP缓存表。在程序运行过程中路由器可以Ping开发板或者主机来检查线路。

2017-11-01

MFC截屏工具

选择相应的图形之后触发相应的消息处理函数,消息函数里面调用库函数实现椭圆,画笔,方块的功能。鼠标的按下和抬起的相应函数里面分别获得起始坐标和终点坐标,刷新并绘制图形

2017-11-01

MFC飞机大战

飞机大战游戏必须运用透明贴图、按键处理、定时控制、双缓冲技术 等技术实现战机(玩家)和敌机(计算机)对战功能。

2017-11-01

图片预览器

本文介绍了Linux平台下的Xwindow图形窗口编程工具GTK,并给出了用GTK编程的基本要素和步骤。 【关键词】GTK,回调函数,消息处理器,调节器 GTK(GIMP Toolkit)是一个图形用户编程的接口工具。它注册完全免费,所以用来开发自由软件或商业软件都不需要花费什么。现在很多Linux集成系统都已经将GTK1.2版本打包进去了。包括RedHat Linux 6.0以上版本,还有中文化的Turbo Linux等等。它也越来越被普遍的应用于UNIX系统编程。 还有一个组件叫Glib,它包含了一些标准应用的新扩展用来提高GTK的兼容性。用于Linux系统的某些函数可能不适合标准的UNIX系统,例如g_strerror()函数等等。某些函数也扩展了GNUC的一般功能,例如g_malloc函数就有自己加强的调试功能。 GTK可以与多种语言绑定,包括C++, Guile, Perl, Python, Ton, Ada95, Objective C, Free Pascal, Eiffel。用标准C开发的程序,编译软件可用GNU并附带上GTK选项即可。想用除了标准C以外的其它语言来开发Xwindow图形用户程序,则需要先参考一下有关绑定软件的内容(http:// www.gtk.org )。 如果用C++语言来调用GTK进行开发,可以用已经和C++绑定的软件叫GTK--软件,来提供一个比GTK更好的C++编译环境。 目前已经开发出来GTK的增强版GTK+。GTK+是将GTK,GDK,GLIB集成在一起的开发包,可以工作在许多类似于UNIX的系统上,没有GTK的平台限制。 1.GTK的消息处理机制 下面我们先看一个基本的例子,该例子产生一个200×200像素的窗口。它不能自己退出,只能通过shell来杀死进程(调用kill命令)。 /*例子 base.c */ #include <gtk/gtk.h> int main( int argc,char *argv[ ] ){ GtkWidget *window; gtk_init (&argc;, &argv;); /* 初始化显示环境 */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* 创建一个新的窗口*/ gtk_widget_show (window); /*显示窗口*/ gtk_main (); /*进入睡眠状态,等待事件激活*/ return(0); } 从上面的程序可以看出,GTK是一个事件驱动工具包,当它运行到gtk_main()函数时会自动睡眠,直到有事件发生,控制权转让给相应的函数调用,在该函数中可以用标准C写出相应的事物逻辑。这与windows 上的程序处理是一样的。 对窗口对象上发生的事件(如按下鼠标,激活键盘等),GTK也有相应的消息信号产生。这时就需要程序员创建一个信号处理器来捕获该信号,并告诉GTK程序事件发生后调用哪个回调函数。信号处理器的创建函数定义如下: gint gtk_signal_connect( GtkObject *object, gchar *name,GtkSignalFunc callback_func, gpointer func_data ); 返回值是一个区分同一对象中的事件与不同回调函数的关联标签。这样可以做到一个对象的一个信号就有任意多个回调函数,并且每一个都会按照声明的顺序执行。函数调用的第一个参数是产生信号的widget组件(即按钮等窗口构件),而name则是希望捕获的信号或事件的名称,callback_func则是事件发生后所调用的回调函数名称,而第四个参数func_data则是传递给回调函数的参数。 回调函数要定义在主程序的前面,它们的一般格式都如下所示: void callback_func( GtkWidget *widget, gpointer func_data ); 调用下面这个方法将允许你将回调函数与事件的关联断开: void gtk_signal_disconnect( GtkObject *object, gint id ); 该函数的第二个参数就是上述gtk_signal_connect()函数的返回值,即关联标签。第一个参数指向了去除关联的对象名称。这样可以做到断开事件与回调函数的关联,使得事件发生后,不会调用相关的回调函数。 布局格式 2.1打包盒子 对GTK显示格式的控制是通常通过打包盒子来完成的。widget组件打包可以采用两种方式,水平盒子和垂直盒子。若将widget组件打包进平行盒子,组件就被依次水平的插入窗口;若是垂直盒子,则组件排列是垂直的。产生新的水平盒子的函数为 GtkWidget *gtk_hbox_new (gint homogeneous, gint spacing); 参数homogeneous是用来控制是否盒子中的每个组件都有同样的大小(例如水平盒子中的控件有同样的宽度,垂直盒子中的控件有同样的高度)。Spacing参数是组件之间的间隔。 垂直盒子的创建函数是gtk_vbox_new(),定义与水平盒子一致。 gtk_box_pack_start()和gtk_box_pack_end()函数是用来将打包对象放入这些盒子中的。 void gtk_box_pack_start( GtkBox *box, GtkWidget *child,gint expand, gint fill, gint padding ); 第一个参数是你将组件打进去的盒子指针,第二个参数是你将要打进去的组件指针。Expand参数是用来控制是否允许组件扩展至分配给盒子空间的大小(选TRUE),还是盒子的大小收缩到组件那么大(选FALSE)。函数中的fill参数是用来控制是否将多余的空间分配给组件,即将组件扩展到盒子的大小(选TRUE),或者多余的空间不变,保留作为盒子和打包组件间的间隔。该参数只有在expand参数取TRUE时才有效。Padding参数是指组件四周与盒子的间隔大小。 注意fill取FALSE值,expand取TRUE值时与expand取FALSE值,fill值无效的区别。前者的盒子仍是原来创建盒子时指定的大小,而后者的盒子已经缩小到打包组件的大小了。 gtk_box_pack_end()函数的参数与上面描述的一致。只是排列顺序分别是从下到上 ,从右到左。 最后将所有的盒子或组件打包到一个大盒子中,用gtk_container_add()函数将盒子加入窗口即可。

2017-11-01

DLNA音视频推送

项目目的:实现安卓手机端和电脑端之间的多屏互动。 项目描述:此项目通过无线网络把手机和电脑连接起来后,可以将手机中的媒体内容投放到电脑屏幕里。并且可以通过手机端的网易云音乐软件控制电脑端歌曲的播放,也可以通过BubbleUpnp软件控制电脑端MP4格式的视频播放。

2017-11-01

校招面试中常见问题-软件开发

1、调查分析,确定目标学校。如,各校专业设置、学生特点等。 校园招聘 校园招聘 2、前期宣传(根据实际选择)如,参与、赞助学校活动等。 3、临近招聘的准备。 (a)确定具体学校。 (b)准备宣传材料(宣传海报、音像材料、宣传设备等) (c)确定具体招聘载体。 (d)成立招聘小组并明确分工。 4、进入学校或其它招聘地点。 5、接受报名和简历。 6、组织实施招聘考试(如果多个院校统一招聘考试、最好请专业考试服务机构实施) 7、根据考试成绩进行筛选,实施面试。 8、根据面试结果进行录用,签协议。

2017-10-31

空空如也

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

TA关注的人

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