agent的start方法
这里的agent是外部程序调用的agentController启动,实际的agent启动时是setup;与外界的类是如何通信的myAgent.getO2AObject()
怎么向外系统传递消息?直接在里面修改后外面的也修改了。
但是要注意,seller启动需要 延时,不然的话写不进去dfagent注册的是什么
通信
消息代表行为或者说通信行为CA;最常用的一些行为有通知、请求、统一、不理解和拒绝等。
传递的信息!!!【重点】
通信原语?
ContractNet协议 P69
在对话中扮演一个角色,无论是发起者或响应者的角色,都意味着执行某种任务,因此所有协议类(包括发起者和响应者)都是jade行为类。agent的重点在于行为
5.1 行为的停止
TickerBehaviour行为通过stop停止;
一般的是done函数;kill以后怎么办
代理 应该有个出清代理CA,所有的卖方和买方将价和量(包括初次的和每次迭代后的)发送给CA,CA在收到所有之后,进行出清,然后将结果发送给各自的agent。各自的agent收到后再次迭代。
在达到迭代次数或者结果不再改变时,停止。(需不需要一个控制agent?)–问题在于论文中停止条件是每个各自的还是总体利润???
对于各自代理,代理的行为就是强化学习?Subscribe协议P72
本体到底是个啥吗。。。
现在有一些已经存在的language来描述ontologies,如DAML+OIL和OWL,JADE并不直接支持这些ontologies,而是将ontologies编码为java类(比如protégé可以将本体直接导出为java类)。
本体提供了Agent交互的语义支持,但必须与内容语言结合使用,后者是Agent交互的语法支持。JADE支持的三种内容语言包括:FIPA-SL类似lisp的语言族;Leap-encoding应用于嵌入式开发;JavaCodec,JADE特定的内容语言。
ContentElementList和ACtion有啥区别
agentaction和actionDFAgent中注册的是?
如何注册单个服务消息处理中接收时如何接收的?
在使用cotractNet之后和本体之后,content是怎么放进去的?fillContent中应该就是把内容封装成action,然后send。
计算机网络自顶向下方法
在数据链路层,基础性问题是共享多路访问信道。
端系统(end systems)或主机(host)通过通信链路(communication link)【物理媒体】和分组交换机(packet switch)连接到一起。
传递的数据将数据分段,术语叫做分组(packet)。
分组交换机分为路由器和链路层交换机。
链路层交换机通常用于接入网(access network)中,而路由器通常用于网络核心中。
接入网是指将端系统连接到其边缘路由器(edge router)的物理链路,边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器。IP协议定义了在路由器和端系统之间发送和接收的分组格式。
通信链路,物理媒体传播电磁波或光脉冲来发送比特。
双绞铜线和同轴电缆都是以传播电磁波来传递信息的。
个人理解–网线是通过传播电磁波来传播比特信息的。
现在我们买的网线基本是双绞线的,里面的材料是铜。
同轴电缆,双绞线本质上和电话线的材料是一样的,从这个角度来说,他们传输也是需要调制到某个频段,产生模拟型号,并不是直接传输数字信号的。
其实从本质上说,信号的传递是通过电磁波传递的(光纤是通过光信号),因此,数字信号的传输都需要经过调制和解调。
承载信息的是电磁波。
接收方需要使用一种结构来感应发射方的电磁波,这个结构叫接收天线(广义上的接收天线,实际中不一定是个天线,比如波导中的同轴探头)。接收天线将电磁波转换为方便电路处理的电压或电流,依据的规律是电磁互易性。
无线传输是自由空间的电磁波,有线传输是有导波结构束缚的电磁波,二者没有本质区别。
补充 * :
数字信号是在模拟信号的基础上经过采样、量化和编码而形成的。具体地说,采样就是把输入的模拟信号按.适当的时间间隔得到各个时刻的样本值.量化是把经采样测得的各个时刻的值用二进码制来表示,编码则是把t化生成的二进制数排列在一起形成顺序脉冲序列 。
为什么在一条电话线路上既能打电话,又能传输数字信号?等等,好像有什么不对 *
(模拟信号/数字信号)分别以(模拟信号/数字信号)中传输方式
这篇文章中,提出有四种传输方式,即模拟数据以模拟信号传输、数字数据以模拟信号传输(调制解调)、数字数据以数字信号传输(数字数据可以数字信号传输,但需对信号进行编码以提高数据传输的效率和实现通信双方的信号同步。)、模拟数据以数字信号传输(编码解码器)。
信号的基本传输方式有基带传输、频带传输、载波传输、异步传输模式ATM。(https://zhidao.baidu.com/question/590174212.html)
应用层–网络层–传输层–链路层–物理层
| | | | |
| ———————————————————————
| packet分组
报文 报文段 数据报 帧
message segment datagram frame分组交换机分为路由器和链路层交换机。
链路层交换机实现了第一层和第二层协议;路由器实现了第一层到第三层。
链路层交换机不能识别IP地址,但能够识别第二层地址,如以太网地址。五层协议
下一层为上一层提供服务,并且在节点的对等层次提供对等的服务。
网络设计者以分层的方式组织协议以及实现这些协议的网络 硬件 和 软件 。
一个协议层能够用软件、硬件或两者的结合来实现。诸如http,dns,smtp,ftp等应用层,以及运输层TCP、UDP协议用软件实现;因为物理层和数据链路层负责跨越特定链路的通信,它们总是实现在于给定链路相联系的网络接口卡(例如以太网或Wifi接口卡)中。网络层经常是硬件和软件实现的混合体。
第n层协议的不同部分常常位于这些网络组件的各部分。
时间的朋友2019
宏观是我们必须接受的,微观才是我们有所作为的。
世界上只有一种英雄主义,就是认清了现实,依然面对它。
世界不是大河模型,而是多米诺骨牌模型。
小趋势–影响趋势的趋势,带来改变的改变。
小趋势不会停止。
没有一劳永逸,没有直通车,只有不断准备,不断努力。
等号,等于有些东西不重要?
不抽象,就无法深入思考;不还原,就无法认识世界本来面目。
还原这个世界–多元思维模型
能同时抱有全然相反的两种观念还能正常行事是第一流智慧的标志。
扪心五问:
- 我能看到事实吗?–还原
- 你能感知到非共识吗–创新的本质就是非共识
- 你觉得时间够用吗?–没有看
- 力量从哪来?
–除了人工智能,用人的体验丈量世界。推动信用飞轮,才能快速成长。不是用算法,而是用人的力量。 - 时间愿意和我做朋友吗?
–长期主义。一旦中断,前功尽弃。
长期主义是微弱信号的放大器。
码农翻身杂记
JDBC的介绍一节体现了:面向接口、工厂方法、反射等;
分布式事务:
2.1 两阶段提交(需要一个全局的事务管理器,第一阶段准备,第二阶段提交或放弃);
2.2 Base模型,即降低实时一致性,而考虑最终一致性,将操作写在消息队列中消息队列
应用系统间做异步
生产者-消息队列-消费者
订阅-发布
配置和代码分开Java 动态代理:
声明式编程,在运行期对类进行“修改”–在运行时动态得创建新的类。
jdk代理是对接口进行代理。
在调用方看来,是调用接口,并不会意识到是动态创建的代理类。需要添加的行为需要实现InvocationHandler接口,相当于在运行时进行拦截,从而创建新的类。
Proxy.newProxyInstance,就是动态生成一个类。
应用:Spring AOP注解,也可以说meatdata就是描述数据的数据;元注解,就是注解的注解。
基于注解和XML各有千秋,灵活应用。
需要集中配置的用xml泛型和继承
ArrayList<? extends Fruit>日志系统,现在一般用slf4j(抽象层,其下层可以用各种日志系统)+logback。
logger
appender
formatterComapareandSwap是一条硬件指令,操作系统和硬件能保证院子执行。
Atomatic类
AtomaticReference可能会有什么ABA问题在使用AtomaticXXXX类实现非阻塞算法之前,先看看有没有提供现成的Concurrentxxx类。
Spring 装饰者模式,动态代理
多个资源加锁要牢记,一定要从最大的开始加锁。
虚拟地址,物理地址
中断的方式其实是一种异步的、事件驱动的处理思想
DMA进行IO设备和内存之间的直接数据传输
内存只是一个个可以读写的格子,CPU简单到只能做4件事情–对寄存器读取数据,写入数据,数学运算和逻辑运算,根据条件进行跳转
检测和设置锁的操作是一个不可分割的原子操作
自旋锁虽然能实现互斥的访问,但是不能通信进入同一个函数(递归),简称不可重入。
增加计数器信号量用来解决互斥锁在消费者生产者同步问题的互相等待问题
信号量就是一个整数,基于这个证书有两个操作,wait和signal。
对于生产者-消费者问题,可以直接使用BlockingQueue
19. 尾递归:
当递归调用时函数体重最后执行的语句,并且它的返回值不属于表达式的一部分时,叫做尾递归。不会存在栈溢出的问题。
一些待解决问题
SOA和微服务:
如果一句话来谈SOA和微服务的区别,即微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,同时SOA的思想进入到单个业务系统内部实现真正的组件化。httpserver
HTTP服务器本质上也是一种应用程序——它通常运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,这样客户端(一般来说是IE, Firefox,Chrome这样的浏览器)就能够通过HTTP协议来获取服务器上的网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)等等资源。
不仅仅是Apache HTTP Server和Nginx,绝大多数编程语言所包含的类库中也都实现了简单的HTTP服务器方便开发者使用编译器
单元测试到底如何去做?
ant,maven,gradle
但是ant有一个很致命的缺陷,那就是没办法管理依赖。我们一个工程,要使用很多第三方工具,不同的工具,不同的版本。每次打包都要自己手动去把正确的版本拷到lib下面去,不用说,这个工作既枯燥还特别容易出错。为了解决这个问题,maven闪亮登场。maven最核心的改进就在于提出仓库这个概念。我可以把所有依赖的包,都放到仓库里去,在我的工程管理文件里,标明我需要什么什么包,什么什么版本。在构建的时候,maven就自动帮我把这些包打到我的包里来了。我们再也不用操心着自己去管理几十上百个jar文件了。
maven已经很好了,可以满足绝大多数工程的构建。那为什么我们还需要新的构建工具呢?第一,maven是使用xml进行配置的,语法不简洁。第二,最关键的,maven在约定优于配置这条路上走太远了。就是说,maven不鼓励你自己定义任务,它要求用户在maven的生命周期中使用插件的方式去工作。这有点像设计模式中的模板方法模式。说通俗一点,就是我使用maven的话,想灵活地定义自己的任务是不行的。基于这个原因,gradle做了很多改进。
作者:海纳
链接:https://zhuanlan.zhihu.com/p/24429133
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。计算机领域只要多分几层,没有解决不了的问题
6.1 在应用程序和数据库之间增加一个抽象层–缓存。
6.2 比如对于一门动态语言,直接做一个编译器讲这门语言和汇编链接到一起,难度太大(尤其是词法分析上),这个时候可以采取间接的定义一套中间码,讲源代码编译成为中间码,中间码通过另一个程序(执行引擎,一般是C/C++写的)执行这个中间码,这样效率不会损失太多但大大加快了开发效率。
作者:DreamPiggy
链接:https://www.zhihu.com/question/31695794/answer/53797548
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
6.3 中间件,负责底层操作系统和上层应用程序都不愿意做的事,比如hibernate编译型语言和解释型语言
编译型语言是做好了菜再吃,解释型语言是吃火锅。
一种高级编程语言,从源代码开始,一直到被执行生成相应的动作,大约经历了这几个步骤: 编译 执行
源代码====>(中间表示形式====>)基本操作序列====>生成最终动作
编译型和解释型语言的不同指出只是在于,这些过程发生的时机不一样。编译型语言的代表是C,源代码被编译之后生成中间文件(.o和.obj),然后用连接器和汇编器生成机器码,也就是一系列基本操作的序列,机器码最后被执行生成最终动作。解释型的语言以Ruby为例,也经历了这些步骤,不同的是,C语言会把那些从源代码“变”来的基本操作序列(保存)起来,而Ruby直接将这些生成的基本操作序列(Ruby虚拟机)指令丢给Ruby虚拟机执行然后产生动作了。
所以我们看到的现象是,编译型语言要先编译再运行,而解释性语言直接“运行”源代码。
除了BASIC这样特别早期的解释型语言,是直接解释执行,现在的解释型语言都采取将代码编译为某种特定的虚拟机代码或者机器码的形式,然后再执行那些编译好的代码。BASIC这种直接解释的,我们可以将他的基本操作序列理解为直接执行基本操作的那些函数。
作者:余天升
链接:https://www.zhihu.com/question/21486706/answer/18422107
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
比如对于一门动态语言,直接做一个编译器讲这门语言和汇编链接到一起,难度太大(尤其是词法分析上),这个时候可以采取间接的定义一套中间码,讲源代码编译成为中间码,中间码通过另一个程序(执行引擎,一般是C/C++写的)执行这个中间码,这样效率不会损失太多但大大加快了开发效率。
其实虚拟机执行引擎怎么执行传来的中间码,这也是一个编译/解释的区别,前者就是直接将中间码再次编译为更底层(汇编级别,机器码),并且保存到外存中,比如.NET的CLR;后者就是直接把这个中间码按照一条条的指令直接执行(执行也就是用C的等价代码来实现它),不会将新的代码保存在外存中。这也是一个最大的区别吧。
作者:DreamPiggy
链接:https://www.zhihu.com/question/31695794/answer/53797548
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
java动态代理与java是静态语言有什么关系?【码农翻身P321】
x86
一般说x86架构都是相对arm架构的.
x86、x64都是指CPU指令集
狭义的x86架构,指只支持32位的intel/AMD/VIA的CPU,并向下兼容16位(实模式);
狭义的x64架构,指的是支持32位和64位的intel/AMD CPU,指令集与x86兼容,并向下兼容16位(实模式),目前绝大多数民用CPU和服务器CPU都是这样的;
算法之链表和数组思路
链表的题目基本都是分三步走:
1.连过来。把想要的节点连到你需要的链表上
2.指针走。该节点处理完了,在原来的链表上要走一步.
3.断后路。当前链表不要和原来链表有连接
4.调状态。调整当前各指针的记录状态
其他部分仅仅是为了保存状态的。