在判定机器采用大端还是小端存储时,可以按字节输出某数据对象的机器表示的位模式。机器表示的位模式即某数据对象在内存中的二进制串。下面是一个访问数据对象位模式的方法:
//传入一个数据对象,从低地址到高地址按字节输出这个对象的每字节的十六进制表示 void printByte(unsigned char* a,int n) { for( int i=0; i<n; i++ ) { printf("%x ",a[i]); } printf("\n"); }
上面的printByte函数的功能是:以参数*a传入一个数据对象的地址,以及你想打印的以这个地址为起始地址的连续的字节数量n,printByte打印出这连续的n个字节内存的位模式的十六进制表示。我们使用了一个unsigned char* 类型的指针变量,它以一字节大小解读所指向的数据,并以"%x"格式输出这个一字节大小的数据。
我们定义一个int变量并打印它的位模式:
int x = 128; printByte((unsigned char*)&x,sizeof(int))
可以看到输出为:
上面的输出也表示,这里实验的机器使用小端存储,即数据对象的低位部分存储在低地址部分。
在printByte函数中,需要注意:char* 型的指针指向的同样是一字节大小的数据,但此处一定要用unsigned char* 类型,而不能用char* 类型。因为"%x"是以十六进制形式输出int型的变量,所以,如果printByte的参数设置为char* 类型,在使用%x输出时,会将char类型隐式转换为int类型。此时,在上面的例子中,x值为128,其低8位的位模式为:1000 0000,即0x80,对于char型变量,其真值为-128。转换成int型变量后,位模式为:1111 1111 1111 1111 1111 1111 1000 0000 (补码编码),即0xffffff80:
void printByte(char* a,int n) { for( int i=0; i<n; i++ ) { printf("%x ",a[i]); } printf("\n"); } int main() { int x = 128; printByte((char*)&x,sizeof(int)); return 0; }
输出结果为:
所以,在这个方法打印内存的位模式时,参数指针一定是unsigned char* 类型,而不能是char*类型。
大家好,又见面了,我是全栈君第一步:#import"AppDelegate.h"复制步骤二:在须要跳转的地方:AppDelegate*appDelegate=(AppDelegate*)[[UIApplicationsharedApplication]delegate]; UITabBarController*tabViewController=(UITabBarController*)appDelegate.window.rootViewController; [tabViewControllersetSelectedIndex:2];复制參考:http://stackoverflow.com/questions/10307350/any-code-example-of-how-access-viewcontroller-from-uitabbarcontroller发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117752.html原文链接:https://javaforall.cn
参考链接:JavaArrayBlockingQueueJava线程池队列ArrayBlockingQueue的使用及详细介绍-刘宇 一、什么是ArrayBlockingQueue?二、使用场景三、常用的方法1、构造方法2、add方法3、offer方法4、put方法5、take方法6、poll方法7、peek方法8、remove方法9、contains方法10、remainingCapacity方法11、drainTo方法 作者:刘宇CSDN博客地址:https://blog.csdn.net/liuyu973971883有部分资料参考,如有侵权,请联系删除。如有不正确的地方,烦请指正,谢谢。 一、什么是ArrayBlockingQueue? ArrayBlockingQueue是一个阻塞的队列,继承了AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据,所以它是基于数组的阻塞队列。ArrayBlockingQueue是有边界值的,在创建ArrayBlockingQueue时就要确定好该队列的大小,一旦创建,该队列大小
一、什么是nodejsNode.js是一个基于ChromeV8引擎的javascript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型。Node是一个让JavaScript运行在服务端的开发平台,它让javascript成为与PHP、Python等服务端语言平起平坐的脚步语言。由大神大神RyanDahl于2009年开发的。本质上node.js不是库,是一个运行环境或者是一个js语言解释器二、windows下安装2.1下载安装包官网进行nodejs下载,如下图所示,根据windows的版本选择32或64位的安装包下载。官网下载示意图2.2双击安装包安装可以直接一路next下去,图片安装图1进行安装位置的选择,我一般装在D盘中...,最终点击finishnodejs安装图22.3检测nodejs安装当执行完上步安装包安装后,需要进行安装是否成功,win+r打开运行,输入cmd后进入命令行界面。分别输入node-v和npm-v命令进行node的版本号和npm的版本号的查看。版本查询图安装完后的目录如下图所示img目录中的npm随安装程序自动安装,作用:对Node.js依赖的
本文你能学到什么Docker是什么Docker概念关于Docker的概念是确实不太好总结,下面我通过四点向你说明Docker到底是个什么东西。Docker是世界领先的软件容器平台。Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docker最初实现是基于LXC.Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上,构建杰出的软件。用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。Docker的基本组成架构看一张Docker架构图左边大框框是我们进行Docker操作的宿主机,其运行了一个Dockerdaemon的核心守护程序,负责构建、运行和分发Docker容器。在宿主机中安装了Docker客户端,其与Dockerdaemon守护进程进行通信,客户端会将
前言go1.5引进了vendor管理工程依赖包,但是vendor的存放路径是在GOPATH底下,另外每个依赖还可以有自己的vendor,通常会弄得很乱,尽管dep管理工具可以将vendor平级化管理,但是相对GOPATH的路径是逃不掉的。另外,各个包的版本管理也显得原始,甚至有的开发将依赖包从github直接download下来自己放到GOPATH底下的vendor。go的依赖包管理一致是开发者诟病的一个痛点。所以在千呼万唤中,go1.11终于引进了gomodule管理工程的包依赖,去除了项目包管理对GOPATH的依赖,明确了依赖包的版本管理。定义一个module是go相关包版本信息的收集单元。记录了精准的必须依赖信息和重新编译依赖。从示例开始gomodule的使用其实十分容易上手,下面我会以一个例子来说明。示例的go环境信息:<!--p.p1{margin:0.0px0.0px0.0px0.0px;font:11.0pxMenlo;color:#000000}span.s1{font-variant-ligatures:no-common-ligatures}-->$go
背景昨天在对公司的微服务配置文件标准化的过程中,发现将原来的properties文件转为yml文件之后,微服务module中标记有@Configuration的配置类都不能正常工作了,究其原因,是由于@PropertySource属性默认只用于标记并告诉springboot加载properties类型的文件,springboot2.0.0.RELEASE版的文档解释如下:24.6.4YAMLShortcomings YAMLfilescannotbeloadedbyusingthe@PropertySourceannotation.So,inthecasethatyouneedtoloadvaluesthatway,youneedtouseapropertiesfile.复制这段话的意思是说:24.6.4YAML缺点 YAML文件不能用@PropertySource注解来标记加载。因此,在需要加载值的场景,你需要使用属性文件。复制解决方法解决这个问题并不难,我们只需要自定义一个yaml文件加载类,并在@PropertySource注解的factory属性中声明就可以。scala版实
机器之心发布作者:XuCai、ZiliangChen等生成式建模指给定一定量数据观察下,学习其潜在的数据分布。经过学习后的生成模型可以合成类似真实的数据样本,从而赋予智能体模仿人类的创造能力。来自中山大学的研究者们从粒子随机演化的角度重新看待基于能量的经典生成式模型——FRAME模型中样本的生成过程,他们利用Jordan-Kinderlehrer-Otto(JKO)离散流代替KL离散流,改进了采样粒子的演变以及参数估计的迭代方式,且不破坏原模型的统计连续性。背景:基于能量的生成模型 提到生成式建模,读者们总是第一时间想到生成对抗网络(generativeadversarialnetwork,GAN)。GAN采用隐式的生成式建模方法[8],其先假定一个较为简单的随机变量的分布如高斯分布,,后使用可学的非线性转换函数(一般为神经网络)将其映射到数据空间X(如下图所示)。图片来源:PrincetonMachineLearningSummerSchool2018GAN对近年的生成模型发展具有重大的贡献。但其使用对抗学习额外引入辅佐判别网络,带来了复杂的优化问题。而且其隐式建模方法最近也在某些研
源/开源中国文/OSC-王练据MITTechnologyReview报道,一位名为“Repairnator”机器人在GitHub上“卧底”数月,查找错误并编写和提交修复补丁,结果有多个补丁成功通过被采纳。现代计算机程序非常复杂,在开发过程中难免会出现错误。查找和修复补丁是一件需要耗费大量资源的事情,虽然研究人员已经开发除了许多流程自动化的机器人,但是它们往往很慢,而且存在编写的代码质量较低的问题。Repairnator是由KTH瑞典皇家理工学院的软件技术教授MartinMonperrus及其朋友构建的机器人,目前已被证实可以发现错误并编写高质量补丁。MartinMonperrus表示:“这是自动修复程序研究中的里程碑,它拥有和人类开发者竞争的潜力。”据悉,该团队将Repairnator伪装成了一个名为LucEsape的GitHub用户,他们给Luc上传头像并填写个人资料,看起来就像是一位渴望在GitHub上做贡献的初级开发者。他们共进行了两轮测试,第一轮是在2017年2月到12月,Repairnator在14188个GitHub项目的修复列表上运行并扫描错误,期间Repairnator
一、下载从官网http://nginx.org/en/download.html下载稳定版(目前最新稳定版是1.6.2)二、解压tarzxfnginx-1.6.2.tar.gz cdnginx-1.6.2三、配置./configure--prefix=/opt/app/nginx/1.6.2--user=cargo注:prefix指定安装目录,user指定运行nginx的用户身份通常第一次并不会顺利成功,如果出现:./configure:error:theHTTPrewritemodulerequiresthePCRElibrary.表示当前机器上没有PCRE包,可以手动安装:sudoyum-yinstallpcre-devel再次运行./configure--prefix=/opt/app/nginx/1.6.2--user=cargo,又有新的错误:./configure:error:theHTTPgzipmodulerequiresthezliblibrary.类似的,手动安装zlib包sudoyum-yinstallzlib-devel继续重复刚才的./configure命名,
本文作者:IMWebmoonye原文出处:IMWeb社区未经同意,禁止转载 切图工具切图插件这里的插件都是ps的插件,比较小巧,易于安装和适用,并且很灵活cutterman是一款运行在photoshop中的插件,能够自动将你需要的图层进行输出,以替代传统的手工"导出web所用格式"以及使用切片工具进行挨个切图的繁琐流程。它支持各种各样的图片尺寸、格式、形态输出,方便你在pc、ios、Android等端上使用。它不需要你记住一堆的语法、规则,纯点击操作,方便、快捷,易于上手点击下载css3ps也是很好用的一个photoshop插件,选中需要的图层,然后点击插件的按钮,自动会生成图层上覆盖的样式。包括渐变、边框、阴影、文本相关、背景、背景色、圆角。再也不用自己写这些值或者一个一个设置调整了。生成的样式会在一个新的网页中打开。(其实我更希望它能够直接生成到剪切板中)其实phtotshopcc版本里面自带了复制css的功能,可以将图层的css样式复制到剪切板中,粘贴即可使用,但用的时候发现会有不少冗余的样式再里面,还需手动清理,还是有点麻烦,感兴趣的同学可以试试 点击下载S
TDR(TimeDomainReflectometry)时域反射技术的原理是,信号在某一传输路径传输,当传输路径中发生阻抗变化时,一部分信号会被反射,另一部分信号会继续沿传输路径传输。TDR是通过测量反射波的电压幅度,从而计算出阻抗的变化;同时,只要测量出反射点到信号输出点的时间值,就可以计算出传输路径中阻抗变化点的位置。 TDR时域反射计向被测电缆发送一个低压脉冲,并且在电缆内阻抗变化的情况下,都会看到反射。TDR时域反射计测量从反射释放到低压脉冲释放之间的时间。通过测量时间并知道脉冲的传播速度,便可以计算到反射的距离,从而得出电缆长度或者故障点距离。还可根据不同的发射波形判断电缆中可能出现的阻抗变化或故障类型的信息。 TDR时域反射计特性阻抗 特性阻抗是射频传输线影响信号电压、电流的幅值和相位变化的固有特性,等于各处的电压与电流的比值,用V/I表示。电缆的特性阻抗是由电缆的电导率、电容以及阻值组合后的综合特性。这些参数是由诸如导体尺寸、导体间的距离以及电缆绝缘材料特性等物理参数决定的。例如同轴线的特
lambada表达式对集合的过滤和相互转换 引言: 假设一个场景: 对一个student的list集合进行操作,我要找出年龄大于20的student,重新组成一个student集合。 没有学习lambada表达式的第一想法肯定是通过for循环,再将符合条件的依次加入新的student集合中。思路很简单。但是通过for循环的方式和lambada相比较,差的不是一星半点。 1、实现引言中的场景 假设要过滤的list为studentlist。里面的年龄属性为age,获取方法是getAge()。名字属性是name,获取方法是getName(); 如下: List<Student>newList=studentlist.stream().filter(v->v.getAge()>20).collect(Collectors.toList()); 复制 像这样,一行代码,我们就可以得到我们想要的结果了。 这个场景同样也是分两部分来完成的。首先通过filter过滤,其次通过Collect.toList()将过滤之后的结果重新组装成一个新的list集合。
phpmailer发送邮件是php开发者首选的一个邮件发送插件了,下面我来介绍怎么集成phpmailer到thinkphp框架了,有需要了解的朋友可参考。 phpmailer发送邮件功能很强大,今天真正的体验一下,简单说一下配置,本人是在thinkphp中是用的. 第一步:下载附件PHPMailer解压到ThinkPHP\Library\Vendor 第二步:在Common文件夹中的公共函数function.php中写一个发送邮件的函数, 这样可以在项目任意位置调用。 /** *邮件发送函数 */ functionsendMail($to,$title,$content){ Vendor('PHPMailer.PHPMailerAutoload'); $mail=newPHPMailer();//实例化 $mail->IsSMTP();//启用SMTP $mail->Host=C('MAIL_HOST');//smtp服务器的名称(这里以QQ邮箱为例) $mail->SMTPAuth=C('MAIL_SMTPAUTH');//启用smtp认证 $ma
我们平常编写好的HttpServlet类后,就可以处理请求了,但是服务器在接收到请求信息以后是如何将这些请求传递到我们编写的Servlet类中的???这个疑问在我心中的已经很久了,现在要来解决它。 我们之前的一篇文章Tomcat中容器是什么以及容器与容器之间的数量关系。简单介绍Tomcat服务器的容器,以及容器与容器之间的关系。现在来讲一下在服务器端口接收到请求后,这些请求是如何在这些容器之间传递的。 一、先建立一个简单的动态WEB工程,然后写一个HttpServlet的实现类。代码如下 @WebServlet("/TestServlet") publicclassTestServletextendsHttpServlet { privatestaticfinallongserialVersionUID=1L; protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException { System.out.println("这个d
以往说到的线程对象都是java平台中非常初级的API,用于处理一些基本的任务,对于一些复杂高级的工作,就需要一些高级的并发对象,尤其是针对于大规模并发应用程序,要充分利用现在的多核多处理器系统的性能。 以下内容包括一些从java5开始java平台具有的一些高并发特性。这些特征多数在包java.util.concurrent中实现,java集合框架中也有新的并发数据结构。 锁对象 同步代码依赖于一种简单的再进入锁,这种锁比较易用,但有很多局限性,java.util.concurrent.locks包支持许多高级的锁用法,在这里集中讲其中最基本的接口Lock。 Lock对象的作用方式很像同步代码使用的隐式锁,相似之处在于一个锁对象一次只能被一个线程拥有,Lock对象也支持wait/notify机制,通过相关的Condition对象实现。 Lock对象相对于隐式锁最大的优势在于其能够收回锁的请求,调用tryLock方法请求锁时,如果锁无立即法获取或者在超时之前(如果指定)无法获取就会收回请求;调用lockInterruptibly请求锁,如果在获得锁之前另一个线程发送中断
生产环境中,经常会有多个项目使用zookeeper,例如多个hbase集群。每个项目搭建一套独立的zookeeper,无论从机器成本,还是运维成本,都是一笔额外的开销。 然而多项目,多集群共用zookeeper又涉及一个权限隔离的问题。zookeeper本身提供了ACL机制,表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示 用户,permissions表示相关权限(如只读,读写,管理等)。zookeeper提供了如下几种机制(scheme): world:它下面只有一个id,叫anyone,world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的 auth:它不需要id,只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation,也支持username/password形式的authentication) digest:它对应的id为username:BASE64(SHA1(pa
packagemain import"fmt" typeStackNodestruct{ Datainterface{}//数据 Next*StackNode//下一个节点 } //创建链栈 funcCreateStack(Data...interface{})*StackNode{ iflen(Data)==0{ returnnil } s:=new(StackNode) //记录下一个节点 varnextNode*StackNode=nil for_,v:=rangeData{//1,2,3,4,5 //创建新节点存储数据 newNode:=new(StackNode) newNode.Data=v s=newNode //如果下一个节点不为空将当前节点的下一个节点设置上一次节点 //ifnextNode!=nil{ s.Next=nextNode //} //下一个节点为当前节点 nextNode=s } returns } //打印链栈 funcPrintStack(s*StackNode){ ifs=
1.实现删除回复邮件2.实现阅读邮件功能:在main.jsp中点击任意邮件的标题,进入到detail.jsp显示邮件详情,包括发件人,主题,内容,时间。同时需要把邮件状态修改为已读。 packagecom.entity; importjava.util.Date; publicclassEmail{ privateIntegerid; privateStringfa; privateStringshou; privateStringtitle; privateDatetime; privateStringzhuang; privateStringnei; publicIntegergetId(){ returnid; } publicvoidsetId(Integerid){ this.id=id; } publicStringgetFa(){ returnfa; } publicvoidsetFa(Stringfa){ this.fa=fa; } publicStringgetShou(){ returnshou; } publicvoidsetShou(Stringshou)