• 关于

    嵌入式系统是什么

    的搜索结果

回答

关于书籍 Linux基础 1、《Linux与Unix Shell 编程指南》 2、《嵌入式Linux应用程序开发详解》 C语言基础 1. The C programming language 《C程序设计语言》 2. Pointers on C 《C和指针》 3. C traps and pitfalls 《C陷阱与缺陷》 4. Expert C Lanuage 《专家C编程》 5、《高质量程序设计指南:C++/C语言(第3版)》 Linux内核 1、《深入理解Linux内核》(第三版) 2、《Linux内核源代码情景分析》毛德操 胡希明着 研发方向 1、《UNIX Network Programming》(UNP) 2、《TCP/IP详解》 3、《Linux内核编程》 4、《Linux设备驱动开发》(LDD) 硬件基础 1、《ARM体系结构与编程》杜春雷 2、S3C2410 Datasheet 英语基础 1、《计算机与通信专业英语》 系统教程 1、《嵌入式系统――体系结构、编程与设计》 2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操 胡希明着 3、《Building Embedded Linux Systems》 关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。 专科生学嵌入式到找到工作的前前后后--学习的榜样 先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。 退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。 一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。 回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。 后来,我在百度知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。 我在想,为什么别人都能自学成才,我也可以的。我要相信自己,所以我就想自学,如果实在学不会我再去培训。 主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。 后来我又找到一份很好的视频,是在嵌入式学习网推出的一份视频《嵌入式视频教程--零基础手把手教你学嵌入式》,里面的教程还不错,很完整,可以让我从基础的开始学起。视频不便宜啊,但是我也忍了,毕竟买几本书都要几百了,何况他们还有半年的技术咨询和服务,算值了。 ==============这里我就不给出他们的网址,如果你也想要嵌入式视频的话,那就自己去百度搜索:零基础手把手教你学嵌入式。 下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。 收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。 接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。 这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,同时我不懂的就问,这里真的很感谢他们的技术客服对我的任何问题都是耐心的解答,每天都我几乎都有好几个问题问他们,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。 最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右 我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。 后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。 把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。 最后祝愿所有想学嵌入式的朋友更早的入门。 ------------------------------------------------------------好好加油,你也可以学好嵌入式的。。。。。。。。。。。。。。

游客886 2019-12-02 01:19:56 0 浏览量 回答数 0

问题

什么时候应该在嵌入式系统中使用类型抽象

游客ufivfoddcd53c 2020-01-03 19:19:53 2 浏览量 回答数 1

问题

嵌入式Linux下 多线程对串口读写多影响

杨冬芳 2019-12-01 20:22:43 1422 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

最佳的嵌入式系统Python框架(内存64MB,高清256MB)

祖安文状元 2020-02-21 16:05:34 0 浏览量 回答数 1

回答

要有足够的内存空间,因为运行时内核是被搬到内存中的,另外需要有内存管理单元MMU,因为linux内核是以虚拟地址为基础,所以必须要有将物理地址转虚拟地址的能力嵌入式系统,由于你系统可定制,所以需要什么条件不好说,要看你的功能要求。基本的:Linux能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,目前已经成功移植到数十种硬件平台,几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。

杨冬芳 2019-12-02 03:07:13 0 浏览量 回答数 0

回答

C语言,汇编 都是写操作系统必备的。汇编的话需要看你在什么平台上实现,如果是在PCC语言和x86汇编语言 上,就学x86汇编如果是在嵌入式系统上,通常需要学习 ARM汇编

杨冬芳 2019-12-02 03:06:38 0 浏览量 回答数 0

问题

将RegEx嵌入Oracle或SQL Server 2005 SQL的最佳方法是什么?

心有灵_夕 2019-12-30 09:59:20 1 浏览量 回答数 0

回答

顶###### 引用来自“龙图”的评论 顶 谢谢啊######先mark, 这个不错!###### 引用来自“John_Kwok”的评论 先mark, 这个不错! ###### 能在dsp里面跑吗? ###### 动不动就用在手机里面,个人感觉完全没用,试问,我要是做一个工业控制的设备,需要用这技术,难不成还要我拿手机来开发啊?系统提供dsp版本的源码 ###### 引用来自“开源硬件是什么意思”的评论 能在dsp里面跑吗? 可以运行在dsp中的,核心代码是c写的,可以移植到任何系统###### 引用来自“开源硬件是什么意思”的评论 动不动就用在手机里面,个人感觉完全没用,试问,我要是做一个工业控制的设备,需要用这技术,难不成还要我拿手机来开发啊?系统提供dsp版本的源码 程序的核心代码是用c写的,可以移植到任何嵌入式系统###### 引用来自“开源硬件是什么意思”的评论 动不动就用在手机里面,个人感觉完全没用,试问,我要是做一个工业控制的设备,需要用这技术,难不成还要我拿手机来开发啊?系统提供dsp版本的源码 引用来自“nj_jeff”的评论 程序的核心代码是用c写的,可以移植到任何嵌入式系统 手机版本的只是一个demo,方便演示罢了######顶下

kun坤 2020-05-30 15:34:12 0 浏览量 回答数 0

回答

你这里指的实现具体指什么意思?1、如果是在操作系统上实现,那么直接调用OS提供的文件操作就可以了。如果是直接在嵌入式裸机上的话,那涉及到文件系统,一般也建议移植而非自己写。2、向上暴露的接口如果是控制台的话,你可以自己写一个命令行管理模块(简单做就是一张表映射命令行和函数指针),如果要做界面的话,就需要引入GUI的包了。

杨冬芳 2019-12-02 02:25:41 0 浏览量 回答数 0

回答

这要从两个方面来说,一个语言所形成的生态,另外一个是语言本身。从语言的生态来说一旦某个语言在一个领域建立了自己的生态系统那么它的地位几乎很难被撼动了,java 语言在大数据、云计算、企业应用方面有了无数的Library、Framework、App,以及会使用这些东西的程序员。撼动这样一个体系无异于连根拔起一颗掺天大树,更聪明的做法应该是再栽一棵树,而不是拔树。类似的情况还有 COBOL 语言在金融领域、C 语言在操作系统内核和嵌入式领域。从语言本身来说很多程序员喜欢一个语言是因为他的开发效率,语法简洁不罗嗦、坑少不容易犯错误等,或者仅仅是因为看着舒服,但是苦恼的是在特定领域不流行而自己又为这个领域工作。这也不是什么大问题,一个语言转换成另外一种语言或者编译到另外一一个语言所用的 VM 是很容易的事情。javascript 浏览器里唯一的语言坑又很多,所以有无数种语言可以转换成 javascript: List of languages that compile to JS · jashkenas/coffeescript Wiki · GitHub,jQuery 也可以认为是新的一个语言。对于 java 来说能编译到 jvm 的语言也不少, go 目前没有成熟的方案,不过未来一定会有,嵌入式领域一直是 c/c++ 的天下,但是美国的好奇号火星探测器里的 c 代码很多是用 python 生成的。

hiekay 2019-12-02 01:42:08 0 浏览量 回答数 0

问题

Linux下如何应用程序的实时性?

杨冬芳 2019-12-01 20:20:06 848 浏览量 回答数 1

回答

众所周知,Java是平台无关的语言,那么Java为什么要支持平台无关性,总结一下,有如下几点支持多变的网络环境。如今是一个互联网的时代,网络将各种各样的计算机和设备连接起来,比如网络连接了windows的PC机,UNIX工作站等等。为了保证程序能够不加任何修改运行于网络上的任何计算机,而不管计算机是什么种类,什么平台,这样就极大减轻了系统管理员的工作。尤其是程序是通过网络环境进行部署的。支持网络化嵌入式设备。目前工作场所中存在各种各样的嵌入式设备,比如打印机,扫描仪,传真机等。他们往往通过网络连接起来,甚至在家庭网络和汽车内部也存在这样那样的嵌入式设备 。Java的平台无关性可以简化这样的系统管理任务。无论是哪个网络的管理员,它只需关注程序本身即可。此外添加一台新设备,可以立即被其他设备访问到,也可以访问其他设备。这都是平台无关性带来的好处。减少开发者部署程序的成本和时间。对于开发者而言, Java平台无关的能力给予网络一个同构的运行环境,使得分布式系统可以围绕着“网络移动对象”开构建。比如对象序列化,RMI, Jini就是利用平台无关性。把面向对象编程从虚拟机带到了网络上。影响Java平台无关性的因素Java平台的部署。运行Java程序之前,必须要部署好Java平台。Java平台的版本。Sun公司提供了不同的API集合,有标准版,扩展版等等。此外API本身也面临着改动,一些API被认为是过期的,一些API甚至不向下兼容,因此我们需要选择合适的Java平台版本支持程序开发。本地方法。当编写一个平台独立的Java程序时候,最重要的原则是:不要直接或间接调用不属于Java API的本地方法。调用Java API以外的本地方法使得程序平台相关。一般而言,本地方法在三种情况适用:使用底层主机平台的特性,而Java API无法访问;为了访问老系统或者使用现有的库,但是这个系统或库不是Java编写的;为了加快程序性能,将时间敏感代码用本地方法实现。因此当必须使用本地方法,而且支持多种平台运行,必须将本地方法移植到所有需要的平台上。因此编写平台独立的Java程序做主要的目的就是完全禁止本地方法,通过Java API和主机交互。非标准运行时库。所谓平台无关性,一种解释是你调用的方法是否在任何地方都已经实现。本地方法顾名思义,就是只是在本地实现了,所以无法保证平台无关。而Java API在如windows, Solaris等操作系统上的实现上使用了本地方法访问主机,即保证了平台无关。对虚拟机的依赖。虚拟机可以由不同开发商开发,但是必须满足如下两条原则:不要依赖及时终结(finalization)保证程序的正确性,因为特定程序中对象可能在不同的时间被垃圾收集;不要依赖线程的优先级来保证程序的正确性。因为一些虚拟机可以实现优先级高线程优先运行,一些虚拟机不能保证这一点。对用户界面依赖,AWT库提供基本的用户界面,这些组件被映射成每个平台上的本地组件,而Swing库为用户提供更高级的组件,但并没有被映射为本地组件。实现平台无关的7大步骤选择程序运行的主机和设备集合(目标宿主机)在目标宿主机中选择Java平台版本。对于每个目标宿主机,选择程序将要运行的Java平台实现(目标运行时环境) 。编写程序,调用Java API标准运行库(不调用本地方法,或者专门开发商专门调用本地方法的库)编写程序,不依赖于垃圾收集器收集垃圾时间,不依赖线程的优先级努力设计用户界面,在所有的目标宿主机都能正常工作在所有目标运行时环境和所有目标宿主机进行测试 Java从四个方面支持了平台无关性最主要的是Java平台本身。Java平台扮演Java程序和所在的硬件与操作系统之间的缓冲角色。这样Java程序只需要与Java平台打交道,而不用管具体的操作系统。Java语言保证了基本数据类型的值域和行为都是由语言自己定义的。而C/C++中,基本数据类是由它的占位宽度决定的,占位宽度由所在平台决定的。不同平台编译同一个C++程序会出现不同的行为。通过保证基本数据类型在所有平台的一致性,Java语言为平台无关性提供强有力的支持。Java class文件。Java程序最终会被编译成二进制class文件。class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载运行。它的格式有着严格的定义,是平台无关的。可伸缩性。Sun通过改变API的方式得到三个基础API集合,表现为Java平台不同的伸缩性:J2EE,J2SE,J2ME。

缘灭山上 2019-12-02 01:39:36 0 浏览量 回答数 0

回答

引用来自“李玉珏”的评论 字面意思就是session对应的缓存没有启动。 不指定 IgniteConfigurationFilePath,他会使用一个默认的配置文件,没有的话,启动一个什么都没有的节点。 引用来自“mini188”的评论是的,在WebSessionFilter里的initCache方法中报的:      @SuppressWarnings("unchecked") void initCache() { cache = webSesIgnite.cache(cacheName); binaryCache = webSesIgnite.cache(cacheName); if (cache == null) throw new IgniteException("Cache for web sessions is not started (is it configured?): " + cacheName); 这个cache取出来是null的。 ignite启动应该不需要设置什么吧,嵌入在web系统中应该也是可以启动的吧,我直接当缓存用是没问题的。 另外,我见webSesIgnite的启动代码如下: webSesIgnite = G.ignite(gridName); 而一般不是ignite = Ignition.start();这要启动吗? 引用来自“李玉珏”的评论 是需要在配置文件中设置一个缓存的,并且缓存的名字要和IgniteWebSessionsCacheName的值一致。 全默认配置启动的节点,是没有任何缓存的。 引用来自“mini188”的评论那请问我这种情况如何在配置中创建缓存呢? https://www.zybuluo.com/liyuj/note/486177#3183过期和退出###### 字面意思就是session对应的缓存没有启动。 不指定IgniteConfigurationFilePath,他会使用一个默认的配置文件,没有的话,启动一个什么都没有的节点。 ######我也没搞定,有搞定的 发我一份! ######你的问题是啥?###### 引用来自“李玉珏”的评论 字面意思就是session对应的缓存没有启动。 不指定 IgniteConfigurationFilePath,他会使用一个默认的配置文件,没有的话,启动一个什么都没有的节点。 是的,在WebSessionFilter里的initCache方法中报的:      @SuppressWarnings("unchecked") void initCache() { cache = webSesIgnite.cache(cacheName); binaryCache = webSesIgnite.cache(cacheName); if (cache == null) throw new IgniteException("Cache for web sessions is not started (is it configured?): " + cacheName); 这个cache取出来是null的。 ignite启动应该不需要设置什么吧,嵌入在web系统中应该也是可以启动的吧,我直接当缓存用是没问题的。 另外,我见webSesIgnite的启动代码如下: webSesIgnite = G.ignite(gridName); 而一般不是ignite = Ignition.start();这要启动吗? ###### 引用来自“李玉珏”的评论 字面意思就是session对应的缓存没有启动。 不指定 IgniteConfigurationFilePath,他会使用一个默认的配置文件,没有的话,启动一个什么都没有的节点。 引用来自“mini188”的评论是的,在WebSessionFilter里的initCache方法中报的:      @SuppressWarnings("unchecked") void initCache() { cache = webSesIgnite.cache(cacheName); binaryCache = webSesIgnite.cache(cacheName); if (cache == null) throw new IgniteException("Cache for web sessions is not started (is it configured?): " + cacheName); 这个cache取出来是null的。 ignite启动应该不需要设置什么吧,嵌入在web系统中应该也是可以启动的吧,我直接当缓存用是没问题的。 另外,我见webSesIgnite的启动代码如下: webSesIgnite = G.ignite(gridName); 而一般不是ignite = Ignition.start();这要启动吗? 是需要在配置文件中设置一个缓存的,并且缓存的名字要和IgniteWebSessionsCacheName的值一致。 全默认配置启动的节点,是没有任何缓存的。 ###### 引用来自“李玉珏”的评论 字面意思就是session对应的缓存没有启动。 不指定 IgniteConfigurationFilePath,他会使用一个默认的配置文件,没有的话,启动一个什么都没有的节点。 引用来自“mini188”的评论是的,在WebSessionFilter里的initCache方法中报的:      @SuppressWarnings("unchecked") void initCache() { cache = webSesIgnite.cache(cacheName); binaryCache = webSesIgnite.cache(cacheName); if (cache == null) throw new IgniteException("Cache for web sessions is not started (is it configured?): " + cacheName); 这个cache取出来是null的。 ignite启动应该不需要设置什么吧,嵌入在web系统中应该也是可以启动的吧,我直接当缓存用是没问题的。 另外,我见webSesIgnite的启动代码如下: webSesIgnite = G.ignite(gridName); 而一般不是ignite = Ignition.start();这要启动吗? 引用来自“李玉珏”的评论 是需要在配置文件中设置一个缓存的,并且缓存的名字要和IgniteWebSessionsCacheName的值一致。 全默认配置启动的节点,是没有任何缓存的。 那请问我这种情况如何在配置中创建缓存呢?###### 引用来自“李玉珏”的评论 字面意思就是session对应的缓存没有启动。 不指定 IgniteConfigurationFilePath,他会使用一个默认的配置文件,没有的话,启动一个什么都没有的节点。 引用来自“mini188”的评论是的,在WebSessionFilter里的initCache方法中报的:      @SuppressWarnings("unchecked") void initCache() { cache = webSesIgnite.cache(cacheName); binaryCache = webSesIgnite.cache(cacheName); if (cache == null) throw new IgniteException("Cache for web sessions is not started (is it configured?): " + cacheName); 这个cache取出来是null的。 ignite启动应该不需要设置什么吧,嵌入在web系统中应该也是可以启动的吧,我直接当缓存用是没问题的。 另外,我见webSesIgnite的启动代码如下: webSesIgnite = G.ignite(gridName); 而一般不是ignite = Ignition.start();这要启动吗? 引用来自“李玉珏”的评论 是需要在配置文件中设置一个缓存的,并且缓存的名字要和IgniteWebSessionsCacheName的值一致。 全默认配置启动的节点,是没有任何缓存的。 引用来自“mini188”的评论那请问我这种情况如何在配置中创建缓存呢? 引用来自“李玉珏”的评论https://www.zybuluo.com/liyuj/note/486177#3183过期和退出 谢谢啦,问题解决了。 ###### 引用来自“jxlgzwh”的评论我也没搞定,有搞定的 发我一份! 我问题已经搞定了,写了一篇博客,你可以参考一下:http://blog.csdn.net/5207/article/details/53034355###### 引用来自“jxlgzwh”的评论我也没搞定,有搞定的 发我一份! 引用来自“mini188”的评论我问题已经搞定了,写了一篇博客,你可以参考一下:http://blog.csdn.net/5207/article/details/53034355 https://www.zybuluo.com/liyuj/note/393469#318web%E4%BC%9A%E8%AF%9D%E9%9B%86%E7%BE%A4%E5%8C%96 的 3.18.1.架构 要用Ignite配置一个分布式Web会话缓存,通常需要将应用启动为一个Ignite节点(嵌入式模式),当多个应用服务器实例启动后,所有的Ignite节点会连姐在一起形成一个分布式缓存。 这段该如何理解,比如多个tomcat 如何配置才能让他们连接在一起形成一个分布式缓存? ###### 引用来自“jxlgzwh”的评论我也没搞定,有搞定的 发我一份! 引用来自“mini188”的评论我问题已经搞定了,写了一篇博客,你可以参考一下:http://blog.csdn.net/5207/article/details/53034355 引用来自“jxlgzwh”的评论https://www.zybuluo.com/liyuj/note/393469#318web%E4%BC%9A%E8%AF%9D%E9%9B%86%E7%BE%A4%E5%8C%96 的 3.18.1.架构 要用Ignite配置一个分布式Web会话缓存,通常需要将应用启动为一个Ignite节点(嵌入式模式),当多个应用服务器实例启动后,所有的Ignite节点会连姐在一起形成一个分布式缓存。 这段该如何理解,比如多个tomcat 如何配置才能让他们连接在一起形成一个分布式缓存? 是呀,启动一个节点就不是分布式啦,所以要启动多个才是分布式。 另外,如果都是在tomcat里启动有两种方式:第一种是用ignite的自动发现,也就是说两个嵌入在应用中的Ignite就能自动组成集群。另一种是自己配置静态ip这样也能发现对方。 2台和多台原理差不多

kun坤 2020-06-04 10:35:18 0 浏览量 回答数 0

回答

PHP的mysqli扩展是什么? mysqli扩展或MySQL改进的扩展是为了利用MySQL系统版本4.1.3和更高版本中的新功能而开发的。mysqli扩展包含在PHP 5及更高版本中。 mysqli扩展具有许多优点,相对于mysql扩展,主要的增强之处在于: 面向对象的界面 对准备好的语句的支持 支持多条语句 支持交易 增强的调试功能 嵌入式服务器支持来源:stack overflow

保持可爱mmm 2020-05-17 14:12:58 0 浏览量 回答数 0

回答

linux是一个用途广泛形态各异的操作系统,你怎么使用取决于你用它做什么。如果是无头显示的服务器,当然虚拟机更好,但是如果你用来作为桌面,比如ubuntu,那么就最好原生的方式使用。如果用于调试和交叉编译嵌入式环境,那么需要用模拟器。用虚拟机更方便一点吧,如果你的机器够好的话,linux系统其实占资源很少,512M内存就行,1G内存就很充裕,不像mac os很费资源。如果你的机器性能不够好,那就只好安装双系统了。如果用虚拟机,vmware目前已经做得很好了,找一个linux的ISO镜像,然后在vmware创建虚拟机,然后逐步安装就可以了,也是图形界面的,傻瓜似得。具体的安装步骤可以参考http://jingyan.baidu.com/article/4b52d702735fdafc5c774bc5.html。希望能帮到你。

杨冬芳 2019-12-02 03:07:48 0 浏览量 回答数 0

回答

说实话这乱七八糟一堆文字我看了两边,然后发现真救不了你. ######回复 @刘子玄:操作系统不管理寄存器,现在都是抢占式多线程操作系统,都是在线程释放资源的时候切换到其他进程的(你调用某些api的时候会发生等待和切换操作,然后保存线程执行环境数据)看一下操作系统原理的书籍就知道了.直接切换那个只有纯正的分时操作系统才会去做.现在估计只剩下大型UNIX了######==######靠时钟中断,硬件一定会定时发起时钟中断,中断服务一定会执行,这样就可以进行调度或做其他事了,中断机制由硬件保证。找书看吧,这些问题不是几句说得清。######谢了######在中断产生时,寄存器压栈,在中断结束后,堆栈的数据弹回到寄存器。###### 寄存器操作是汇编级别的最小操作单元,即使是操作系统也不能够管理寄存器. 是计算机有一些指令,能够自己把所有寄存器保存到一个地方.######计算机基础如此博大精深,几十年高科技结晶,不是三天三夜就能说清的,更何况几句话###### 简单2个字压栈.OS的原理很简单,你可以找一些嵌入式的OS开源代码进行阅读,相信读完2个系统的代码后,就对OS核心部分很清楚了. 挑你的一个问题进行回答:" 操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?"      感觉你还不清楚调度算法的实现.简单的说:硬件中断将其打断,如果需要1ms的进程调度精度,那么就设置时钟中断为1ms. 你可以看下中断部分的代码.       CPU的PC指针即使软件不去设置它也不是固定不变只能向下跑的.当中断发生的时候,PC指针会自动修改到相应中断向量的物理地址上,并且中断时的重要寄存器的值被硬件自动保存. 于是我们就设置一个时钟中断向量(将这个地址上写入我们的代码函数的地址),每18msPC指针会被自动改到这个地方,在这个地方我们根据调度算法,看是继续执行被打断的线程还是切换到更合适的线程上.  感性上,线程/cpu的运行实际上是非常的不连贯, 中途不断的被各种中断疯狂的打断.尤其高响应的硬实时OS,打断应该更加频繁. 我们想干任何事情都可以在中断处理中去做.        此外除了硬件中断,因为硬件功能都是api提供,so程序代码实际上经常会很频繁调用一些系统API,既然调用了系统api,os也完全可以在系统api执行软中断,执行调度算法,把pc指针移到别处去,不再正常的函数返回了(保存好数据,下次调度它时,模拟这个函数返回,应用程序完全不知道发生了什么). ######一个嵌入式OS的代码不过几千行而已. 看完几个 你就精通OS的实现了.不过"知识改变命运", 懂得越多混得越惨, 个人建议你干点其他能赚钱的事情.底层实现的东西,除了吹牛,提升点技术素质,对赚钱来说毫无用处,面试时都没用!!(实际上现在面试都是看算法)  小正太, 根据赚钱来指导自己学习/背诵什么东西.(很心痛的经验)######回复 @MinGKai:haha.反正比赚1个亿简单多了.######“精通”OS有那么简单么…………######这个你放心,我只会把编程当成毕生的爱好,而不会用作工作。

优选2 2020-06-09 16:14:52 0 浏览量 回答数 0

回答

说实话这乱七八糟一堆文字我看了两边,然后发现真救不了你. ######回复 @刘子玄 : 操作系统不管理寄存器,现在都是抢占式多线程操作系统,都是在线程释放资源的时候切换到其他进程的(你调用某些api的时候会发生等待和切换操作,然后保存线程执行环境数据)看一下操作系统原理的书籍就知道了.直接切换那个只有纯正的分时操作系统才会去做.现在估计只剩下大型UNIX了######= =######靠时钟中断,硬件一定会定时发起时钟中断,中断服务一定会执行,这样就可以进行调度或做其他事了,中断机制由硬件保证。找书看吧,这些问题不是几句说得清。######谢了######在中断产生时,寄存器压栈,在中断结束后,堆栈的数据弹回到寄存器。###### 寄存器操作是汇编级别的最小操作单元,即使是操作系统也不能够管理寄存器. 是计算机有一些指令,能够自己把所有寄存器保存到一个地方. ######计算机基础如此博大精深,几十年高科技结晶,不是三天三夜就能说清的,更何况几句话###### 简单2个字 压栈. OS的原理很简单, 你可以找一些嵌入式的OS开源代码进行阅读, 相信读完2个系统的代码后, 就对OS核心部分很清楚了. 挑你的一个问题进行回答: "操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?"       感觉你还不清楚调度算法的实现.简单的说: 硬件中断将其打断,如果需要1ms的进程调度精度,那么就设置时钟中断为1ms.  你可以看下中断部分的代码.        CPU的PC指针即使软件不去设置它也不是固定不变只能向下跑的. 当中断发生的时候,PC指针会自动修改到相应中断向量的物理地址上,并且中断时的重要寄存器的值被硬件自动保存.  于是我们就设置一个时钟中断向量(将这个地址上写入我们的代码函数的地址), 每18ms PC指针会被自动改到这个地方,在这个地方 我们根据调度算法, 看是继续执行被打断的线程 还是切换到更合适的线程上.   感性上, 线程/cpu 的运行 实际上是非常的不连贯,  中途不断的被各种中断疯狂的打断. 尤其高响应的硬实时OS,打断应该更加频繁.  我们想干任何事情都可以在中断处理中去做.         此外除了硬件中断, 因为硬件功能都是api提供,so程序代码实际上经常会很频繁调用一些系统API, 既然调用了系统api, os也完全可以在系统api执行软中断, 执行调度算法, 把pc指针移到别处去, 不再正常的函数返回了(保存好数据, 下次调度它时,模拟这个函数返回, 应用程序完全不知道发生了什么). ######一个嵌入式OS的代码不过几千行而已.  看完几个  你就精通OS的实现了. 不过"知识改变命运",  懂得越多混得越惨,  个人建议你干点其他能赚钱的事情. 底层实现的东西, 除了吹牛, 提升点技术素质, 对赚钱来说毫无用处, 面试时都没用!! (实际上现在面试都是看算法)   小正太,  根据赚钱来指导自己学习/背诵 什么东西. (很心痛的经验)######回复 @MinGKai : haha. 反正比赚1个亿简单多了.######“精通”OS有那么简单么…………######这个你放心,我只会把编程当成毕生的爱好,而不会用作工作。

爱吃鱼的程序员 2020-05-30 22:45:50 0 浏览量 回答数 0

回答

终极解答:图形界面GUI,有很多不同的实现库,而且分很多层逐级实现,例如你说的QT界面库,它在不同的操作系统平台上底层依赖的更基础的图形库也不同,在Windows平台依赖GDI32.dll,在嵌入式平台可能依赖于fb,也可能依赖于XWindow。至于OpenGL是一个相当底层的图形库标准,不同平台的具体实现方式当然也不相同。目前,微软为了自身Direct3D图形库的发展,已经不直接支持OpenGL,所以在Windows上进行OpenGL编程,需要第三方DLL从显卡驱动导出OpenGL API。严格来说GUI并不是操作系统的必备功能。尤其是在今天B/S程序占主流的年代,服务器很少配有显示器,更别说GUI了。当然了GUI对于桌面程序 非常重要,Windows也就是靠可靠好用的GUI才赢得了天下。如今智能手机的兴起也是与漂亮的GUI分不开。至于该学什么,这要看你的需求。个人建议按照需求和兴趣去学习。如果你的主要工作是开发Web程序,那么GUI就是html。如果你做桌面开发,或多或少离不开GUI的功能。GUI编程是很复杂的,而且需要美工,如果不是专业做这个,浅尝辄止即可。把更多的精力放到那些更重要更广泛的功能上: 线程进程,文件系统,网络,架构设计。

小旋风柴进 2019-12-02 02:33:20 0 浏览量 回答数 0

回答

楼主 你好,楼上两位已经回复了,递归更消耗内存,我来说说一下递归的“可怕”程度吧,递归无非是程序调用自身,程序运行时代码和数据存到内存中,即要分配内存空间,递归程序每调用一次自身,操作系统都要为其分配相应的内存资源,这一过程是通过“栈”这种数据结构实现的,楼主可查阅操作系统和编译原理方面的书籍,详细讲解这一过程,我通俗地说一下,栈就像一个水桶,只有上面有口,进栈和出栈都只能通过上面的口,从而有先进后出的数据结构特性,好啦,现在再回到递归那里,递归程序的一次调用好比向桶里放一块砖,依次向上堆,调用不结束就会一直向里放“砖”,如果调用次数稍多或内存较小的话很容易溢出,你会发现每次调用有很多东西是重复的,而循环则不同,循环得每次执行是对已有变量的更新,一般不会产生大量重复的东西,从而节省内存,但你会问我,为什么还要用递归呢,这是因为一些算法用递归写起来比较方便,当然不少递归算法都有他的循环版本,在嵌入式开发中,禁止写递归。好吧,就这些吧,我想我说的比较通俗了,希望能帮到你。

祁同伟 2019-12-02 01:24:39 0 浏览量 回答数 0

问题

人脸大数据系统发展的趋势是什么?

dlieng 2019-12-01 19:36:27 998 浏览量 回答数 4

问题

"CURLE_SSL_CONNECT_ERROR (35)"错误寻求解决方法

a123456678 2019-12-01 20:05:36 4825 浏览量 回答数 1

回答

首先说你理解的这个磁盘结构,仅仅是基于MBR引导方式的磁盘结构,另外分成4个的应该是分区表项dpt,加上“可引导”标记才能叫活动分区啊;主分区在分区表项里的限制是不超过4个也不少于1个,说白了就是表项里留一个主分区剩下的是主还是扩展随意就好。另外扩展分区也没什么“隐身”的特性,系统还眼巴巴指望着找到扩展分区表项后、再找出在它这入了户的逻辑分区呢,一个哈利波特外套披上剩下的分区们不全得哭晕了啊。。所以在windows下的磁盘管理里这都是一目了然的,至于资源管理器……对不起那个主要是面向文件的呢~至于引导,不基于硬盘引导的方式还是挺多的,除了远古时代的无盘站(基于网络pxe引导)还有中古时期的LiveCD(基于CD/DVD引导,不过这个Linux可能更多些),基于usb方式的引导出现时期还是比较晚些的,windows平台的to go系列大概是win7以后才逐渐成熟的(win7的时候我记得这还是嵌入式版本那边的东西)。所以最后的答案是,能。

a123456678 2019-12-02 02:59:50 0 浏览量 回答数 0

问题

sed: can't move 'wifi.confl5tFtt' to 'wifi.conf': Input/output error

a123456678 2019-12-01 20:05:29 1234 浏览量 回答数 1

回答

delete []不知道分配的大小。但是,该知识驻留在运行时或操作系统的内存管理器中,这意味着编译器在编译期间不可用。而sizeof()不是一个真正的功能,它实际上是评价由编译器的常数,这是一件好事它不能用于动态分配数组,其大小在编译期间是不知道做。 另外,请考虑以下示例: int *arr = new int[256]; int *p = &arr[100]; printf("Size: %d\n", sizeof(p)); 编译器将如何知道其大小p?问题的根源在于C和C ++中的数组不是一流的对象。它们会衰减为指针,编译器或程序本身无法知道指针是否指向分配的内存块的开头new,或单个对象或块中间的某个位置。由分配的内存new。 原因之一是C和C ++将内存管理留给了程序员和操作系统,这也是为什么它们没有垃圾回收的原因。实施new和delete不是C ++标准的一部分,因为C ++,就是要在各种不同的平台,它可以以非常不同的方式管理他们的记忆中。如果您正在为运行在最新Intel CPU上的Windows框编写文字处理器,则可以让C ++跟踪所有分配的数组及其大小,但是当编写在Windows XP上运行的嵌入式系统时,这可能是完全不可行的。 DSP。

保持可爱mmm 2020-02-10 16:04:59 0 浏览量 回答数 0

回答

在工程实践上,为了保障系统的可用性,互联网系统大多将强一致性需求转换成最终一致性的需求,并通过系统执行幂等性的保证,保证数据的最终一致性。但在电商等场景中,对于数据一致性的解决方法和常见的互联网系统(如 MySQL 主从同步)又有一定区别,分成以下 6 种解决方案。(一)规避分布式事务——业务整合业务整合方案主要采用将接口整合到本地执行的方法。拿问题场景来说,则可以将服务 A、B、C 整合为一个服务 D 给业务,这个服务 D 再通过转换为本地事务的方式,比如服务 D 包含本地服务和服务 E,而服务 E 是本地服务 A ~ C 的整合。优点:解决(规避)了分布式事务。缺点:显而易见,把本来规划拆分好的业务,又耦合到了一起,业务职责不清晰,不利于维护。由于这个方法存在明显缺点,通常不建议使用。(二)经典方案 - eBay 模式此方案的核心是将需要分布式处理的任务通过消息日志的方式来异步执行。消息日志可以存储到本地文本、数据库或消息队列,再通过业务规则自动或人工发起重试。人工重试更多的是应用于支付场景,通过对账系统对事后问题的处理。消息日志方案的核心是保证服务接口的幂等性。考虑到网络通讯失败、数据丢包等原因,如果接口不能保证幂等性,数据的唯一性将很难保证。eBay 方式的主要思路如下。Base:一种 Acid 的替代方案此方案是 eBay 的架构师 Dan Pritchett 在 2008 年发表给 ACM 的文章,是一篇解释 BASE 原则,或者说最终一致性的经典文章。文中讨论了 BASE 与 ACID 原则在保证数据一致性的基本差异。如果 ACID 为分区的数据库提供一致性的选择,那么如何实现可用性呢?答案是BASE (basically available, soft state, eventually consistent)BASE 的可用性是通过支持局部故障而不是系统全局故障来实现的。下面是一个简单的例子:如果将用户分区在 5 个数据库服务器上,BASE 设计鼓励类似的处理方式,一个用户数据库的故障只影响这台特定主机那 20% 的用户。这里不涉及任何魔法,不过它确实可以带来更高的可感知的系统可用性。文章中描述了一个最常见的场景,如果产生了一笔交易,需要在交易表增加记录,同时还要修改用户表的金额。这两个表属于不同的远程服务,所以就涉及到分布式事务一致性的问题。文中提出了一个经典的解决方法,将主要修改操作以及更新用户表的消息放在一个本地事务来完成。同时为了避免重复消费用户表消息带来的问题,达到多次重试的幂等性,增加一个更新记录表 updates_applied 来记录已经处理过的消息。基于以上方法,在第一阶段,通过本地的数据库的事务保障,增加了 transaction 表及消息队列 。在第二阶段,分别读出消息队列(但不删除),通过判断更新记录表 updates_applied 来检测相关记录是否被执行,未被执行的记录会修改 user 表,然后增加一条操作记录到 updates_applied,事务执行成功之后再删除队列。通过以上方法,达到了分布式系统的最终一致性。进一步了解 eBay 的方案可以参考文末链接。(三)去哪儿网分布式事务方案随着业务规模不断地扩大,电商网站一般都要面临拆分之路。就是将原来一个单体应用拆分成多个不同职责的子系统。比如以前可能将面向用户、客户和运营的功能都放在一个系统里,现在拆分为订单中心、代理商管理、运营系统、报价中心、库存管理等多个子系统。拆分首先要面临的是什么呢?最开始的单体应用所有功能都在一起,存储也在一起。比如运营要取消某个订单,那直接去更新订单表状态,然后更新库存表就 ok 了。因为是单体应用,库在一起,这些都可以在一个事务里,由关系数据库来保证一致性。但拆分之后就不同了,不同的子系统都有自己的存储。比如订单中心就只管理自己的订单库,而库存管理也有自己的库。那么运营系统取消订单的时候就是通过接口调用等方式来调用订单中心和库存管理的服务了,而不是直接去操作库。这就涉及一个『分布式事务』的问题。分布式事务有两种解决方式优先使用异步消息。上文已经说过,使用异步消息 Consumer 端需要实现幂等。幂等有两种方式,一种方式是业务逻辑保证幂等。比如接到支付成功的消息订单状态变成支付完成,如果当前状态是支付完成,则再收到一个支付成功的消息则说明消息重复了,直接作为消息成功处理。另外一种方式如果业务逻辑无法保证幂等,则要增加一个去重表或者类似的实现。对于 producer 端在业务数据库的同实例上放一个消息库,发消息和业务操作在同一个本地事务里。发消息的时候消息并不立即发出,而是向消息库插入一条消息记录,然后在事务提交的时候再异步将消息发出,发送消息如果成功则将消息库里的消息删除,如果遇到消息队列服务异常或网络问题,消息没有成功发出那么消息就留在这里了,会有另外一个服务不断地将这些消息扫出重新发送。有的业务不适合异步消息的方式,事务的各个参与方都需要同步的得到结果。这种情况的实现方式其实和上面类似,每个参与方的本地业务库的同实例上面放一个事务记录库。比如 A 同步调用 B,C。A 本地事务成功的时候更新本地事务记录状态,B 和 C 同样。如果有一次 A 调用 B 失败了,这个失败可能是 B 真的失败了,也可能是调用超时,实际 B 成功。则由一个中心服务对比三方的事务记录表,做一个最终决定。假设现在三方的事务记录是 A 成功,B 失败,C 成功。那么最终决定有两种方式,根据具体场景:重试 B,直到 B 成功,事务记录表里记录了各项调用参数等信息;执行 A 和 B 的补偿操作(一种可行的补偿方式是回滚)。对 b 场景做一个特殊说明:比如 B 是扣库存服务,在第一次调用的时候因为某种原因失败了,但是重试的时候库存已经变为 0,无法重试成功,这个时候只有回滚 A 和 C 了。那么可能有人觉得在业务库的同实例里放消息库或事务记录库,会对业务侵入,业务还要关心这个库,是否一个合理的设计?实际上可以依靠运维的手段来简化开发的侵入,我们的方法是让 DBA 在公司所有 MySQL 实例上预初始化这个库,通过框架层(消息的客户端或事务 RPC 框架)透明的在背后操作这个库,业务开发人员只需要关心自己的业务逻辑,不需要直接访问这个库。总结起来,其实两种方式的根本原理是类似的,也就是将分布式事务转换为多个本地事务,然后依靠重试等方式达到最终一致性。(四)蘑菇街交易创建过程中的分布式一致性方案交易创建的一般性流程我们把交易创建流程抽象出一系列可扩展的功能点,每个功能点都可以有多个实现(具体的实现之间有组合/互斥关系)。把各个功能点按照一定流程串起来,就完成了交易创建的过程。面临的问题每个功能点的实现都可能会依赖外部服务。那么如何保证各个服务之间的数据是一致的呢?比如锁定优惠券服务调用超时了,不能确定到底有没有锁券成功,该如何处理?再比如锁券成功了,但是扣减库存失败了,该如何处理?方案选型服务依赖过多,会带来管理复杂性增加和稳定性风险增大的问题。试想如果我们强依赖 10 个服务,9 个都执行成功了,最后一个执行失败了,那么是不是前面 9 个都要回滚掉?这个成本还是非常高的。所以在拆分大的流程为多个小的本地事务的前提下,对于非实时、非强一致性的关联业务写入,在本地事务执行成功后,我们选择发消息通知、关联事务异步化执行的方案。消息通知往往不能保证 100% 成功;且消息通知后,接收方业务是否能执行成功还是未知数。前者问题可以通过重试解决;后者可以选用事务消息来保证。但是事务消息框架本身会给业务代码带来侵入性和复杂性,所以我们选择基于 DB 事件变化通知到 MQ 的方式做系统间解耦,通过订阅方消费 MQ 消息时的 ACK 机制,保证消息一定消费成功,达到最终一致性。由于消息可能会被重发,消息订阅方业务逻辑处理要做好幂等保证。所以目前只剩下需要实时同步做、有强一致性要求的业务场景了。在交易创建过程中,锁券和扣减库存是这样的两个典型场景。要保证多个系统间数据一致,乍一看,必须要引入分布式事务框架才能解决。但引入非常重的类似二阶段提交分布式事务框架会带来复杂性的急剧上升;在电商领域,绝对的强一致是过于理想化的,我们可以选择准实时的最终一致性。我们在交易创建流程中,首先创建一个不可见订单,然后在同步调用锁券和扣减库存时,针对调用异常(失败或者超时),发出废单消息到MQ。如果消息发送失败,本地会做时间阶梯式的异步重试;优惠券系统和库存系统收到消息后,会进行判断是否需要做业务回滚,这样就准实时地保证了多个本地事务的最终一致性。(五)支付宝及蚂蚁金融云的分布式服务 DTS 方案业界常用的还有支付宝的一种 xts 方案,由支付宝在 2PC 的基础上改进而来。主要思路如下,大部分信息引用自官方网站。分布式事务服务简介分布式事务服务 (Distributed Transaction Service, DTS) 是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。DTS 从架构上分为 xts-client 和 xts-server 两部分,前者是一个嵌入客户端应用的 JAR 包,主要负责事务数据的写入和处理;后者是一个独立的系统,主要负责异常事务的恢复。核心特性传统关系型数据库的事务模型必须遵守 ACID 原则。在单数据库模式下,ACID 模型能有效保障数据的完整性,但是在大规模分布式环境下,一个业务往往会跨越多个数据库,如何保证这多个数据库之间的数据一致性,需要其他行之有效的策略。在 JavaEE 规范中使用 2PC (2 Phase Commit, 两阶段提交) 来处理跨 DB 环境下的事务问题,但是 2PC 是反可伸缩模式,也就是说,在事务处理过程中,参与者需要一直持有资源直到整个分布式事务结束。这样,当业务规模达到千万级以上时,2PC 的局限性就越来越明显,系统可伸缩性会变得很差。基于此,我们采用 BASE 的思想实现了一套类似 2PC 的分布式事务方案,这就是 DTS。DTS在充分保障分布式环境下高可用性、高可靠性的同时兼顾数据一致性的要求,其最大的特点是保证数据最终一致 (Eventually consistent)。简单的说,DTS 框架有如下特性:最终一致:事务处理过程中,会有短暂不一致的情况,但通过恢复系统,可以让事务的数据达到最终一致的目标。协议简单:DTS 定义了类似 2PC 的标准两阶段接口,业务系统只需要实现对应的接口就可以使用 DTS 的事务功能。与 RPC 服务协议无关:在 SOA 架构下,一个或多个 DB 操作往往被包装成一个一个的 Service,Service 与 Service 之间通过 RPC 协议通信。DTS 框架构建在 SOA 架构上,与底层协议无关。与底层事务实现无关: DTS 是一个抽象的基于 Service 层的概念,与底层事务实现无关,也就是说在 DTS 的范围内,无论是关系型数据库 MySQL,Oracle,还是 KV 存储 MemCache,或者列存数据库 HBase,只要将对其的操作包装成 DTS 的参与者,就可以接入到 DTS 事务范围内。一个完整的业务活动由一个主业务服务与若干从业务服务组成。主业务服务负责发起并完成整个业务活动。从业务服务提供 TCC 型业务操作。业务活动管理器控制业务活动的一致性,它登记业务活动中的操作,并在活动提交时确认所有的两阶段事务的 confirm 操作,在业务活动取消时调用所有两阶段事务的 cancel 操作。”与 2PC 协议比较,没有单独的 Prepare 阶段,降低协议成本。系统故障容忍度高,恢复简单(六)农信网数据一致性方案电商业务公司的支付部门,通过接入其它第三方支付系统来提供支付服务给业务部门,支付服务是一个基于 Dubbo 的 RPC 服务。对于业务部门来说,电商部门的订单支付,需要调用支付平台的支付接口来处理订单;同时需要调用积分中心的接口,按照业务规则,给用户增加积分。从业务规则上需要同时保证业务数据的实时性和一致性,也就是支付成功必须加积分。我们采用的方式是同步调用,首先处理本地事务业务。考虑到积分业务比较单一且业务影响低于支付,由积分平台提供增加与回撤接口。具体的流程是先调用积分平台增加用户积分,再调用支付平台进行支付处理,如果处理失败,catch 方法调用积分平台的回撤方法,将本次处理的积分订单回撤。用户信息变更公司的用户信息,统一由用户中心维护,而用户信息的变更需要同步给各业务子系统,业务子系统再根据变更内容,处理各自业务。用户中心作为 MQ 的 producer,添加通知给 MQ。APP Server 订阅该消息,同步本地数据信息,再处理相关业务比如 APP 退出下线等。我们采用异步消息通知机制,目前主要使用 ActiveMQ,基于 Virtual Topic 的订阅方式,保证单个业务集群订阅的单次消费。总结分布式服务对衍生的配套系统要求比较多,特别是我们基于消息、日志的最终一致性方案,需要考虑消息的积压、消费情况、监控、报警等。

小川游鱼 2019-12-02 01:46:40 0 浏览量 回答数 0

回答

更换服务器~100个是单服务器最大的负荷了你用的是镶嵌式的,要选择服务器机组的那种~刀片式服务器~然后oracl数据库支持分开安装。同步处理~ 你肯定买的是架式服务器~######装ORACLE服务器是刀片式的,6核至强 24G的内存 应该不是服务器瓶颈######oracl装在独立的一台服务器上的话,只支持小形企业和地、市级企业运行 你说的情况,可以理解你的数据量非常庞大,,有可能是省、国家级的数据量了~~ 让你单位给你单独开个服务器房间,更换服务器机柜然后购买刀片式服务器做服务器阵列机组~######数据量倒不会太大,一天1G不到,问题是很多存储过程的逻辑很复杂,一条线程调用存储过程,要等待很久才会返回,直接导致工作线程速度很慢,数据进入速度太快,工作异常状态频繁出现。######必须要实时的存入数据库吗?不能先缓存到服务器,然后让服务器慢慢去处理吗?或者直接将数据记入日志,然后sqlload?######回复 @xinzaibing : 我想到一个蛋疼的方式:数据写文件,文件内容定期入库,程序定期读取数据库计算的结果缓存到内存中。不知道你具体需求,瞎琢磨一个。######回复 @asdfsx : 公司领导一致认为内存不可靠,断电、程序异常什么的...存在内存的数据就没了...真是蛋疼啊######回复 @xinzaibing : 如果数据量不大的话,还有一个方案就是都保存在内存里,然后定时把内存里的结果同步到数据库里。数据库的逻辑挪到程序里..........这个方案比较累啊。另外就是缓存可以加个优先级高低的判断。######目前要求是必须要实时入库,采取写日志文件的方法也可以。 这些数据有一个特点,在某一个时刻会有一个突然出现的峰值,然后又慢慢变少,但是这个时间是不固定的,由于只实用了一条双缓冲队列,所有需要紧急处理的数据和非紧急处理的数据都在队列里,而如果遇到非紧急数据,处理了很长的时间,就直接导致后面的紧急数据失效了...或者导致嵌入式程序判断服务端未收到数据,进而采取重发,导致一条队列里有非常多重复的数据。######我可能会使用数据写入日志文件,然后定时将日志入库的办法操作######大概意思可能是多线程对数据库表的操作导致数据表锁定,性能损失在内耗上了。。那数据表采用行级锁呢?(这样会增大系统开销)我是菜鸟,求教  ######回复 @xinzaibing : 这个应该是属于最初的设计问题,hohoho######回复 @asdfsx : 目前我也在往这方面考虑,如果数据分类处理。那就得大改结构了...唉######回复 @xinzaibing : 建议根据上传的不同数据进行不同的处理,不要一股脑的都放在缓存中,如果是心跳的话,应该立即响应,如果是要处理的数据的话,才需要进行缓存等待处理######ORACLE默认就是行级锁的应该.. 主要是数据的写入速度远远小于数据上传的速度,导致了缓存溢出,紧急数据不能得到及时处理,大量数据出现超时失效,无法对嵌入式的采集器程序作出及时的心跳相应和其他回复(因为都在队列中,无法处理,无心跳的话嵌入式采集器会误认为服务器断线)。最终导致单台服务器接入数据的嵌入式设备的数量太少,不满足需求。######去年刚毕业,由于公司小,一个人搞后台,压力太大啊...大家指指招呗~ @中山野鬼######今天到图书馆看了一本书《让Orcale跑的更快点》,上面说可以从如下几个方面优化: 数据库方面:建适当的索引,固定长度;查询条件比较尽量简化;不同的表放在不同的磁盘里…… 服务层:增大缓存,(有没有数据库连接池不知道你能用上不) 软件层:对Java使用PaperStatement 囫囵吞枣就记得这么多了。。。哭~~######非常感谢...我去看看这本书 :)######我不清楚你的数据采集的内容是什么。不过看的出,对实时性要求高。换我,基本上就一个思路。 1、做个前段服务器,什么事情都不干,只进行数据的压缩。然后所有数据库和计算操作,放到后端。 至于并发,你这种 1W=100台服务器的方式治标不治本。######@中山野鬼 是说对数据进行预处理,提取有效内容?还是就是zip?######回复 @asdfsx : 不一样的。而是数据压缩。采样数据中间,信息密度不会太大的。######老鬼的思路有点像我说的那个数据写日志文件,或者内存缓存定时入库...........都被否定了啊######@xinzaibing 还有一个建议,上传的数据加一个验证,如果上传的数据已经插入缓存,就不要再次插入了。无脑插入插到崩也不是什么好主意啊######回复 @asdfsx : 要回复的,要处理成功后才回复,存库失败或者某些异常导致服务端崩溃重启,就不进行回复,客户端会持续地进行重发,重发到一定次数后,存本地,等恢复正常后发送存本地的数据

kun坤 2020-06-09 11:56:38 0 浏览量 回答数 0

回答

就ISO C标准(语言的正式定义)而言,访问其边界之外的数组具有“ 未定义的行为 ”。其字面意思是: 在使用非便携式或错误程序构造或错误数据时的行为,对此国际标准不施加任何要求 一个非规范性的注释扩展了这一点: 可能的不确定行为范围从完全忽略具有无法预测结果的情况到在翻译或程序执行过程中以环境特征记录的方式表现(带有或不带有诊断消息)到终止翻译或执行(带有发布)诊断消息)。 这就是理论。现实是什么? 在“最佳”情况下,您将访问一些内存,这些内存要么是当前正在运行的程序所拥有的(这可能导致您的程序行为不当),要么不是当前正在运行的程序所拥有的(这可能会导致您的程序崩溃,例如细分错误)。或者,您可以尝试写入程序拥有的内存,但是将其标记为只读;这也可能导致程序崩溃。 假设您的程序在一个试图保护彼此并发运行的进程彼此之间的操作系统下运行。如果您的代码在“裸机”上运行,比如说它是OS内核或嵌入式系统的一部分,则没有这种保护;您行为不当的代码就是应该提供这种保护的内容。在这种情况下,损坏的可能性会更大,包括在某些情况下对硬件(或附近的东西或人)的物理损坏。 即使在受保护的OS环境中,保护也不总是100%。例如,存在一些操作系统错误,这些错误使无特权的程序可以获取根(管理)访问权限。即使具有普通用户特权,出现故障的程序也可能消耗过多的资源(CPU,内存,磁盘),从而可能使整个系统瘫痪。许多恶意软件(病毒等)利用缓冲区溢出来获得对系统的未授权访问。 (一个历史示例:我听说过,在一些带有核心内存的旧系统中,在紧密循环中重复访问单个内存位置可能确实导致该内存块融化。其他可能性包括破坏CRT显示器和移动读取的内容。 /写入磁盘驱动器磁头,使其具有驱动器柜的谐波频率,从而使其滑过桌子并掉落在地板上。) 而且总是有天网需要担心。 底线是:如果您可以编写一个程序来故意做一些不好的事情,那么从理论上讲,一个有缺陷的程序至少有可能偶然地做同样的事情。 在实践中,这是非常不可能的,你与MacOS X系统上运行错误的程序会做什么比暴跌更加严重。但是,不可能完全防止错误的代码做真正的坏事。 问题来源于stack overflow

保持可爱mmm 2020-01-16 15:55:44 0 浏览量 回答数 0

问题

【精品问答】Java经典问答之SpringBoot 100问

问问小秘 2019-12-01 22:00:40 1176 浏览量 回答数 0

问题

【精品问答】Java微服务架构之Spring Boot核心知识 100问(附源码)

游客pklijor6gytpx 2019-12-01 22:04:21 850 浏览量 回答数 0

问题

各类常用网站程序语言

ethnicity 2019-12-01 22:09:02 6921 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站