精华内容
下载资源
问答
  • 不同储存期玉米对肉鸡免疫功能的影响,崔小燕,袁建敏,本研究旨在探讨不同储存期玉米对肉鸡免疫器官重量及免疫功能的影响。选取1日龄雌性科宝商品代雏鸡240只,随机分成3组(每组8个重复
  • 储存类型: (指编译器为变量分配内存的方式,决定变量的生存) auto-----自动变量(default): 动态变量。 初始化默认为0。 static----静态变量: 作用域同动态局部变量,生存为整个程...

    生存期:

    全局变量:

    生存期和程序一致;

    作用域为从声明处至程序结束;

    动态局部变量:

    (是指语句块内声明的变量,包括函数形参)

    从声明到代码块的右大括号;

     

    储存类型:

    (指编译器为变量分配内存的方式,决定变量的生存期)

    auto-----自动变量(default):

    动态变量。

    初始化默认为0。

    static----静态变量:

    作用域同动态局部变量,生存期为整个程序运行期间。

    静态变量只初始化一次,变量的值可保存到下次进入函数再继续调用,使函数具有记忆功能。

    初始化默认为0。

    extern---外部变量:

    声明点之前使用时用extern声明。

    register-寄存器变量:

    CPU内部容量有限,但速度极快的变量。

    现代编辑器有能力将auto优化为register,无需用户指定。

    储存方式:

    静态~:存储于RAM中的静态储存区,此区中的变量与程序共存亡

    动态~:存储于RAM中的动态储存区,此区中的变量与所在语句块共存亡

    寄存器~:存储于CPU中的寄存器,同动态储存区

    展开全文
  • 通过标准分析方法,对90天储存期内的生化,微量元素,感官,总存活数(TVC),pH,过氧化物值和水分重建进行了分析。 水分,蛋白质,脂肪,灰分,碳水化合物(包括纤维)和能量含量分别为(6.84%至8.85%),(70....
  • 混合模型ANOVA用于根据聚合物类型和储存期(P <0.05)评估差异。 所有质量参数(酸度,PV,K232和K270),迁移和吸附都会随着油与玻璃和塑料材料接触的储存时间的增加而显着增加,尤其是在储存的第7个月到第9个...
  • 在本研究中,评估了在15℃±1℃的冷藏室中五个储存期对玻璃容器中30、60、90、150和240天的种子生存能力的影响。 每个处理使用四份重复的二十五个种子,并通过回归方程比较数据。 结果表明,无论贮藏时间长短,种子...
  • 内存接口概念 首先来分析下操作GPIO控制器和操作UART控制器两者的区别 如图是S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚) 配置GPIO控制器相应的寄存器,即可让引脚输出...

     

    内存接口概念

    首先来分析下操作GPIO控制器和操作UART控制器两者的区别

    如图是S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚)

    配置GPIO控制器相应的寄存器,即可让引脚输出高低电平;配置UART控制器相应的寄存器,即可让引脚输出波形。前者相对简单,类似门电路,后者相对复杂,属于协议类接口。类似的协议类接口还有iic、iis、spi等。 对于CPU是不管什么接口的,它只写相应的寄存器,由控制器根据寄存器的配置去控制具体的引脚。

    那么CPU是如何访问各个不同的寄存器的呢?

    CPU只管发出一个地址,内存控制器根据该地址选择不同的模块,然后从模块中得到数据或者发送数据到模块中。

     

    前面的GPIO/门电路接口、协议类接口,都不会把地址输出到外部,接下来的内存类接口,会把地址输出到外部,比如Nor Flash、网卡、SDRAM。

    如图,SDRAM、DM9000网卡、Nor Flash都接在JZ2440的数据总线和地址总线上,CPU把数据和地址发送出去,然后内存控制器根据片选信号选择相应的设备接收地址和数据信号,互不干扰。

    片选信号和地址的关系怎么确定?

    这个是由2440芯片特性决定的。

    • 当选择Nor Flash启动时,CPU发出的指令的地址范围处于0x0000000 - 0x08000000,内存控制器就会使nGCS0处于低电平(片选引脚被选中),Nor Flash被选中。
    • 当CPU发出的指令的地址范围处于0x20000000 - 0x28000000,内存控制器就会使nGCS4处于低电平(片选引脚被选中),网卡被选中。
    • 当CPU发出的指令的地址范围处于0x30000000 - 0x38000000,内存控制器就会使nGCS6处于低电平(片选引脚被选中),SDRAM被选中

    内存控制器根据不同的地址地址范围,发出不同的片选引脚,只有被片选引脚选中的芯片才能正常工作,不被选中的芯片就像不存在一样,不工作。

    GPIO/门电路接口、协议类接口、内存类接口都属于CPU的统一编址。对于Nand Flash,在原理图上它的地址线并没有连接到CPU,因此它不参与CPU的统一编址。但它的数据线也接到了数据总线上,为了防止干扰,它也有一个片选信号(CE)。当CPU访问Nand Flash时,Nand Flash控制器才会片选Nand Flash,让其接收数据总线上的数据。

    再来看下Nor Flash的空间,0x00000000 * 0x08000000,为128M,即每一个片选信号可以选择的空间是128M=2^27,也就需要A0、A1……A26,共27根地址线。CPU发出的32位地址线,内存控制器根据地址范围,片选上相应的bank,并将地址转化为27位。

     

    不同位宽设备的连接

    参考2440芯片手册,可以看到内存接口与8-bit ROM连接时,2440的A0与外部芯片的A0相连。

    当与两个8-bit ROM拼接成的一个16-bit ROM连接时,2440的A1与外部芯片的A0相连。

    当与四个8-bit ROM拼接成的一个32-bit ROM连接时,2440的A2与外部芯片的A0相连。

    当与一个16-bit ROM连接时,2440的A1与外部芯片的A0相连。

    可以看出外接芯片的位宽有变化时,地址线的接法也会有变化。那这个变化有什么规律呢?

    假设CUP执行:

    MOV R0, #3  @去地址为3的内存上
    LDRB R1, [R0]  @ 从内存为3的地址上,读出一个字节

    如图有8bitROM、16bitROM、32bitROM。

    8个bit组成一个字节,字节是计算机的最小的存储单位,因此我们读取数据肯定都是8bit的倍数。

    • 对于8bitROM ,8bit是一次读写的最小单位,即0地址是第一个8bit,1地址是第二个8bit;CPU发出的命令是读取地址为3上的数据,即A0和A1都为1,8bitROM的A0和A1收到的也都是1,于是找到了ROM上地址为3的8bit数据,包含了我们需要的数据。
    • 对于16bitROM ,16bit是一次读写的最小单位,即0地址是第一个16bit,里面有两个8bit数据;CPU发出的命令是读取地址为3上的数据,即A0和A1都为1,16bitROM的A0和A1分别收到的是1和0,于是找到了ROM上地址为1的16bit数据,包含了我们需要的数据,最后内存控制器再帮我们挑选出所需的8bit数据。
    • 对于32bitROM ,32bit是一次读写的最小单位,即0地址是第一个32bit,里面有四个8bit数据;CPU发出的命令是读取地址为3上的数据,即A0和A1都为0,32bitROM的A0和A1收到的都是0,于是找到了ROM上地址为0的32bit数据,包含了我们需要的数据,最后内存控制器再帮我们挑选出所需的8bit数据。
    ROM/bitCPU发出地址ROM收到地址ROM返回数据内存控制器挑选出数据给CPU
    8bit(ROM) 000011 000011 编号3的存储单元中的8数据 编号3的存储单元中的8bit数据
    16bit(ROM) 000011 000001 编号1的存储单元中的16数据 根据”A0=1”,挑出低8bit数据
    32bit(ROM) 000011 000000 编号0的存储单元中的32数据 根据“A0A1=11”,挑出最低8bit数据

     

    接到芯片上的引脚用来确定读取芯片上的哪一个单元的数据,把这个单元的数据返回给内存控制器,内存控制器会根据没有连接芯片的引脚,来确定返回哪一个单元的数据给CPU,

    再举一个例子: 假如传递一个32位的数据时

    MOV R0,   #4
    LDR  R1,  [R0]  @去地址4,读取4字节数据

    执行过程如下:

    • 8bitROM: 当CPU发出地址(000100),内存控制器会把000100,000101,000110,000111处的地址转发给ROM,ROM会把得到的地址000100,000101,000110,000111,上的数据返回给内存控制器,内存控制器会把得到的4个8bit的数据组装成一个32位的数据返回给CPU。
    • 16bitROM: 当CPU发出地址(000100),内存控制器会把00010,00011处的地址转发给ROM,ROM会把得到的地址00010,00011,上的数据返回给内存控制器,内存控制器会把得到的2个16bit的数据组装成一个32位的数据返回给CPU。
    • 32bitROM: 当CPU发出地址(000100),内存控制器会把0001处的地址发送给ROM,ROM会把得到的地址0001上的数据返回给内存控制器,内存控制器会把得到的1个32bit数据返回给CPU。

    怎样确定芯片的访问地址: 1. 根据片选信号确定基地址, 2. 根据芯片所接地址线确定范围

    实例: Nor Flash 使用的是片选0(nGCS0),基地址为0,用到A20,A19......A1,A0共21条地址线,所以地址范围为0x00000000 ~ 0x1FFFFF也就是2M的空间大小。

    -Nor FlashNet 
    基地址(base) 0x00000000 0x20000000 0x30000000
    取址范围 0x00000000~0x1FFFFF 0x20000000~0x20000005 比较特殊,后面讲解

     

    时序图分析示例

    这节我们分析一下我们了解时序图,信号之间是怎样一起工作的,以Nor Flash 为例。

    440和Nor Flash 之间有地址线,数据线,还有各种数据线连接。

    以Nor Flash为例,分析下如何设置它的时序。

    如图是S3C2440的Nor Flash控制器的读时序图,里面很多参数都需要根据外接芯片的性能进行设置,有的芯片性能好、响应时间快,就可以把参数时间设置小一点,释放更好的性能。

    如图是Nor Flash芯片的读时序。

    我们需要做的就是设置S3C2440的Nor Flash控制器时序去满足Nor Flash芯片的时序。每个参数的参考范围可以通过AC CHARACTERISTICS得到。

     

    结合Nor Flash芯片的两张图,可以得到如下信息:

    • 发出地址数据(Addresses)后,要等待Taa(要求大于等于70ns)时间,地址数据才有效;
    • 发出片选信号(CE#)后,要等待Tce(要求大于等于70ns)时间,片选信号才有效;
    • 发出读信号(OE#)后要等待Toe(要求大于等于30ns)时间,读信号才有效;

    为了简单我们把地址数据(Addresses),片选信号(CE#),读信号(OE#),同时发出,然后让它们都等待70ns(等待信号有效)。对应S3C2440的Nor Flash控制器的读时序图,需要让地址信号A[24:0]、片选信号nGCS、读信号nOE同时发出,保持Tacc大于等于70ns。

    查阅S3C2240的参考手册,Nor Flash是接在BANKCON0上的,因此只需要设置BANKCON0即可。

     

    可以看到Tacc上电初始值是111,对应14个clocks。系统上电采用12MHz的晶振,HCLK=12MHz,Tacc=(1000/12*14)≈1166ns(对于M来说是1000做分子),这个值很大,几乎可以满足所有Nor Flash的要求。

    启动后,将HCLK设置为100MHz,T=1000/100=10ns,Tacc需要大于等于70ns,因此设置Tacc等于101,8个clocks即可。

    1 #include "s3c2440_soc.h"
    2 
    3 void bank0_tacc_set(int val)
    4 {
    5     BANKCON0 = val << 8;
    6 }
     1 #include "s3c2440_soc.h"
     2 #include "uart.h"
     3 #include "init.h"
     4 
     5 int main(void)
     6 {
     7     unsigned char c;
     8     uart0_init();
     9     puts("enter the tacc val:\n\r");
    10     while(1)
    11         {
    12             c = getchar();
    13             putchar();
    14             if(c >= "0" && c <= "7")
    15                 {
    16                     bank0_tacc_set(c - "0");
    17                     led_teat();
    18                     
    19                 }
    20             else
    21                 {
    22                     puts("error: val should between 0~7\n\r");
    23                     puts("enter the tacc val:\n\r");
    24                 }
    25         }
    26     return 0;
    27 }

    实验效果:

    输入0~4,Tacc小于70ns,无法读取Nor Flash上数据,LED不能闪烁

    输入4~7,Tacc大于70ns,可以读取Nor Flash上数据,LED不断闪烁,且值越小越快(区别不明显)。

    SDRAM的设置

    本节将讲解如何设置SDRAM,在JZ2440上接有64M的SDRAM,如果想要使用SDRAM,需要对内存控制器做一些设置。 在前面第一节讲到,CPU将数据或地址发给内存控制器,内存控制器再去访问外部的SDRAM,因此设置内存控制器就是本节的核心。

    如图是SDRAM存储结构逻辑图:

    DRAM总共有4个块(Banks),可以认为每个块就是一个表格,里面的每个格子表示的是16bit数据

    • 问题1:怎样访问里面的某个格子呢?

    1. 首先发出一个片选信号,选中整个芯片;

    2. 发出Bank地址,选择是哪一个Bank(块,即表格);

    3. 发出行地址;

    4. 最后发出列地址,才能选中是个格子;

    • 问题2:那么多的信号有谁发出呢?

    由内存控制器发出,所以我们需要设置内存控制器,CPU只是简单的执行读写内存的命令,其他的都交给内存控制起来处理。 例如

    LDR R0,=0x30000000
    LDR R1,[R0]

    1. CPU把0x30000000这个地址发给内存控制器,内存控制器根据这个地址,判断属于哪个范围,然后发出相应的片选信号。

    2. 根据类型(比如SDRAM)拆分成三部分:发出Bank地址、发出行地址、发出列地址。

    对于上面的三个,怎样拆分呢?

    行地址线有几条,列地址线有几条,都要设置内存控制器里面相关寄存器。

    3. 读数据

    综上所述:对SDRAM的访问可以分为如下步:

    1. CPU发出的片选信号nSCS6有效,它选中SDRAM芯片。

    2. SDRAM中有4个L-Bank,需要两根地址信号来选中其中之一,根据原理图,可知使用ADDR24,ADDR25作为L-Bank的选择信号。

    3. 对被选中的芯片进行统一的行/列(存储单元)寻址。

    根据SDRAM芯片的列地址线数目设置CPU的相关寄存器后,CPU就会从32位的地址中自动分出L_Bank片选信号,行地址信号,列地址信号,然后先后发出行地址信号,列地址信号。L_Bank选择信号在发出行地址信号的同时发出,并维持到列地址信号结束。

    根据原理图可知:

    行地址、列地址共用地线ADDR2—ADDRI4(BANK6位宽为32,ADDRO/I没有使用),使用nSRAS、nSCAS两个信号来区分它们。

    比如本开发板中,使用两根地址线ADDR24、ADDR25作为L-Bank的选择信号:SDRAM芯片K4s5m632的行地址数为13,列地址数为9,所以当nSRAS信号有时,ADDR2—ADDR14上发出是行地址信号,当nSCAS信号有效时,ADDR2—ADDR10上发出的是列地址信号,由于BANK6以32位的宽度外接DRAM,ADDR0、ADDR1恒为0,不参与译码。

    4. 找到了存储单元后,被选中的芯片就要进行统一的数据传输了。

    开发板中使用两片16位的SDRAM芯片并联组成32位的位宽,与CPU的32根数据线(DATA0—DATA31)相连。 BANK6的起始地址为0x30000000,所以SDRAM的访问地址为0x30000000~低0x33FFFFFF,共64MB。

    2440内存控制器设置:

    内存控制器共有13个寄存器,

    BANK0--BANK5只需要设置BWSCON和BANKCONx(x为0~5)两个寄存器;

    BANK6、BANK7外接SDRAM时,除BWSCON和BANKCONx(x为6、7)外,还要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4个寄存器。

    1. 位宽和等待控制寄存器BWSCON(BUSWIDTH&WAITCONTROLREGISTER)

     

    BWSCON中每4位控制一个BANK,最高4位对应BANK7(没有使用)、接下来4位对应BANK6。

    (1)ST6[27]: 启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0:对于SRAM此位为1。

    (2)WS6[26]:是否使用存储器的WAIT信号,通常设为0。

    (3)DW6[25:24]:使用两位来设置相应BANK的位宽,0b00对应8位,0b01对应16位,0b10对应32位(开发板用的就是32位的),0b11表示保留。

    因此BWSCON寄存器的值为:0x22000000。

    BANK控制寄存器BANKCON6(BANKCONTROLREGISTER)

    在8个BANK中,只有BANK6和BANK7可以外接SRAM或SDRAM

     

    当MT[16:15]设置为00时,此寄存器与BANKC0N0、BANKCON5类似,不再赘述。

    当MT[16:15]设置为11时,此寄存器其他值如下设置。

    (2)Trcd[3:2]:行地址和列地址间隔多长时间,看芯片手册时间间隔是20ns,本来开发板的HCLK是100MHZ,clocks为10ns,所以设置为推荐值0b00(2clocks)。

    (3)SCAN[1:0]:SDRAM的列地址位数,对于本开发板使用的SDRAMK4S561632。列地址位数为9,所以SCAN=0b10如果使用其他型号的SDRAM,需要查看其数据手册。来决定SCAN的取值。0b00表示8位,0b01表示9位,0b10表示10位。

    综上所述,本开发板中BANKCON6设为0x017001。

     刷新控制寄存器REFRESH(REFRESHCONTROLREGISTER)

    (1)REFEN[23]:0=禁止SDRAM的刷新功能,1:开启SDRAM的刷新功能(设置开启SDRAM的刷新功能)。

    (2)TREFMD[22]:SDRAM的刷新模式,0=CBR/AutoRefresh,1=SelfRefresh(一般在系统休眠时使用),我们设置默认值。

    (3)Trp[21:20):根据芯片手册设为0即可。

    (4)Tsrc[19:18]:根据芯片手册设为默认值0b01即可。

    (5)RefreshCounter[10:0]:即R_CNT

    R_CNT可如下汁算(SDRAM时钟频率就是HCLK):

    R_CNT=2^11+1-SDRAM时钟频率(MZ)*SDRAM刷新周期(us)

    SDRAM的刷新周期在SDRAM的数据手册上有标明,在本开发板使用的SDRAM:K4S561632的数据手册上,可看见这么一行“64msrefreshpenod(8KCycle)所以,刷新周期=64ms/8192=7.8125us。

    Refreshcount=2^11+1-100x7.8=1269=0x4F5。

    因此,本开发板中REFRESH设为0x8404F5。

    4. BANKSIZE寄存器REFRESH(BANKSIZEREG ISTER)

    (1)BURST_EN[7]:0=ARM核禁上突发传输,1=ARM核支持突发传输(推荐);

    (2)SCKEEN[5]:0=不使用SCKE信号令SDRAM进入省电模式,1=使用SCKE信号令SDRAM进入省电模式(推荐);

    (3)SCLK-EN[4]:0=时刻发出SCLK信号,1=仅在访问SDRAM期间发出SCLK信号(推荐);

    (4)BK76MAP[2:0]:设置BANK6的大小。本开发板BANK6外接64MB的SDRAM,令[2:0]=b001(64M/64M),表示BANK6/7的容量都是64MB,虽然BANK7没有使用。

    因此,本开发板中BANKSIZE设为0xB1。

    5. SDRAM模式设置寄存器MRSRBx6(SDRAM MODE REGISTER SET REGISTER)

    能修改的只有位CL[6:4],这是SDRAM时序的一个时间参数,表示发出行、列地址后,等多久才返回收到数据, CL可以取值为0b0l0(2 clocks)或0b011(3 clocks)。

    本开发板取最保守的值0b010,所以MRSRB6的值为0x20。

     

     1 void sdram_init(void)
     2 {
     3     BWSCON = 0x22000000;
     4     
     5     BANKCON6 = 0x17001;
     6     BANKCON7 = 0x17001;
     7     
     8     REFRESH = 0x8404f5;
     9     
    10     BANKSIZE = 0xb1;
    11     
    12     MRSRB6 = 0x20;
    13     MRSRB7 = 0x20;
    14 }

    再写一个测试函数,向SDRAM里面连续写1000个数,再读出数据对比是否是设置的数,返回对比结果:

     1 int sdram_init(void)
     2 {
     3     volatile unsigned char *p = (volatile unsigned char *)0x30000000;
     4     int i;
     5 
     6 
     7     for (i = 0; i< 1000; i++)
     8         {
     9             p[i] = 0x55;
    10 
    11         }
    12     for (i = 0; i < 1000; i++)
    13         {
    14             if(p[i] != 0x55)
    15                 {
    16                     return -1;
    17                 }
    18         }
    19     return 0;
    20 }

    在主函数里调用sdram_test()测试函数,如果测试成功,LED闪烁:

     1 int main(void)
     2 {
     3     uart0_init();
     4 
     5     sdram_init();
     6 
     7     if(sdram_test() == 0)
     8         {
     9             led_test();
    10         }
    11     return 0;
    12 }

    实验结果:

    LED按预期闪烁,屏蔽掉sdram_init()后,LED不闪烁。

     

    转载于:https://www.cnblogs.com/yekongdebeijixing/p/10485221.html

    展开全文
  •  当越来越多企业的营运因为必须配合法令规章,而需要更长的数据保存及储存期限时,具备高容量及低成本优点的SATA解决方案,其接受度也随之成长许多。Maxtor MaXLine系列SATA硬盘是专为企业储存市场中对于容量/价格...
  • 本地储存

    2019-10-17 20:06:42
    本地储存 HTML5 新增功能 本地存储 用于本地浏览器存储数据 Storage的数据仅在当前浏览器可用,无法跨浏览器 Storage中的所有值都是字符串类型 如果传入的值不是字符串会被自动调用toString()函数 Storage...

    本地储存

    • HTML5 新增功能 本地存储
    • cookie
    • sessionStorage
    • localStorage
    1. cookie

      • 优点:极高的扩展性和可用性
        • 通过良好的编程,控制保存在cookie中的session对象的大小。
        • 通过加密和安全传输技术(SSL),减少cookie被破解的可能性。
        • 只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
        • 控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。
      • 缺点:
        • Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
        • 安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
        • 有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
        • cookie会每次随http请求一起发送,浪费宽带。
    2. sessionStorage

      • 优点:
        • 可以大量保存浏览器中数据。
        • 不同窗口下的sessionStorage,存储相互独立;互不干扰
      • 缺点
        • 当页面关闭后,sessionStorage 中的数据就会被清空
    3. localStorage

      • 优点:
        • 可以大量保存浏览器中数据。(存储量大)
        • 不会随http请求一起发送
      • 缺点:
        • 不同窗口下数据;
        • 不能独立,相互干扰。
        • 在浏览器的隐私模式下不能读取
    不同点 存储大小 有效时间 数据与服务器交互方式
    Cookie <=4K(小于4k) 在设置cookie过期之前一直有效(无论窗口浏览器是否关闭) 正常情况下,cookies数据会自动传到服务器,服务器也可以写cookie到客户端
    sessionstorage 5M以上 数据在当前浏览器关闭后删除(sessionStorage与存储数据的顶级窗口或浏览器选项卡具有相同的生命周期。) 不会发送数据到服务端
    localstorage 5M以上 持久存储,浏览器关闭后不会丢失除非主动删除(直到Web应用程序删除它或用户要求浏览器删除它) 不会发送数据到服务端
    展开全文
  • 1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念: 答:dvm是dalivk虚拟机。每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实例。而每一个dvm都是在linux的一个进程。...

    1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念:

    答:dvm是dalivk虚拟机。每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实例。而每一个dvm都是在linux的一个进程。所以说可以认为是同一个概念。

    2.android的动画有哪几种?他们的特点和区别是什么?

    答:两种,一种是tween动画,一种是frame动画。tween动画,这种实现方式可以使视图组件移动,放大或缩小以及产生透明度的变化。frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

    3.handler进制的原理:

    答:android提供了handler和looper来满足线程间的通信。Handler先进先出原则。looper用来管理特定线程内对象之间的消息交换(message Exchange).

        1)looper:一个线程可以产生一个looper对象,由它来管理此线程里的message queue(消息队列)

       2)handler:你可以构造一个handler对象来与looper沟通,以便push新消息到messagequeue里;或者接收looper(从messagequeue里取出)所送来的消息。

        3)messagequeue:用来存放线程放入的消息。

        4)线程:UI thread 通常就是main thread,而android启动程序时会为它建立一个message queue.

    4.android view的刷新:

    答:Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。

        1).不使用多线程和双缓冲

       这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用 View的onDraw()方法。

        2).使用多线程和不使用双缓冲

        这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Only the originalthread that created a view hierarchy can touch its views.

        这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMessage(Messagemsg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量,你可以直接调用View对象中的invalidate()方法 )。也就是说:在新线程创建并发送一个Message,然后再主线程中捕获、处理该消息。

        3).使用多线程和双缓冲

        Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。

     

    5.说说mvc模式的原理,它在android中的运用:

    答:android的官方建议应用程序的开发采用mvc模式。何谓mvc?

     

     mvc是model,view,controller的缩写,mvc包含三个部分:

     

      l模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。

      2视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。

      3控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。

     

     android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:

        1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对android了解的比较的多了话,就一定 可以想到在android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通 信,幸运的是,android提供了它们之间非常方便的通信实现。

     2)控制层(controller):android的控制层的重 任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理, 这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

     3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

     

    6.Activity的生命周期:

    答:onCreate: 在这里创建界面,做一些数据 的初始化工作

     

      onStart: 到这一步变成用户可见不可交互的

        onResume:变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)

      onPause: 到这一步是可见但不可交互的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在

      onstop: 变得不可见,被下一个activity覆盖了

    onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉

     

    7.让Activity变成一个窗口:

    答:Activity属性设定:有时候会做个应用程序是漂浮在手机主界面的。这个只需要在设置下Activity的主题theme,即在Manifest.xml定义Activity的地方加一句:

    android :theme="@android:style/Theme.Dialog"
    如果是作半透明的效果:

    android:theme="@android:style/Theme.Translucent"

    8.Android中常用的五种布局:

    答:LinearLayout线性布局;AbsoluteLayout绝对布局;TableLayout表格布局;RelativeLayout相对布局;FrameLayout帧布局;

    9.Android的五种数据存储方式:

    答:sharedPreferences;文件;SQLite;contentProvider;网络

    10.请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系:

    答:Handler获取当前线程中的looper对象,looper用来从存有Message的Message Queue里取出message,再由Handler进行message的分发和处理。

    11.AIDL的全称是什么?如何工作?能处理哪些类型的数据?

    答:AIDL(AndroidInterface Definition Language)android接口描述语言

    12.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由:

    答:通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性。代码如下:
        Intent intent = new Intent();

    Intent.setAction(“android.intent.action.View”);

    Uri uriBrowsers = Uri.parse(“http://www.sina.com.cn”);

    Intent.setData(uriBrowsers);

    //包名、要打开的activity
        intent.setClassName(“com.android.browser”,”com.android.browser.BrowserActivity”);

    startActivity(intent);

    13.什么是ANR,如何避免?

    答:ANR的定义:

    在android上,如果你的应用程序有一段时间响应不移灵敏,系统会向用户提示“应用程序无响应”(ANR:application Not Responding)对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。

    如何避免:

    首先来研究下为什么它会在android的应用程序里发生和如何最佳构建应用程序来避免ANR.
        android应用程序通常是运行在一个单独的线程(例如:main)里,这就意味你的应用程序所做的事情如果在主线程里占用了大长时间的话,就会引发ANR对话框,因为你的应用程序并没有给自己机会来处理输入事件或者Intent广播。

        因此,运行在主线程里的任何访求都尽可能少做事情。特别是,activity应该在它的关键生命周期方法(onCreate()和onResume())里尽可能少的去作创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。然而,不是说你的主线程阻塞在那里等待子线程的完成---也不是调用Thread.wait()或者Thread.sleep()。替代的方法是:主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由5秒输入事件的超时引发的ANR对话框。这种做法应该在其它显示UI的线程里效仿,因为它们都受相同的超时影响。

        IntentReceiver执行时间的特殊限制意味着它应该做:在后台里做小的、琐碎的工作,如保存设定或注册一个Notification。和在主线程里调用的其它方法一样,应用程序应该避免在BroadcastReceiver里做耗时的操作或计算,但也不是在子线程里做这些任务(因为BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个Service。顺便提及一句,你也应该避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广播时需要向用户展示什么,你应该使用Notification Manager来实现。

        一般来说,在应用程序里,100到200ms是用户能感知阻滞的时间阈值,下面总结了一些技巧来避免ANR,并有助于让你的应用程序看起来有响应性。

        如果你的应用程序为响应用户输入正在后台工作的话,可以显示工作的进度(ProgressBar和ProgressDialog对这种情况来说很有用)。特别是游戏,在子线程里做移动的计算。如果你的程序有一个耗时的初始化过程的话,考虑可以显示一个Splash Screen或者快速显示主画面并异步来填充这些信息。在这两种情况下,你都应该显示正在进行的进度,以免用户认为程序被冻结了。

     

    14.什么情况会导致Force Close?如何避免?能否捕获导致其的异常?

    答:如空指针等可以导致ForceClose;可以看Logcat,然后找到对应的程序代码来解决错误。

    15.横竖屏切换时候的activity的生命周期:

    答:

    1) 新建一个activity,并把各个生命周期打印出来

    2) 运行activity,得到如下信息:

    onCreate()à

    onStart()à

    onResume()à

        3)  按ctrl+F12切换成横屏时

            onSaveInstanceState()à

            onPause()à

            onStop()à

            onDestroy()à

            onCreate()à

            onStart()à

            onRestoreInstanceState()à

            onResume()à

        4)  再按ctrl+f12切换成竖屏时,发现打印了两次相同的Log

            onSaveInstanceState()à

            onPause()à

            onStop()à

            onDestroyà

            onCreate()à

            onStart()à

            onRestoreInstanceState()à

            onResume()à

     

            onSaveInstanceState()à

            onPause()à

            onStop()à

            onDestroyà

            onCreate()à

            onStart()à

            onRestoreInstanceState()à

            onResume()à

        5)  修改AndroidManifest.xml,把该Activity添加android:configChanges=“orientation”,执行步骤3

            onSaveInstanceState()à

            onPause()à

            onStop()à

            onDestroy()à

            onCreate()à

            onStart()à

            onRestoreInstanceState()à

            onResume()à

        6)  修改AndroidManifest.xml,把该Activity添加android:configChanges=“orientation”,执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged

            onSaveInstanceState()à

            onPause()à

            onStop()à

            onDestroy()à

            onCreate()à

            onStart()à

            onRestoreInstanceState()à

            onResume()à

            onConfigurationChanged()à

        7)  把步骤5的android:configChanges=“orientation”改成

    android:configChanges=“orientation|keyboradHidden”,执行步骤3,就只打印onConfigChanged

            onConfigurationChanged()à

        8)  把步骤5的android:configChanges=“orientation”改成

    android:configChanges=“orientation|keyboradHidden”,执行步骤4

            onConfigurationChanged()à

            onConfigurationChanged()à

        总结:

    1) 不设置activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。

    2) 设置activity的android:configChanges=“orientation”时, 切屏会重新调用各个生命周期,切横屏、竖屏时都只会执行一次,但是竖屏最后多打印一条onConfigurationChanged()

    3) 设置activity的android:configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged(),横屏一次,竖屏两次

    再总结下整个activity的生命周期:

    1)  当前activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变

    2)  Activity运行时按下HOME键(跟被完全覆盖一样的)

    onSavaInstanceStateà

    onPauseà

    onStopà

     

    onRestartà

    onStartà

    onResumeà

        3)  未被完全覆盖,只是失去焦点:

            onPauseà

            onResumeà

    16.如何将SQLite数据库(.db文件)与apk文件一起发布?

    答:可以将.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将.db文件复制到res aw目录中

    17.如何将打开res aw目录中的数据库文件?

    答:在Android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。

    18.android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别:

    答:XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方 式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存 中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处 理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。

    19.DDMS和TraceView的区别?

    答:DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是程序性能分析器

    20.谈谈Android的IPC机制:

    答:IPC是内部进程通信的简称,是共享"命名管道"的资源。Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理。

    21.NDK是什么:

    答:NDK是一系列工具的集合

        NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库,并能自动将so和java应用打成apk包

        NDK集成了交叉编译器,并提供了相应的mk文件和隔离cpu,平台等的差异,开发人员只需简单的修改mk文件就可以创建出so

    22.描述一下android的系统架构:

    答:android系统架构分从下往上为Linux内核层、运行库、应用程序框架层和应用程序层。

        Linux内核层:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。

    运行库和androidruntion:运行库:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责android网页浏览器的运行;例如标准的c函数库libc、openssl、sqlite等,当然也包括支持游戏开发的2dsgl和3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,如mpeg4、h.264、mp3、aac、amr、jpg和png等众多的多媒体文件格式。Androidruntion负责解释和执行生成的dalvik格式的字节码

    应用软件架构:java应用程序开发人员主要是使用该层封装好的api进行快速开发的。

    应用程序层:该层是java的应用程序层,android内置的googlemaps、email、IM、浏览器等,都处于该层,java开发人员工发的程序也处于该层,而且和内置的应用程序具有平等的地位,可以调用内置的应用程序,也可以替换内置的应用程序

    23.Activity 与 Task的启动模式有哪些,它们含义具体是什么?

    答:在一个activity中,有多次调用startActivity来启动另一个activity,要想只生成一个activity实例,可以设置启动模式。

        一个activity有四种启动模式:standed,signleTop,singleTask,singleInstance

        Standed:标准模式,一调用startActivity()方法就会产生一个新的实例。

        SingleTop:如果已经有一个实例位于activity栈顶,就不产生新的实例,而只是调用activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。

        singleTask:会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。

        SingleInstance:这个和singleTask基本一样,只有一个区别:在这个模式下的activity实例所处的task中,只能有这个activity实例,不能有其他实例

    24.Application类的作用:

    答:API里的第一句是:

    Base class for those who need to maintain global application state 

    如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。 
      首先需要重写Application,主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。 
      启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变

    25.说明onSaveInstanceState() 和 onRestoreInstanceState()在什么时候被调用:

    答:Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState()才会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

    另外,当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法。

    26.android的service的生命周期?哪个方法可以多次被调用:

    答:1)与采用Context.startService()方法启动服务有关的生命周期方法

    onCreate() -> onStart() -> onDestroy()

    onCreate()该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。
    onStart() 只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart() 方法会被多次调用。
    onDestroy()该方法在服务被终止时调用。


    2)与采用Context.bindService()方法启动服务有关的生命周期方法
    onCreate() -> onBind() -> onUnbind() -> onDestroy()

    onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。
    onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。
    如果先采用startService()方法启动服务,然后调用bindService()方法绑定到服务,再调用unbindService()方法解除绑定,最后调用bindService()方法再次绑定到服务,触发的生命周期方法如下:
    onCreate() ->onStart() ->onBind() ->onUnbind()[重载后的方法需返回true] ->onRebind()

    27.android的broadcast的生命周期:

    答:1)Broadcast receiver生命周期中仅有一个回调方法: 
    void onReceive(Context curContext, Intent broadcastMsg) 
    当接收器接收到一条broadcast消息,Android就会调用onReceiver(),并传递给它一个Intent对象,这个对象携带着那条broadcast消息。我们认为仅当执行这个方式时,Broadcast receiver是活动的;这个方法返回时,它就终止了。这就是Broadcast receiver的生命周期。 


    2)由于Broadcast receiver的生命周期很短,一个带有活动的Broadcast receiver的进程是受保护的,以避免被干掉;但是别忘了有一点,Android会在任意时刻干掉那些携带不再活动的组件的进程,所以很可能会造成这个问题。 


    3)解决上述问题的方案采用一个Service来完成这项工作,Android会认为那个进程中(Service所在的进程)仍然有在活动的组件。 

    28.android view,surfaceview,glsurfaceview的区别:

    答:SurfaceView是从View基类中派生出来的显示类,直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及Camera摄像头一般均使用SurfaceView
    SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。 
    那么在UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消息。 
    当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞你的UI主线程。但这也带来了另外一个问题,就是事件同步。比如你触屏了一下,你需要surfaceView中thread处理,一般就需要有一个event queue的设计来保存touch event,这会稍稍复杂一点,因为涉及到线程同步。 

    所以基于以上,根据游戏特点,一般分成两类。 

    1)被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。 

    2)主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。



    展开全文
  • 第十二(2017年6月23日-2017年6月30日 ) 阿里云快照的帮助文档里面有一篇《删除快照和自动快照策略》,其实可以通过这个引导来达到节省费用的目的。 当您不再需要某个快照、或者快照个数超出额度的时候,您需要...
  •  直到现在,依然有很多专家、企业为了完善冷冻冷藏肉类口感、抑制细菌、延长储存时间等,砥志研思。 然而,一些所谓的制冷设备、方案、技术要么是隔靴挠痒,要么是口号式,要么是不成体系…… 冷库冷鲜史上又一...
  • 本地线程储存

    2016-09-01 15:39:17
    【珠海】第52源创会报名开始!>>> »  ThreadLocal类在Spring,Hibernate等框架中起到了很大的作用,对于其工作原理,很多网上的文章分析的不够彻底,甚至有些误解。 首先,为了解释ThreadLocal类的工作...
  • Python爬取学校文章并储存mysql python爬取学校文章并储存mysqlPython爬取学校文章并储存mysql问题简介思路储存注意 问题简介 爬取福⼤要⽂(http://news.fzu.edu.cn/html/fdyw/) 要求: 1.包含发布⽇,作者,...
  •  以"RFID"为基础的无线电子标签包含了极其丰富的产品信息,例如生产日期、保质储存方法以及与其不能共存的商品,这样,可以限度的减少商品耗损。  "智能货架"。贴有电子标签的物件放在配有扫描器的货架上,...
  • 影像监控从高速增长步入稳定发展阶段,影像安全监控的储存市场也随之稳步前行,2015年,整个安控行业的储存市场将朝向大容量、多种储存模式并行的方向发展。 现今对影像监控的需求已经从基本的看得到、看得清再到...
  • 大家好,我是IT修真院西安分院第5的学员许恒倩,一枚正直纯洁善良的web程序员,今天给大家分享一下,修真院官网CSS任务十五,深度思考中的知识点——HTML5的离线储存怎么使用? (1)背景介绍: HTML5提供了很多新...
  • 变量的储存方式

    2013-06-23 16:20:15
    变量存储方式不同会使变量的生存不同,生存表示了变量存在的时间。生存和变量作用域是从时间和空间这两个不同的角度来描述变量的特性。 静态存储变量通常是在变量定义时就分配固定的存储单元并一直保持不变,...
  • 下定决心要写这一篇,是因为坐我斜对角的Amy酱天天嗷嗷叫抱怨手机卡到死,每天都在“鞭策”我赶紧来一。于是我临危受命认认真真地开启了手机内存拯救之路。这次全部以苹果手机为例,安卓机的话思路也是一样的,...
  • C语言中变量的储存类别 C语言中变量的储存类别1.动态存储方式与静态动态存储方式:从变量值存在的作时间(即生存)角度来分,可以分为静态存储方式和动态存储方式。静态存储方式:是指在程序运行期间分配固定的...
  • 本地储存localStorage与cookie的区别

    千次阅读 2017-06-05 13:53:02
    今天来介绍一下 本地储存localStorage与cookie的区别 ① cookie在浏览器与服务器之间来回传递。 sessionStorage和localStorage不会把数据发给服务器,仅在本地保存 ②数据有效不同: cookie只在设置的cookie...
  • 海参的储存方法

    2013-03-04 13:16:31
    干海参保存的方法是放在通风干燥保存即可,达到国家标准的干海参,置通风阴凉处,保质可达2年以上。 发好的海参 发泡好海参,继续泡在0-5度冷水中,每天换一次水,可以保存3天。如果发泡的量较大,可将发好的...
  •  以"RFID"为基础的无线电子标签包含了极其丰富的产品信息,例如生产日期、保质储存方法以及与其不能共存的商品,这样,可以最大限度的减少商品耗损。  "智能货架"。贴有电子标签的物件放在配有扫描器的货架上...
  • 2020-12-13

    2020-12-13 18:01:29
    c对象有四种储存期:静态储存期,线程储存期,自动储存期,动态分配储存期。 1>.静态储存期:在程序执行期间一直存在。文件作用域变量具有静态储存期,对于其而言关键字static表明了其链接属性,而非储存期。以...
  • 关于电子元器件储存期限的调研报告 关于电子元器件储存期限的调研报告 在积压物资处理过程中,我们发现有较多的电子元器件因过期而报废。查阅集团《仓储管理制度》第4.3.4规定:电子元器件保质一年,如库存时间...
  • 变量储存在静态存储区,生存为整个程序。静态局部变量和全局变量都存放在静态存储区中。 2.动态存储方式 只有当变量所在函数被调用时编译系统才临时分配内存单元。生存仅在函数调用期间。 变量 1. 静态局部...
  • 储存与更新 access_token

    2016-12-15 23:37:00
    做微信的项目,一开始就是 access_token 的申请,微信文档上写的比较清楚: 1、为了保密appsecrect,第三方需要一个access_token获取和刷新的中控服务器。...2、目前access_token的有效通过返回的expire_in来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 573
精华内容 229
关键字:

储存期