从txt读取数据时系统自动多读取了一部分零碎的数据,希望大佬们能帮忙解决一下。

本人c++萌新,对c++还不太熟悉。(已解决,谢谢大家)

参考信息:【mie haha 的博客】转载请注明出处(万分感谢!):
https://blog.csdn.net/qq_40315080/article/details/88176331

图片说明(调试照片以及txt文档)

(修改如下,具体原因可见我转载的文章)图片说明

读取函数如下:


void Class::class_Read()    //从文件读入数据
{
    Date *p;
    p = ClassHead;
    ifstream in("class.txt");
    if (!in) { cout << "没有课程信息,请先录入课程信息!" << endl; return; }
    while (1)
    {
        string n,e;
        int s;
        double N,t;
        in >> N >> n >> t >> s >> e;
        class_insert(N,n,t,s,e);
        if(in.fail())
        {
            break;
        }
    }
    in.close();
}   



#endif;
c++

2个回答

in >> N >> n >> t >> s >> e;
之后马上检测fail();

xuese_luochen
xuese_luochen 就是这样的,谢了
大约 2 个月之前 回复
    while (1)
    {
        string n, e;
        int s;
        double N, t;
        in >> N >> n >> t >> s >> e;
        if (in.fail()) {
            break;
        } else {
            class_insert(N, n, t, s, e);
        }
    }
xuese_luochen
xuese_luochen 这里出什么问题了?
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何用python读取txt文件中的科学计数表示的数据并绘图?
import matplotlib.pylab as pylab def loaddata(filename): infile = open(filename, 'r') #定义两个list,用于存放数据 x = [] y = [] for line in infile: trainingset = line.split()#对于每一行按照空格分开,将数据分为两部分。若用‘,’分隔,则写为line.split(',') x.append(trainingset[0])#第一部分,即文件中的第一列数据逐一添加到list x中 y.append(trainingset[1])#第二部分,即文件中的第二列数据逐一添加到list y中 return(x, y) #x,y组成一个元组,通过函数一次性返回 def plotdata(x, y): length = len(y) pylab.figure(1) pylab.plot(x, y, 'rx') pylab.xlabel('time') pylab.ylabel('amplitude') pylab.show()#让绘制的图形在屏幕上显示 (x, y) = loaddata('test.txt') plotdata(x, y) 用这个程序读取文件后绘图结果科学计数表示的数字无法自动分辨大小 ![图片说明](https://img-ask.csdn.net/upload/201810/29/1540792031_60721.png)
这个项目需要多少钱才能开发?
我是基层气象局的工作人员,我希望找公司开发底层数据库。但是我真的搞不懂,现在的软件开发项目到底需要多少钱! 我把自己想的东西列了一下,有没有人可以指点下,需要多少钱。如果可能的话,还想知道需要多少时间。 我自己99年毕业的通信工程专业,数据库还懂一点,应当可以配合开发人员的。 # XX县数据共享平台任务书 ## 一、 数据的汇集 a) 实现从省市自动站数据库自动获取、归集XX县所有测站的实时观测资料 b) 从省局数据库导入XX县本站及中尺度站的历史资料(资料来源由XX县气象局提供) c) 对部分指定的观测数据表,转存部分资料到一个新的表。(用于共享访问) d) 编程实现从XX办服务器上自动获取、归集XX办测站的数据(该服务器可通过公网访问) e) 编程实现从XX局服务器上自动获取、归集XX局测站的数据(该服务器可通过公网访问) f) 编程实现防汛XX办和XX局数据向省局数据库的自动实时推送。 g) 从市业务数据库自动获取、归集XX县气象局发布的各类天气预报和预警信息 h) 从内网网页上读取省局分析产品(网页形式,解析为图片和文字),保存到数据库内 i) 从内网网页上读取台风分析资料,包括路径、风雨预测,保存到数据库 j) 从内网网页上读取雷达资料,保存到数据库 k) 导入影响市级地区的历史台风资料库,包括路径、灾情 l) 设计人员数据库,存储气象工作者、气象协理员、气象用户、决策用户等不同类型用户的资料。 ## 二、 设计提交数据库一个,内含第一点内所有数据 a) 各数据应当分表、分时间段存放。 b) 表的设计应当便于理解和读取 c) XX县气象局提供人员协助,表的设计必须得到XX县气象局协助人员的认可。为此,要求指派至少一名数据库设计人员在XX县气象局实地开发设计1个月。 d) 数据设计中须实现双机自动备份,增量备份到外部介质和远程备份到温州服务器的功能。 ## 三、 接口开发 a) 接口的形式包括通过网页调用和命令行调用,接口应当返回JSON格式数据以便后继程序调用,接口应当同时支持返回文本、图片等其他格式的数据进行直接发布。 b) 下图举例需要设计的接口,实际开发应当根据数据库资料内容增加接口。要求无特殊原因,数据库的内容均能通过接口调用。 ![图片说明](https://img-ask.csdn.net/upload/201509/01/1441119569_639744.jpg) c) 提供接口API,可以通过该接口向数据库添加资料。 d) 提供通过FTP向数据库添加资料的功能。 e) f) 提供第三方直接读取数据库指定表的设计,以及相应的权限设计 ## 四、 权限设计 a) 接口的调用受到权限和次数的限制,通过类似微信的公钥进行调用和限制。 b) 权限设计应当能区分气象工作者、气象协理员、气象用户、决策用户。 c) 允许某些用户远程直接访问数据库的指定表。 d) 提供权限管理的后台界面,能够在界面上增加、修改用户,指定用户权限。 ## 五、 显示 a) 开发资料显示功能,提供各表资料在GIS地图上的叠加显示功能,包括数值显示和色图显示功能,GIS系统由开发者和XX县气象局协商选择,必须能够提供显示结果的图示导出功能。 b) 简单的数据查询功能。即指定一定参数,能从数据库返回数据。并能修改指定值后返回数据库。
一个难倒三线城市所有开发人员,主要在数据库方面的项目,就等给各位大侠发路费了
俺生在、活在伟大祖国的一个三线小城市,畴划了一个难倒三线城市所有开发人员,主要在数据库构架,您认为是我的方案行的通吗,还是他们没修炼?到家呢?俺也迷茫了,路过的大侠能给俺点指点吗,发表您的看法,您就说您认为可行不可行,俺将不胜感激!!! ![图片说明](https://img-ask.csdn.net/upload/201807/23/1532329333_341082.jpg) 开发项目: 全球线缆管理专家 开发思路: 目前,全世界对管线缆的管理水平普遍还处在一个相对较低的水平上! 至少有95%企业回答不了以下几个问题:企业到目前为止总共铺设了多少条电缆,每条电缆是哪一年铺设的,已经使用了多少年,最大安全使用年限是多少?是否进行了正常的巡检?今年具体是哪条电缆需要更换吗?您公司布设了多少打数据线,它们起点端口和相对应终点端口分别在哪里?3、您家里水、电、暖具体埋设在墙壁、地板的哪个位置? 然而,企业要达到良好的管理水平就必须持续投入大量的人力、物力和财力。但是这个投入收益效率显然太低了;当企业真正大力投入的时候就会发现这些新电缆老是不坏,旧电缆坏了又不好查;所以大多数企业不愿意去做,准确的说是不愿花大力气去做这个事情。 所以要提高全社会的线缆管理水平最好的办法就是走社会化的道路。就比如每个企业都有通讯要求,但是如果因此要求每个企业都去建一个通迅公司的话,显然是不可能的。同样,要解决这个问题最好方法是,能有一家企业专注的去做这件事,并在这方面提供社会化的服务。 技术方案: 概述: 基于无线网络和地理位置定位,运用服务器数据的区块分割管理法对管、线、缆进行系统编码(指出物品在数据库表中的第几条记录)、条形码标识,免查询直接读取数据的管理方法。 简单说就是:一条线缆被记录在表中是第N条,保持永远是第N条不变,然后把数字“N”,生成条形码贴在线缆上,用手机扫描条形码就能知道,我们要查第几条记录了,直接把指针移过支读取。 项目要成功的关键就是 要解决两个难题:1、能存下天量数据;2,能快速读取 具体实施方案: 一种基于无线网络和地理位置定位,运用数据的区块分割管理法,对管、线、缆进行系统编码、条形码标识的管理方法。共分两个大的部分: (1)一种数据的区块分割管理法:首先把一个大的数据集合,根据某一特征人为的分成若干个“区块”,作为服务器管理的最小单元;由于“区块分割”从理论上,在边界上误差和错误必然发生,于是“区块分割管理法”要求把每一个区块和与它所有相邻的区块动态的作为一个相对较大的区域来管理:当在查询某一个区块内的数据的时候与他所有相邻的区块内的数据会根据需要进行协作查询;同时要求当向某一个区块增加一个新的数据时不能与其所有相邻的区块内的已有的数据出现某一特定属性的共同特征;用这个方法来进行系统“容错、纠错”,保证即便真的出现了错误,也能正确的还原输出正确信息。如图1所示,如果我们先定一个规则:假定数字“1“先被一个区块记录了,那它相邻的区块都不能再出现“1”这个数字;数字“2”被一个区块记录了,数字“2"所在区块相邻的区块都不能再出现"2"这个数字了;假如有一天我们想找到“1”,但我们只能确定“1”有90%可能性在某一区域,但是,同时能确定100%不会超出这个区块和他相邻区块构成的这个总体的区域,所以我只要在这个区块和他相邻区块构成的这个总体的区域里找到了“1“,那么这个“1”就一定是我想要找的那个“1“。显然,这个“1”和在这个区域以外出现的“1”是不一样的。所以,区块分割使同一编码,会因其所在区块不同而代表的含义不同。使编码可以在整个数据集的非相邻区块内重复使用。 (2)一种基于无线网络和地理位置定位,运用数据的区块分割管理法,对管、线、缆进行系统编码、条形码标识的管理方法。 过去有很多事情,由于数据量庞大而很难解决。现在,运用数据的区块分割管理法可以方便解决很多问题,尤其是在智慧城市和数字化城市、数字化地球建设方面将来一定会得到广泛的运用。例如,如果要把所有的管、线、缆全部管理起来,甚至同一条管、线、缆根据所处的地域不同还要分为好多段来管理,整体上必然是一个巨大的数据量。但是,单条记录占用空间并不大,他们的位置(经纬度坐标)却还是相对固定的。根据这一特征,运用本发明所提供的基于无线网络和地理位置定位,运用数据的区块分割管理法,对管、线、缆进行系统编码、条形码标识的管理方法用来解决这一难题。统一管、线、缆编码标准,建设、维护一个能长期保存,方便随时可查、全社会可用的管、线、缆数据的信息系统;在这个信息系统里,服务器就如同所有用户共同使用(共享)的一个“云账本”,大家都在这个帐本上“记账”;在这里又如同给每一条线缆上了一个“户口”。每一个“户口”都记录了管、线、缆日常管理的必要信息。对于“建设单位、负责人联系方式、目前在用还是弃用、弃用,是否允许他人使用”等非涉密的信息,用户可以有选择的向全社会公开,并使全社会的人都有办法方便的了解这些。 “经度”、“纬度”、“编码”共同确定了每一个“户口”的唯一性。由于,强制要求在两条经度线和两条纬度线所围成的每一个“区块”及其相邻的“区块”构成的这个“大区块”内,授予用户的“编码”部分都要保持唯一性;这就等于为把大型数据集合进行了有效分割,并为保障能准确查询打下了坚实的基础。所以,用户只要使用了带有自动定位功能的终端,在一般情况下只需要在目标物上制作条形“编码”和读取条形“编码”部分就足够了,而不需要人工输入所在位置的经纬度信息;即使在自动定位失败的情况下,也只需指定出用户所在“区块”内的任何一个点的位置就可以了,而无需关心具体的经纬度数据,整个过程中系统会根据需要将终端设备所在位置的具体的经纬度自动上传服务器。 本发明所提供的方法便于多个服务器时之间以“区块”作为最小单元进行工作量分配,以方便运营商配置合理的服务器数量,保障恰当的服务响应时间和运营成本的。又因为管、线、缆具有细、长的共同外形特点,所以通过条形码进行标识更具有普遍的易制作和易读取性。 本发明提供的一种基于无线网络和地理位置定位,运用数据的集合区块分割管理法,对管、线、缆进行系统编码、条形码标识的管理方法,使条形码标识在人、机、目标物之间“接口”的准确对接及提高信息交换效率上起了关键性的作用;而地理位置定位的信息系统通过“后台”自动调取、终端设备自动发送方式,为这一过程的顺利进行提供了保障。 实施例1:一用户A正在某处铺设光缆,他通过安装了App的手机向远端服务器发出了要编码请求;服务器收到了请求和用户A所在的位置的经纬度数据,检查用户A所在“区块”的数据库,选出一个编码,确认这个编码不仅用户所在“区块”没有占用,且紧邻的几个“区块”内也没有使用,然后服务器将这个号码发到用户A手机的APP上并将这个编码设为临时占用(24小时);用户手机通过蓝牙传到了用户的条形码喷枪上,用户A操作喷枪把转换成条形码的编码喷在了光缆上;然后用户用手机扫描该条形码,编码被识别后,给这段光缆填写了“通讯工程1号线、起始于机房、终点红星小区9号中继站、线长1672CM、管理单位:通讯公司、电话:123”等信息后,向服务器发送了保存指令;服务器收到指令后保存了信息,并将编码由临时占用(24小时)改为70年保存期。半年后,该用户巡查了这段线路,扫描条形码后,又在信息上增加了“状态正常、巡线员甲、2018年12月8日”的信息后,指令服务器作了保存。10年后,该用户认为60年占用期太短,又申请将这段线路编码的占用期修改为70年。
关于用poi实现对word文档的读写功能
# 探讨用poi实现对word文档的读写功能 在java语言,window系统下用poi怎么实现自动从系统中获取doc格式的文件并读取其中数据, 用户在页面填入数据后,点击设定好的按钮会自动把部分数据插入到抓取到的word文档中并生成一个新的word文档,在生成新的文档时弹出对话框,用户选择要保存的位置。 由于操作word文档的学习文件实在太少,有知道的大神还请指教!急!
C语言有谁编过一个简单的系统吗?学生信息管理系统 求助!用C++编程
各项功能说明 # (1)学生基本信息的录入和保存: 这部分的功能主要包括信息的录入和保存和总分、平均分的计算,首先按程序提示输入所要输入的学生人数,接着是分别输入有关学生的相关信息包括学号、姓名、年龄、性别以及学生各科成绩的分数等。在录入数据的同时,系统将对信息的合法性进行检验(学号范围为100~200、姓名不限、年龄为15~50岁、性别可输入m或f、各科成绩均限定在0~100之间),若用户录入了不合法的数据系统将会作出提示,并且要求重新输入。如果合法性成立则录入完毕后系统将显示全部学生相关信息,信息中已包含对学生成绩总分的计算和其平均分的计算结果。最后按平均分的高低输出学生的成绩和相关信息后按照提示信息存盘,选择存盘后,系统则自动将学生信息存入电脑。 # (2)读取学生信息: 此功能是将原录入并保存的学生信息读出,并在屏幕上显示出来。 # (3)删除学生信息: 进入该项功能界面后,用户可以通过学生的学号对某个学生信息进行删除。 # (4)追加学生信息: 进入插入界面,系统将提示输入新学生的相关信息,程序则会将新的信息插入原学生信息清单中,并将新的学生信息列表输出,以方便用户的确认。 # (5)修改学生信息: 进入修改界面,系统将提示输入新学生的相关信息,程序则会将新的信息插入原学生信息清单中,并将新的学生信息列表输出,以方便用户的确认。 # (6)统计各分数段人数并输出学生信息清单。 进入界面,系统将提示输入新学生的相关信息,程序则会将新的信息插入原学生信息清单中,并将新的学生信息列表输出,以方便用户的确认。 # (7)按学号查找学生信息: 此项功能可以根据拥护输入的学生学号查出该学生的所有信息。 # (8)按照平均分输出学生信息清单。 选择次项功能后,系统将自动在屏幕上显示出所有学生按照平均成绩的高低排序后的清单。 # (9)退出系统,结束任务。 3.软件功能的验收标准 (1)有较为美观简洁大方的菜单,能保证用户方便、直观、快捷的熟悉并使用软件的各项功能。 (2)有严密正确的数据验证功能和数据处理功能,能够求和、求平均成绩,对总成绩进行排序,对数据进行保存和读取,能按学号查找学生信息,以及插入和删除学生信息。 (3)系统要有一定的可靠性。
JAVA程序URL屏蔽及重定向
在用JAVA做一个非法URL屏蔽系统。想在JAVA程序中实现类似JSP页面中response.sendredirect("");功能。即假设浏览器打开网页http://bbs.tianya.cn/,自动将该网页跳转为http://www.baidu.com/ 该怎么实现? 或者,如何用JAVA实现拦截特定URL网页的功能? 补充: 目前我已经可以用JAVA实现监控数据流,实时读取正在访问网页的URL并存入数据库了。 想问下如何实现屏蔽特定URL呢?怎样在已读取该网页URL的基础上,使该网页无法显示,或者使该网页自动重定向另一个网址? 我看了一些资料,大部分是VC++环境下基于BHO的实现,可是C++的代码我实在读不懂。。 而且目前我已经进展到最后一步了,实在不想换成C++从头再来。 如果必须用C++的话,有什么封装好的,适合JAVA调用的代码可以参考呢?
objectinputstream readobject 为何只能读取第一次写入的值
public class TransEntity implements Serializable//传输信息实体封装类 { private static final long serialVersionUID = 1L; private String operaType;//用户操作类型;如发送文本消息,发送语音消息,发送音频消息 private String responseTags;//网络响应状态;如“登录成功”、“登录失败”、“注册成功”、“注册失败” private String requestTags;//网络请求标记;请求发送文本消息,语音消息,音频消息 private User sender;//发送方; private User receiver;//接收方; private ArrayList<HashMap<String,Object>> buddylist;//好友列表信息; private String time;//系统时间; private ArrayList<HashMap<String,String>> inputGeneralMsgList;//通用信息 private HashMap<String,Object> outGeneralMsgMap; private String path; public String getUserOperaType() { return operaType; } public void setUserOperaType(String operaType) { this.operaType = operaType; } public String getResponseTags() { return responseTags; } public String setResponseTags(String responseTags) { return this.responseTags = responseTags; } public void setRequestTags(String requestTags) { this.requestTags = requestTags; } public String getRequestTags() { return requestTags; } public User getSender() { return sender; } public void setSender(User sender) { this.sender = sender; } public User getReceiver() { return receiver; } public void setReceiver(User receiver) { this.receiver = receiver; } public ArrayList<HashMap<String,Object>> getList() { return buddylist; } public void setList(ArrayList<HashMap<String,Object>> buddylist) { this.buddylist = buddylist; } public String getImagePath() { return path; } public void setImagePath(String path) { this.path = path; } public void setGeneralMessagefrom(ArrayList<HashMap<String,String>> inputGeneralMsgList) { this.inputGeneralMsgList = inputGeneralMsgList; } public ArrayList<HashMap<String,String>> getGeneralMessagefrom() { return inputGeneralMsgList; } public void setGeneralMessageto(HashMap<String,Object> outGeneralMsgMap) { this.outGeneralMsgMap = outGeneralMsgMap; } public HashMap<String,Object> getGeneralMessageto() { return outGeneralMsgMap; } public void setSysTime(String time) { this.time = SysTime.getDateTime(); } public String getSysTime() { return time; } } 服务端核心代码 public class ServerThread extends Thread { private static ObjectInputStream ois = null; private static ObjectOutputStream oos = null; private ArrayList<HashMap<String,Object>> list = null; private ArrayList<HashMap<String,String>> outgeneralMsgList = null; private Socket socket = null; private TransEntity trans = null; private boolean FLAGS_IsFirstLogin = true; private boolean FLAGS_LoginSucess = false; private boolean FLAGS_RegisterSucess = false; private boolean FLAGS_OnLine = false; private User user = null; private User receiver = null; private Timer timer = new Timer(); public ServerThread(Socket socket) { this.socket = socket; try { oos = new ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } public void run() { try { while(true) { if(socket.isClosed() == false && socket.isConnected() == true) { try { if(ois!=null) { trans = (TransEntity) ois.readObject(); } } catch(java.net.SocketException e) { System.out.println("客户端已经关闭。。。。。。。"); break; } catch(ClassNotFoundException e) { System.out.println("--------空指针异常---------"); } catch(java.io.EOFException e) { System.out.println("客户端已经关闭。。。。。。。"); } } if(trans!=null) { user = trans.getSender(); receiver = trans.getReceiver(); if(trans.getUserOperaType()!=null) { System.out.println("----------trans.getUserOperaType() :------------"+(trans.getUserOperaType())); if(FLAGS_IsFirstLogin == true&&(UserOperaType.LOGIN.equals(trans.getUserOperaType()))) { //首次登录,一般情形下的客户端发过来的登录操作请求做处理,非掉线后的自动登录; System.out.println("--------server---socket :------"+(socket)); FLAGS_LoginSucess = setLogin(); } if(FLAGS_LoginSucess) { FLAGS_IsFirstLogin = false; System.out.println("----------trans.getUserOperaType() :------------"+(trans.getUserOperaType())); ......为何此次只能输出第一次读入的数据 if(UserOperaType.SEND_MESSAGE.equals(trans.getUserOperaType())) { System.out.println("-------UserOperaType.SEND_MESSAGE ---------"); System.out.println(trans.getGeneralMessageto().get("outMsg").toString()); if(trans.getGeneralMessageto()!=null)//若getGeneralMessageto()返回值不为空,则可以向数据库写入信息; { System.out.println("-------服务端:---发送方 写入普通信息到数据库,如文字消息;-----------"); SysCtlVar.dbBasicOperation.writeGeneralMessage(trans);// 发送方 写入普通信息到数据库,如文字消息; //trans.setGeneralMessageto(null); } trans.setUserOperaType(null); } oos.writeObject(trans); oos.flush(); } } } } } catch (Exception e) { e.printStackTrace(); } finally { } } } 客户端核心代码 while(SysCtlVar.FlAGS_LoginSuccess) { // System.out.println("--------------while SysCtlVar.FlAGS_LoginSuccess -------------"); try { try { SysCtlVar.trans = (TransEntity)SysCtlVar.ois.readObject(); if(SysCtlVar.inputGeneralMsgList!=null) synchronized(SysCtlVar.inputGeneralMsgList) { SysCtlVar.inputGeneralMsgList = SysCtlVar.trans.getGeneralMessagefrom(); SysCtlVar.inputGeneralMsgList.notify(); } synchronized(SysCtlVar.outGeneralMsgMap) { try { System.out.println("------- SysCtlVar.outGeneralMsgMap.wait----------"); SysCtlVar.outGeneralMsgMap.wait(); //等待直到有输入的时候,才把消息发送出去 System.out.println("---------------客户端: 正在发送消息。。。。。。------------------"); System.out.println("------- SysCtlVar.outGeneralMsgMap:----------"+(SysCtlVar.outGeneralMsgMap.get("outMsg").toString())); SysCtlVar.trans.setUserOperaType(UserOperaType.SEND_MESSAGE); SysCtlVar.trans.setGeneralMessageto(SysCtlVar.outGeneralMsgMap); System.out.println("------- SysCtlVar.trans.getGeneralMessageto():----------"+(SysCtlVar.trans.getGeneralMessageto().get("outMsg").toString())); try { SysCtlVar.oos.writeObject(SysCtlVar.trans); SysCtlVar.oos.flush(); } catch (IOException e) { e.printStackTrace(); } } catch (InterruptedException e) { e.printStackTrace(); } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (StreamCorruptedException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } 客户端 数据输入部分 /** 调试过程中,你将看到客户端输入的消息为h(第一条消息),www(第二条消息),a(第三条消息) 但是服务端只有第二条消息的值; */ //------------------发送消息 ---------- //客户端当前会话任务中,选中的消息接收者; new Thread() { public void run() { synchronized(SysCtlVar.outGeneralMsgMap) { System.out.println("------- 客户端:正在输入要发送的消息----------"); SysCtlVar.outGeneralMsgMap.clear(); SysCtlVar.outGeneralMsgMap.put("outMsg",outMsg); SysCtlVar.outGeneralMsgMap.put("msgRecver", selectedAccount); SysCtlVar.outGeneralMsgMap.put("dateTime",SysTime.getDateTime().toString()); SysCtlVar.outGeneralMsgMap.notify(); //输入完毕,通知发送任务执行 } } }.start(); 调试信息(服务器端) 服务器已启动,正在监听1345端口 ----------trans.getUserOperaType() :------------0 --------server---socket :------Socket[addr=/127.0.0.1,port=38516,localport=1345] ------- list!=null : ---------true [qq]上线了! ----------qq---------- ----------trans.getUserOperaType() :------------0 ----------trans.getUserOperaType() :------------6 ----------trans.getUserOperaType() :------------6 -------------UserOperaType.GET_AVATARS------------6 我想从服务器获取头像 ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ----------trans.getUserOperaType() :------------7 ----------trans.getUserOperaType() :------------7 -------UserOperaType.SEND_MESSAGE --------- www -------服务端:---发送方 写入普通信息到数据库,如文字消息;----------- insert into chat(sender,recver,message,sendtime) values('qq','在水一方','www','2015-04-24 16:15:13') ---------------问题补充--------------- 单步调试,客户端的输出流正确发送了每一次的客户端输入数据(36分钟前)删除 对于单步调试追踪的结果:客户端每一次发送的trans(它是TransEntity的实例,被序列化的消息实体对象)都是正确的(即,与客户端输入值相同)。但是服务端有ObjectInputStream读入的trans(它也是TransEntity的实例,被序列化的消息实体对象)却没有改变始终是第一次的值
如何移植批处理文件到linux服务器
现在有这样的需求,每天上午9点linux服务器自动将最近两天的数据导入到数据库,比如今天就是要动态读取20130723.txt,20130722.txt(昨天和今天)这两个文件,在windows服务器下已经实现了, **现在要求转移到linux服务器下,linux零基础,时间也很紧,第一次发帖求各位大神答复** 之前windows的.bat文件部分代码如下(rem表示注释): rem将最近产生的文件比如20130723.txt的内容copy到ATT_CLOCK_DATA.TXT中 **copy %date:~0,4%%date:~5,2%%date:~8,2%.txt ATT_CLOCK_DATA.TXT** rem加载控制文件ATT_CLOCK_DATA.utl读取刚刚生成的ATT_CLOCK_DATA.TXT,插入到数据库 **sqlldr url control=D:\sqlloader\ATT_CLOCK_DATA.utl parallel=true** **del ATT_CLOCK_DATA.TXT** rem 另外调用sql文件执行sql语句 **sqlplus url @D:\sqlloader\ATT_CLOCK_DATA.sql** **exit;** ps:本人一向膜拜各位大牛,奈何成不了大牛
extjs的grid渲染数据出现空白段
有个grid需要加载一百多条数据,但是显示的时候,数据总条数和数据都是正确的,但是向下滑动滚动条,每隔47行就会出现一段空白,向下滑过空白段之后,再向上滑动滚动条时,空白段又会出现在36行。。。网上搜不到资料,有没有人遇到过相同的问题?或者能给我一些提示的?在线等,谢谢! ![图片说明](https://img-ask.csdn.net/upload/201611/14/1479104443_960218.png) 补充代码: //grid定义 xtype: 'grid', id:'thirdPartyOrderListGrid', width: '100%', height: 415, viewConfig:{ enableTextSelection : true, getRowClass:function(record, index, rowParams, store){ return record.get('flag')=='1'?"child-row":""; } }, listeners:{ itemdblclick:function(dataview,record, item, index, e){ var win = Ext.widget("thirdPartyOrderHandEditWin"); win.down("form").loadRecord(record); win.show(); } }, autoRender:true, columnLines: true, loadMask: true, //读取数据时的遮罩和提示功能即加载loding... resizable: true, forceFit: false, collapsible:false, titleCollapse:false, selModel : new Ext.selection.CheckboxModel(), plugins:[ Ext.create('Ext.grid.plugin.CellEditing',{ clicksToEdit:2 //设置单击单元格双击编辑 }) ], store: Ext.create('Ext.data.Store', { fields:[{ name : 'flag' },{ name : 'errorMsg' },{ name : 'orderId' },{ name : 'skuId' },{ name : 'iid' } ··· ] }), columns : { items:[ { text:'序号',xtype: 'rownumberer',width: 50}, { text: 'flag',dataIndex: 'flag',width: 150,align: 'center',hidden:true}, { text: '错误信息',dataIndex: 'errorMsg',width: 150,align: 'center', renderer: function(value, meta, record) {//超长自动换行 meta.style = 'overflow:auto;padding: 3px 6px;text-overflow: ellipsis;white-space: nowrap;white-space:normal;line-height:20px;'; return value; } }, { text: '订单编号',dataIndex: 'orderId',width: 150,align: 'center'}, { text: '平台商品码',dataIndex: 'skuId',width: 150,align: 'center'}, { text: '平台商品款码',dataIndex: 'iid',width: 150,align: 'center'}, ··· ], defaults: { align: 'center', sortable:false, menuDisabled : true } }, dockedItems : [{ ··· }] }] //grid的赋值 form.submit( { waitMsg : '请稍等.....', url : basePath + '···.spmvc', method : 'post', timeout:600000, params : formValues, success : function(form,action) { win.close(); result = action.result; var batchList = result.batchList; console.dir(batchList); var store = Ext.getCmp('thirdPartyOrderListGrid').store; store.add(batchList); }, failure : function(form,action) { Ext.Msg.alert('执行结果', action.result.msg); } }); 部分用省略号代替了,从代码上看不出什么问题···
基于单片机STC15W401AS的nRF24L01无线通信无法调通
# 这是发送部分的程序和接收部分 ``` #include<STC15F2K60S2.h> #include"global_define.h" #include"NRF24L01.h" #include"Delay.h" sbit CE=P5^5; //RX/TX模式选择端 sbit IRQ=P3^7; //可屏蔽中断端 sbit CSN=P5^4; //SPI片选端//就是SS sbit MOSI=P1^3; //SPI主机输出从机输入端 sbit MISO=P1^4; //SPI主机输出从机输出端 sbit SCLK=P1^5; //SPI时钟端 uchar code TxAddr[]={0x34,0x43,0x10,0x10,0x01};//发送地址 /*****************状态标志*****************************************/ uchar bdata sta; //状态标志 sbit RX_DR=sta^6; sbit TX_DS=sta^5; sbit MAX_RT=sta^4; /*****************SPI时序函数******************************************/ uchar NRFSPI(uchar date) { uchar i; for(i=0;i<8;i++) // 循环8次 { if(date&0x80) MOSI=1; else MOSI=0; // byte最高位输出到MOSI date<<=1; // 低一位移位到最高位 SCLK=1; if(MISO) // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据 date|=0x01; // 读MISO到byte最低位 SCLK=0; // SCK置低 } return(date); // 返回读出的一字节 } /**********************NRF24L01初始化函数*******************************/ void NRF24L01Int() { Delay(2);//让系统什么都不干 CE=0; //待机模式1 CSN=1; SCLK=0; IRQ=1; } /*****************SPI读寄存器一字节函数*********************************/ uchar NRFReadReg(uchar RegAddr) { uchar BackDate; CSN=0;//启动时序 NRFSPI(RegAddr);//写寄存器地址 BackDate=NRFSPI(0x00);//写入读寄存器指令 CSN=1; return(BackDate); //返回状态 } /*****************SPI写寄存器一字节函数*********************************/ uchar NRFWriteReg(uchar RegAddr,uchar date) { uchar BackDate; CSN=0;//启动时序 BackDate=NRFSPI(RegAddr);//写入地址 NRFSPI(date);//写入值 CSN=1; return(BackDate); } /*****************SPI读取RXFIFO寄存器的值********************************/ uchar NRFReadRxDate(uchar RegAddr,uchar *RxDate,uchar DateLen) { //寄存器地址//读取数据存放变量//读取数据长度//用于接收 uchar BackDate,i; CSN=0;//启动时序 BackDate=NRFSPI(RegAddr);//写入要读取的寄存器地址 for(i=0;i<DateLen;i++) //读取数据 { RxDate[i]=NRFSPI(0); } CSN=1; return(BackDate); } /*****************SPI写入TXFIFO寄存器的值**********************************/ uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen) { //寄存器地址//写入数据存放变量//读取数据长度//用于发送 uchar BackDate,i; CSN=0; BackDate=NRFSPI(RegAddr);//写入要写入寄存器的地址 for(i=0;i<DateLen;i++)//写入数据 { NRFSPI(*TxDate++); } CSN=1; return(BackDate); } /*****************NRF设置为发送模式并发送数据******************************/ void NRFSetTxMode(uchar *TxDate) {//发送模式 CE=0; NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);//写寄存器指令+接收地址使能指令+接收地址+地址宽度 NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);//为了应答接收设备,接收通道0地址和发送地址相同 NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);//写入数据 /******下面有关寄存器配置**************/ NRFWriteReg(W_REGISTER+EN_AA,0x01); // 使能接收通道0自动应答 NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); // 使能接收通道0 NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a); // 自动重发延时等待250us+86us,自动重发10次 NRFWriteReg(W_REGISTER+RF_CH,0x40); // 选择射频通道0x40 NRFWriteReg(W_REGISTER+RF_SETUP,0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益 NRFWriteReg(W_REGISTER+CONFIG,0x0e); // CRC使能,16位CRC校验,上电 CE=1; Delay(5);//保持10us秒以上 } /*****************NRF设置为接收模式并接收数据******************************/ //主要接收模式 void NRFSetRXMode() { CE=0; NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH); // 接收设备接收通道0使用和发送设备相同的发送地址 NRFWriteReg(W_REGISTER+EN_AA,0x01); // 使能接收通道0自动应答 NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); // 使能接收通道0 NRFWriteReg(W_REGISTER+RF_CH,0x40); // 选择射频通道0x40 NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH); // 接收通道0选择和发送通道相同有效数据宽度 NRFWriteReg(W_REGISTER+RF_SETUP,0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益*/ NRFWriteReg(W_REGISTER+CONFIG,0x0f); // CRC使能,16位CRC校验,上电,接收模式 CE = 1; Delay(5);//保持10us秒以上 } /****************************检测应答信号******************************/ uchar CheckACK() { //用于发射 sta=NRFReadReg(R_REGISTER+STATUS); // 返回状态寄存器 if(TX_DS||MAX_RT) //发送完毕中断 { NRFWriteReg(W_REGISTER+STATUS,0xff); // 清除TX_DS或MAX_RT中断标志 CSN=0; NRFSPI(FLUSH_TX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!! CSN=1; return(0); } else return(1); } /******************判断是否接收收到数据,接到就从RX取出*********************/ //用于接收模式 /*uchar NRFRevDate(uchar *RevDate) { uchar RevFlags=0; sta=NRFReadReg(R_REGISTER+STATUS);//发送数据后读取状态寄存器 if(RX_DR) // 判断是否接收到数据 { CE=0; //SPI使能 NRFReadRxDate(R_RX_PAYLOAD,RevDate,RX_DATA_WITDH);// 从RXFIFO读取数据 RevFlags=1; //读取数据完成标志 } NRFWriteReg(W_REGISTER+STATUS,0xff); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标 return(RevFlags); }*/ # 下面是接收部分 #include<STC15F2K60S2.h> #include"global_define.h" #include"NRF24L01.h" #include"Delay.h" sbit CE=P5^5; //RX/TX模式选择端 sbit IRQ=P3^7; //可屏蔽中断端 sbit CSN=P5^4; //SPI片选端//就是SS sbit MOSI=P1^3; //SPI主机输出从机输入端 sbit MISO=P1^4; //SPI主机输出从机输出端 sbit SCLK=P1^5; //SPI时钟端 uchar RevTempDate[32]; //最后一位用来存放结束标志 uchar code TxAddr[]={0x34,0x43,0x10,0x10,0x01};//发送地址 /*****************状态标志*****************************************/ uchar bdata sta; //状态标志 sbit RX_DR=sta^6; sbit TX_DS=sta^5; sbit MAX_RT=sta^4; /*****************SPI时序函数******************************************/ uchar NRFSPI(uchar date) { uchar i; for(i=0;i<8;i++) // 循环8次 { if(date&0x80) MOSI=1; else MOSI=0; // byte最高位输出到MOSI date<<=1; // 低一位移位到最高位 SCLK=1; if(MISO) // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据 date|=0x01; // 读MISO到byte最低位 SCLK=0; // SCK置低 } return(date); // 返回读出的一字节 } /**********************NRF24L01初始化函数*******************************/ void NRF24L01Int() { Delay(2);//让系统什么都不干 CE=0; //待机模式1 CSN=1; SCLK=0; IRQ=1; } /*****************SPI读寄存器一字节函数*********************************/ uchar NRFReadReg(uchar RegAddr) { uchar BackDate; CSN=0;//启动时序 NRFSPI(RegAddr);//写寄存器地址 BackDate=NRFSPI(0x00);//写入读寄存器指令 CSN=1; return(BackDate); //返回状态 } /*****************SPI写寄存器一字节函数*********************************/ uchar NRFWriteReg(uchar RegAddr,uchar date) { uchar BackDate; CSN=0;//启动时序 BackDate=NRFSPI(RegAddr);//写入地址 NRFSPI(date);//写入值 CSN=1; return(BackDate); } /*****************SPI读取RXFIFO寄存器的值********************************/ uchar NRFReadRxDate(uchar RegAddr,uchar *RxDate,uchar DateLen) { //寄存器地址//读取数据存放变量//读取数据长度//用于接收 uchar BackDate,i; CSN=0;//启动时序 BackDate=NRFSPI(RegAddr);//写入要读取的寄存器地址 for(i=0;i<DateLen;i++) //读取数据 { RxDate[i]=NRFSPI(0); } CSN=1; return(BackDate); } /*****************SPI写入TXFIFO寄存器的值**********************************/ uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen) { //寄存器地址//写入数据存放变量//读取数据长度//用于发送 uchar BackDate,i; CSN=0; BackDate=NRFSPI(RegAddr);//写入要写入寄存器的地址 for(i=0;i<DateLen;i++)//写入数据 { NRFSPI(*TxDate++); } CSN=1; return(BackDate); } /*****************NRF设置为发送模式并发送数据******************************/ void NRFSetTxMode(uchar *TxDate) {//发送模式 CE=0; NRFWriteTxDate(W_REGISTER+TX_ADDR,TxAddr,TX_ADDR_WITDH);//写寄存器指令+接收地址使能指令+接收地址+地址宽度 NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);//为了应答接收设备,接收通道0地址和发送地址相同 NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WITDH);//写入数据 /******下面有关寄存器配置**************/ NRFWriteReg(W_REGISTER+EN_AA,0x01); // 使能接收通道0自动应答 NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); // 使能接收通道0 NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a); // 自动重发延时等待250us+86us,自动重发10次 NRFWriteReg(W_REGISTER+RF_CH,0x40); // 选择射频通道0x40 NRFWriteReg(W_REGISTER+RF_SETUP,0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益 NRFWriteReg(W_REGISTER+CONFIG,0x0e); // CRC使能,16位CRC校验,上电 CE=1; Delay(5);//保持10us秒以上 } /*****************NRF设置为接收模式并接收数据******************************/ //主要接收模式 void NRFSetRXMode() { CE=0; NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH); // 接收设备接收通道0使用和发送设备相同的发送地址 NRFWriteReg(W_REGISTER+EN_AA,0x01); // 使能接收通道0自动应答 NRFWriteReg(W_REGISTER+EN_RXADDR,0x01); // 使能接收通道0 NRFWriteReg(W_REGISTER+RF_CH,0x40); // 选择射频通道0x40 NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH); // 接收通道0选择和发送通道相同有效数据宽度 NRFWriteReg(W_REGISTER+RF_SETUP,0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益*/ NRFWriteReg(W_REGISTER+CONFIG,0x0f); // CRC使能,16位CRC校验,上电,接收模式 CE = 1; Delay(5);//保持10us秒以上 } /****************************检测是否有接收到数据******************************/ void CheckACK() { //用于发射模式接收应答信号 sta=NRFReadReg(R_REGISTER+STATUS); // 返回状态寄存器 if(TX_DS) NRFWriteReg(W_REGISTER+STATUS,0xff); // 清除TX_DS或MAX_RT中断标志 } /*************************接收数据*********************************************/ void GetDate() { sta=NRFReadReg(R_REGISTER+STATUS);//发送数据后读取状态寄存器 if(RX_DR) // 判断是否接收到数据 { CE=0;//待机 NRFReadRxDate(R_RX_PAYLOAD,RevTempDate,RX_DATA_WITDH);// 从RXFIFO读取数据 接收4位即可,后一位位结束位 // LcdWriteChStr(2,65,RevTempDate);//LCD12864液晶显示 // MAX232SendDate();//发送数据到上位机 NRFWriteReg(W_REGISTER+STATUS,0xff); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标 CSN=0; NRFSPI(FLUSH_RX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!! CSN=1; } //NRFWriteReg(W_REGISTER+STATUS,0xff); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标 } # keil运行时没有错误的,接收端与单片机串口也是通的,波特率115200, # IRC18.432MHz,可是在接收端的串口始终读不到数,搞了好久了还是没办法 # 技术小白求大神指点 ```
c语言数据结构 表达式求值
**目的:1)掌握栈的概念与基本操作; 2)掌握文本文件的读写操作。 要求:实现任意加、减、乘、除与括号的表达式求值; 输入输出格式要求如下: 输入文件input.txt内容: 2*(4-100)= 3*5+9/3= 100-20*(4*6/3)= 输出文件output.txt内容(output.txt文件为自动生成,若已存在则覆盖): 2*(4-100)=-192 3*5+9/3=18 100-20*(4*6/3)=-60** 求大神帮帮咯 代码如下,就是不会写文件那部分: #include <stdio.h> #include <stdlib.h> #define MAX 20 //定义第一个栈---作为存放运算数的操作符 struct SNode_Num { int datas[MAX]; int top; }; typedef struct SNode_Num OperateNum; //定义第二个栈---作为存放运算符号的栈 struct SNode_Symbol { char symbol[MAX]; int top; }; typedef struct SNode_Symbol OperateSymbol; /******************************************************************** 描述:定义函数:InitOperandNum,并且初始化运算数栈顶 参数:OperateNum *StackNum 返回值:void ********************************************************************/ void InitOperateNum(OperateNum *StackNum) { StackNum->top = -1; } /******************************************************************** 描述:定义函数: InitOperateSymbol,并且初始化运算符栈顶 参数:OperateSymbol *StackSymbol 返回值:void ********************************************************************/ void InitOperateSymbol(OperateSymbol *StackSymbol) { StackSymbol->top = -1; } /******************************************************************** 描述:定义函数:PushOperateNum, 压一个数到栈顶 参数:OperateNum *StackNum, int x 返回值:void ********************************************************************/ void PushOperateNum(OperateNum *StackNum, int x) { StackNum->top++; StackNum->datas[StackNum->top] = x; } /******************************************************************** 描述:定义函数:PushOperateSymbol,压一个运算符到栈顶 参数:OperateSymbol *StackSymbol, char ch 返回值:void ********************************************************************/ void PushOperateSymbol(OperateSymbol *StackSymbol, char ch) { StackSymbol->top++; StackSymbol->symbol[StackSymbol->top] = ch; } /******************************************************************** 描述:定义函数:PopOperateNum,将运算数从栈中读取出来 参数:OperateNum *StackNum 返回值:返回取出来的数 ********************************************************************/ int PopOperateNum(OperateNum *StackNum) { int num; num = StackNum->datas[StackNum->top]; StackNum->top--; return num; } /******************************************************************** 描述:定义函数:PopOperateSymbol,将运算符从栈中取出来 参数:OperateSymbol *StackSymbol 返回值:返回取出来的符号 ********************************************************************/ char PopOperateSymbol(OperateSymbol *StackSymbol) { char ch; ch = StackSymbol->symbol[StackSymbol->top]; StackSymbol->top--; return ch; } //取出相应的数 int GetOperateNum(OperateNum *StackNum) { return StackNum->datas[StackNum->top]; } //取出相应运算符 char GetOperateSymbol(OperateSymbol *StackSymbol) { return StackSymbol->symbol[StackSymbol->top]; } /******************************************************************** 描述:定义函数, IsOperateSymbolOrNum,判断输入的符号是那些符号 参数:char ch 返回值:有符号返回1,无符号返回0 ********************************************************************/ short IsOperateSymbolOrNum(char ch) { //判断所有需要用的操作符 包括 + - * / ( ) \n if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')' || ch == '\n') return 1; else return 0; } /******************************************************************** 描述:定义函数: Priority,用于判断符号优先级运算 参数:char inputnum, char ch 返回值:符号的大小的字符 ********************************************************************/ char Priority(char inputnum, char ch) { switch(inputnum) { //加减在同一个优先级上 case '+': case '-': { if(ch == '+' || ch == '-') return '>'; else if(ch == '*' || ch == '/') return '<'; else if(ch == '(') return '<'; else if(ch == ')') return '>'; else return '>'; } break; //乘除在同一优先级 case '*': case '/': { if(ch == '+' || ch == '-') return '>'; else if(ch == '*' || ch == '/') return '>'; else if(ch == '(') return '<'; else if(ch == ')') return '>'; else return '>'; } break; //括号在所有优先级以上 case '(': { if(ch == ')') return '='; else return '<'; } break; case ')': { return '>'; } break; case '\n': { if(ch == '\n') return '='; else return '<'; } break; } } /******************************************************************** 描述:定义函数: Calculate,计算结果 参数:int num1, char ch, int num2 返回值:返回两个数计算的结果result ********************************************************************/ int Calculate(int num1, char ch, int num2) { int result; switch(ch) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; } return result; } /******************************************************************** 描述:定义函数:MainCalc,主要用于获取用户输入,并且进行计算 参数:void 返回值:result ********************************************************************/ int MainCalc() { //主函数进行计算 OperateNum datas; OperateSymbol symbol; int num1, num2, result, num; char ch, sign; InitOperateNum(&datas); InitOperateSymbol(&symbol); //把回车计算的操作符放在栈中 PushOperateSymbol(&symbol, '\n'); ch = getchar(); while((ch != '\n') || (GetOperateSymbol(&symbol) != '\n')) { if(!IsOperateSymbolOrNum(ch)) { num = atoi(&ch); //将字符转换为整数 ch = getchar(); //获取输入 while(!IsOperateSymbolOrNum(ch)) { num = num * 10 + atoi(&ch); ch = getchar(); //当没有输入回车时,继续获取输入 } PushOperateNum(&datas, num); } else { switch(Priority(GetOperateSymbol(&symbol), ch)) { //判断优先级后进行计算 case '<': PushOperateSymbol(&symbol, ch); ch = getchar(); break; case '=': sign = PopOperateSymbol(&symbol); ch = getchar(); //获取输入 break; case '>': sign = PopOperateSymbol(&symbol); num2 = PopOperateNum(&datas); num1 = PopOperateNum(&datas); result = Calculate(num1, sign, num2); PushOperateNum(&datas, result); break; } } } result = GetOperateNum(&datas); return result; } int main(int argc, char *argv[]) { int result; printf("请输入运算式:\n"); result = MainCalc(); printf("结果为:\n"); printf("%d\n", result); //输出结果 return 0; }
0xC0000005: 写入位置 0x0000001C 时发生访问冲突。越界错误但是找不到在哪里
断点调试停在switch语句的p1部分,显示p1内存无法读取 ``` 插入不了图片。。。。 请大佬帮忙看看 #include<stdio.h> #include<string.h> #include<stdlib.h> /*定义单向链表类型StuLink,链表结点包含xh、xm、cj、dj、mc、nxet六个数据项 分别代表学生的学号、姓名、成绩、等级、名次和指向下一个结点的指针, 其中:学号、姓名、成绩是输入项,等级、名次是计算项*/ ``` ``` struct StuLink { int xh; char xm[20]; int cj; char dj; int mc; struct StuLink*next; }; ``` ``` /* Creat_Link函数(10分):建立一个StuLink类型的学生链表,返回链表头指针 每个链表结点代表一个学生信息,要求输入学号、姓名和成绩 其中:学号从1开始按递增1自动生成,成绩必须在[0,100]区间的整数,当输入成绩为-1时,表示输入结束*/ struct StuLink*Creat_Link() { struct StuLink*list=0,*p1=0,*p2;int i=1; int score;char name[20]; //list->xh =0;p2=list; printf("\n输入成绩为-1,结束输入!\n"); printf("请输入学生姓名\n"); scanf("%s",name); printf("请输入学生成绩\n"); scanf("%d",&score ); while(score!=-1) { if(score<0||score>100) { printf("输入成绩格式错误,请重新输入正确的学生成绩\n"); scanf("%d",&score ); if( (p1=(struct StuLink*)malloc(sizeof(struct StuLink))) ==0) { printf("动态内存空间分配失败\n"); exit(0); } } else { switch(score/10) { case 9:p1->dj='A';break; //计算等级 case 8:p1->dj='B';break; case 7:p1->dj='C';break; case 6:p1->dj='D';break; default:p1->dj='E'; } i++; p1->xh =i; p1->cj =score; strcpy(p1->xm,name); if(list==0) list=p1; else p2->next=p1; p2=p1; printf("请输入学生姓名 "); scanf("%s",name); printf("请输入学生成绩 "); scanf("%d",&score); } } return list; } ``` ```int main() { menu1(); Creat_Link (); }
BluetoothGattCallback重复回调
这是概率很低的问题,每次复现这个问题的情况都不太一样,我也还没搞清楚为什么会出现这种问题。 上一次出现这个问题的情况是: 在这次连接之前也有重复连接/断开其他蓝牙设备,最后一次连接蓝牙设备时,蓝牙端显示已连接上,但app端还没收到回调,过了一阵子,onConnectionStateChange才收到回调,接着又自动断开重连,于是,问题就出现了。 当出现这个问题时,BluetoothGattCallback里面的每一个方法断开、连接、发现服务、接收数据等都会重复接收,所以判断是BluetoothGattCallback重复了,但我看了后台服务,确实是只有一个服务; 排除是蓝牙端的问题,因为换蓝牙或者蓝牙关机等都只要APP不重启这个问题依旧在。 所以,应该是还有一个BluetoothGattCallback的对象存在。 那么,有哪些原因可能会导致这种情况呢?如果出现这种情况该怎么解决?比如有没有什么方法可以列出所有的BluetoothGattCallback,然后close其他的BluetoothGattCallback对象,只保留一个? 这是连接部分的代码,这些都是在后台service中执行的 ``` public boolean connect(final String address) { if (mBluetoothAdapter == null) { return false; } if (address == null) { return false; } connectAdress = address; if (mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress) && mBluetoothGatt!=null) { if (mBluetoothGatt.connect()) { mConnectionState = STATE_CONNECTING; return true; } else { return false; } } final BluetoothDevice deivce = mBluetoothAdapter.getRemoteDevice(address); if (deivce == null) { Log.e(TAG, "connect: Device not found. unable to connect." ); return false; } mBluetoothGatt = deivce.connectGatt(this, true, mGattCallback); mBluetoothDeviceAddress = address; mConnectionState = STATE_CONNECTING; return true; } // @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) public void disconnect() { if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.e(TAG, "disconnect: BluetoothAdapter not initialized" ); return; } is_click_disconnect = true; VERTICAL_DISCOVER_FLAG = 0; LEVEL_DISCOVER_FLAG = 0; current_connecting_mac_address = ""; mBluetoothGatt.disconnect(); stopSelf(); } ``` 然后这是回调部分的代码, ``` private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { /** * 连接状态改变 * @param gatt * @param status * @param newState */ // @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { // super.onConnectionStateChange(gatt, status, newState); String intentAction; if (newState == BluetoothProfile.STATE_CONNECTED) { intentAction = ACTION_GATT_CONNECTED; mConnectionState = STATE_CONNECTED; broadcastUpdate(intentAction); BleMessage message = new BleMessage(); message.setAction(ACTION_GATT_CONNECTED); message.setConnectState(STATE_CONNECTED); // 连接成功 } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { intentAction = ACTION_GATT_DISCONNECTED; mConnectionState = STAAE_DISCONNECTED; VERTICAL_DISCOVER_FLAG = 0; LEVEL_DISCOVER_FLAG = 0; Log.e(TAG, "vitec 蓝牙断开连接onConnectionStateChange: Disconnect from gatt server" ); broadcastUpdate(intentAction); textToSpeechHelper.speakChinese("蓝牙连接断开"); //当手动断开连接,关闭mBluetoothGatt if (is_click_disconnect) { mBluetoothGatt.close(); mBluetoothGatt = null; is_click_disconnect = false; } } } /** * 发现服务 * @param gatt * @param status */ @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED); enableTXNotification(SYSTEM_RX_SERVICE_UUID, SYSTEM_TX_CHAR_UUID); } /** * 读取特征值 * @param gatt * @param characteristic * @param status */ // @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) @Override public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic); Log.e(TAG, "onCharacteristicRead: 当前读取到的特征值为:"+ new String(characteristic.getValue())); } } /** * 写入特征值 * @param gatt * @param characteristic * @param status */ @Override public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { super.onCharacteristicWrite(gatt, characteristic, status); } /** * * @param gatt * @param characteristic */ // @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) @Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { broadcastUpdate(ACTION_DATA_AVAILABLE,characteristic); } }; ```
maven构建多模块SSH项目配置文件的问题
<p>1、使用maven做为项目构建工具,创建studio、common、oa、system四个模块项目,其中studio为父模块,common为数据库操作模块、Oa 和system为业务模块。common 配置了spring 集成hibernate的基本配置文件common-spring.xml。现在需要在oa模块中建立一个实体类user和user.hbm.xml,请问oa中的oa_spring如何配置,common中如何读取user.hbm.xml?</p> <p>我的common_spring.xml内容如下:</p> <p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;beans xmlns="http://www.springframework.org/schema/beans"<br>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"<br>    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"<br>    xmlns:context="http://www.springframework.org/schema/context"<br>    xsi:schemaLocation="<br>     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd<br>     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd<br>     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd<br>     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd<br>     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"<br>    default-autowire="byName"&gt;<br>    &lt;!-- enable component scanning (beware that this does not enable mapper <br>        scanning!) --&gt;<br>    &lt;context:component-scan base-package="com.huadainfo.com.dao" /&gt;<br>    &lt;context:component-scan base-package="com.huadainfo.com.dao.impl" /&gt;<br>    &lt;bean<br>        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;<br>        &lt;property name="locations" value="classpath:datasource.properties" /&gt;<br>    &lt;/bean&gt;<br><br>    &lt;!-- 数据源配置 --&gt;<br>    &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"<br>        destroy-method="close"&gt;<br>        &lt;property name="driverClassName" value="${jdbc.driverClassName}"&gt;&lt;/property&gt;<br>        &lt;property name="url" value="${jdbc.url}"&gt;&lt;/property&gt;<br>        &lt;property name="username" value="${jdbc.username}"&gt;&lt;/property&gt;<br>        &lt;property name="password" value="${jdbc.password}"&gt;&lt;/property&gt;<br>        &lt;property name="initialSize" value="10"&gt;&lt;/property&gt;<br>        &lt;property name="maxActive" value="1000"&gt;&lt;/property&gt;<br>        &lt;property name="maxIdle" value="300"&gt;&lt;/property&gt;<br>        &lt;property name="minIdle" value="10"&gt;&lt;/property&gt;<br>        &lt;property name="maxWait" value="10000"&gt;&lt;/property&gt;<br>        &lt;property name="removeAbandoned" value="true" /&gt;<br>        &lt;property name="removeAbandonedTimeout" value="60"/&gt;<br>        &lt;property name="logAbandoned" value="true" /&gt;<br>        &lt;property name="testOnBorrow" value="true"/&gt; <br>           &lt;property name="testWhileIdle" value="true"/&gt; <br>           &lt;property name="validationQuery" value="select getdate()"/&gt; <br>    &lt;/bean&gt;<br><br>    &lt;bean id="sessionFactory"<br>        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&gt;<br>        &lt;property name="dataSource" ref="dataSource" /&gt;<br>        &lt;property name="hibernateProperties"&gt;<br>            &lt;props&gt;<br>                &lt;!-- 指定Hibernate的连接方言 --&gt;<br>                &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.Oracle10gDialect&lt;/prop&gt;<br>                &lt;!-- 配置启动应用时,是否根据Hibernate映射自动创建数据表 --&gt;<br>                &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;<br>                &lt;prop key="hibernate.format_sql"&gt;true&lt;/prop&gt;<br>                &lt;prop key="hibernate.current_session_context_class"&gt;org.springframework.orm.hibernate4.SpringSessionContext<br>                &lt;/prop&gt;<br>                &lt;prop key="hibernate.cache.provider_class"&gt;net.sf.ehcache.hibernate.EhCacheProvider&lt;/prop&gt;<br>                &lt;prop key="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory<br>                &lt;/prop&gt;<br>            &lt;/props&gt;<br>            <br>        &lt;/property&gt;<br>       <span style="text-decoration: underline;"><span style="background-color: #ff0000;"> &lt;property name="mappingResources"&gt;<br>            &lt;list&gt;<br>                &lt;value&gt;classpath*:com/huadainfo/entity/*.hbm.xml&lt;/value&gt;<br>            &lt;/list&gt;<br>        &lt;/property&gt;</span></span>这部分该怎么写<br>        <br>    &lt;/bean&gt;<br>        &lt;!-- A transaction manager for working with Hibernate SessionFactories --&gt;<br>    &lt;bean id="transactionManager"<br>        class="org.springframework.orm.hibernate4.HibernateTransactionManager"&gt;<br>        &lt;property name="sessionFactory" ref="sessionFactory" /&gt;<br>    &lt;/bean&gt;<br>    &lt;!-- 配置事务的传播特性 --&gt;<br>    &lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt;<br>        &lt;tx:attributes&gt;<br>            &lt;tx:method name="add*" propagation="REQUIRED" read-only="false" /&gt;<br>            &lt;tx:method name="delete*" propagation="REQUIRED" read-only="false" /&gt;<br>            &lt;tx:method name="update*" propagation="REQUIRED" read-only="false" /&gt;<br>            &lt;tx:method name="save*" propagation="REQUIRED" read-only="false" /&gt;<br>            &lt;tx:method name="*" read-only="true" /&gt;<br>        &lt;/tx:attributes&gt;<br>    &lt;/tx:advice&gt;<br>    &lt;!-- 那些类的哪些方法参与事务 --&gt;<br>    &lt;aop:config&gt;<br>        &lt;aop:pointcut id="allManagerMethod"<br>            expression="execution(public * com.huadainfo.common.dao.impl.*.*(..))" /&gt;<br>        &lt;aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" /&gt;<br>    &lt;/aop:config&gt;<br>    &lt;context:component-scan base-package="com.huadainfo.common.dao" /&gt;<br>    &lt;context:component-scan base-package="com.huadainfo.common.dao.impl" /&gt;<br>    &lt;bean id="hiberDao" class="com.huadainfo.common.dao.impl.HibernateDaoImpl"&gt;<br>        &lt;property name="sessionFactory" ref="sessionFactory"&gt;&lt;/property&gt;<br>    &lt;/bean&gt;<br>&lt;/beans&gt;</p> <p>oa_spring.xml的内容&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;beans xmlns="http://www.springframework.org/schema/beans"<br>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"<br>    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"<br>    xmlns:context="http://www.springframework.org/schema/context"<br>    xsi:schemaLocation="<br>     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd<br>     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd<br>     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd<br>     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd<br>     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"&gt;<br>    &lt;!-- enable component scanning (beware that this does not enable mapper <br>        scanning!) --&gt;<br>   <span style="text-decoration: underline;"><span style="background-color: #ff0000;"> &lt;import resource="classpath*:common_spring.xml"/&gt;</span></span>(引入不到文件)<br>    &lt;bean id="tset" class="com.huadainfo.oa.service.impl.TestNameimpl"&gt;<br>        &lt;property name="hiberDao" ref="hiberDao"&gt;&lt;/property&gt;<br>    &lt;/bean&gt;<br>    <br>&lt;/beans&gt;</p> <p> </p>
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
活到老,学到老,程序员也该如此
全文共2763字,预计学习时长8分钟 图片来源:Pixabay 此前,“网传阿里巴巴要求尽快实现P8全员35周岁以内”的消息闹得沸沸扬扬。虽然很快被阿里辟谣,但苍蝇不叮无缝的蛋,无蜜不招彩蝶蜂。消息从何而来?真相究竟怎样?我们无从而知。我们只知道一个事实:不知从何时开始,程序猿也被划在了“吃青春饭”行业之列。 饱受“996ICU”摧残后,好不容易“头秃了变强了”,即将步入为“高...
Vue快速实现通用表单验证
本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
Java 数据持久化系列之JDBC
前段时间小冰在工作中遇到了一系列关于数据持久化的问题,在排查问题时发现自己对 Java 后端的数据持久化框架的原理都不太了解,只有不断试错,因此走了很多弯路。于是下定决心,集中精力学习了持久化相关框架的原理和实现,总结出这个系列。 上图是我根据相关源码和网上资料总结的有关 Java 数据持久化的架构图(只代表本人想法,如有问题,欢迎留言指出)。最下层就是今天要讲的 JDBC,上一层是数据库连接池...
高性能分布式缓存的设计原理
又是一个没有开工红包的公司!!! 问题分析 通过以上对话,各位是否能够猜到所有缓存穿透的原因呢?回答之前我们先来看一下缓存策略的具体代码 缓存服务器IP=hash(key)%服务器数量 这里还要多说一句,key的取值可以根据具体业务具体设计。比如,我想要做负载均衡,key可以为调用方的服务器IP;获取用户信息,key可以为用户ID;等等。 在服务器数量不变的情况下,以上设计没有问题。但是...
带你涨姿势的认识一下 Kafka 消费者
之前我们介绍过了 Kafka 整体架构,Kafka 生产者,Kafka 生产的消息最终流向哪里呢?当然是需要消费了,要不只产生一系列数据没有任何作用啊,如果把 Kafka 比作餐厅的话,那么生产者就是厨师的角色,消费者就是客人,只有厨师的话,那么炒出来的菜没有人吃也没有意义,如果只有客人没有厨师的话,谁会去这个店吃饭呢?!所以如果你看完前面的文章意犹未尽的话,可以继续让你爽一爽。如果你没看过前面的...
小白学 Python 爬虫(5):前置准备(四)数据库基础
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 本篇文章,我们接着介绍基础内容,数据库。 爬虫将数据爬取完成后,总要有地方存放吧,这个数据存在哪里呢? ...
阿里P8数据架构师:顶级开发者都在用什么数据库?
其实从去年已经隐隐约约感觉到数据库的有变化,只是没有想到变得这么快。今年的一些事情实实在在地给了某些数据库重击,如果以前去某数据库还是喊喊,然后该用还用,今年从传统领域刮起的去某数据库的风,已经开始了,并且后面的乌云密布也看得见。 最近看一篇国外的开源产品提供厂商的一篇文字,主要是在询问了他的几百位客户后得出了下图中的2019年数据库的使用趋势。 从图中可以看出,MySQL以38.9...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
互联网公司分布式系统架构演进之路
介绍 分布式和集群的概念经常被搞混,现在一句话让你明白两者的区别。 分布式:一个业务拆分成多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上 例如:电商系统可以拆分成商品,订单,用户等子系统。这就是分布式,而为了应对并发,同时部署好几个用户系统,这就是集群 1 单应用架构 2 应用服务器和数据库服务器分离 单机负载越来越来,所以要将应用服务器和数据库服务器分离 3 应用服务...
为什么你的高效交付,却没有好的业务成果?
作者| 彭鑫(公亮) 出品|阿里巴巴新零售淘系技术部 11月中旬,作者在 TOP 100 案例和人人都是产品经理的两次大会上分别进行了两场关于价值交付的分享,结合分享后的反馈焦点,立足业务整体交付的价值最大化,特产此文。 持续需求交付的痛点 ▶没有价值的交付等于没有交付 随着敏捷方法的普及,越来越多的团队引入了敏捷以推动业务的快速迭代、小步快跑、及时的响应市场变化。在各种敏捷框架...
快速搭建 SpringCloud 微服务开发环境的脚手架
本文适合有 SpringBoot 和 SpringCloud 基础知识的人群,跟着本文可使用和快速搭建 SpringCloud 项目。本文作者:HelloGitHub-秦...
JavaScript 中, 5 种增加代码可读性的最佳实践
作者:Milos Protic 译者:前端小智 来源:blog.risingstack 为了保证的可读性,本文采用意译而非直译。 简介 如果咱们关注代码本身结构及可读笥,而不是只关心它是否能工作,那么咱们写代码是有一定的水准。专业开发人员将为未来的自己和“其他人”编写代码,而不仅仅只编写能应付当前工作的代码。 在此基础上,可读性高的代码可以定义为自解释的、易于人理解的、易于更改...
Java 9 ← 2017,2019 → Java 13 ,来看看Java两年来的变化
距离 2019 年结束,只剩下 10 几天了。你做好准备迎接 2020 年了吗? 一到年底,人就特别容易陷入回忆和比较之中,比如说这几天, 的对比挑战就火了! 这个话题登上了微博的热搜榜,也刷爆了朋友圈,人们纷纷晒出自己2017和2019的照片对比。 作为一个技术宅,我也做了一个对比: 2017 年 9 月 21 日,Java 9 正式发布,并且在2017年8月,JCP执行委员会提出将J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
程序员需要了解的硬核知识之汇编语言(一)
之前的系列文章从 CPU 和内存方面简单介绍了一下汇编语言,但是还没有系统的了解一下汇编语言,汇编语言作为第二代计算机语言,会用一些容易理解和记忆的字母,单词来代替一个特定的指令,作为高级编程语言的基础,有必要系统的了解一下汇编语言,那么本篇文章希望大家跟我一起来了解一下汇编语言。 汇编语言和本地代码 我们在之前的文章中探讨过,计算机 CPU 只能运行本地代码(机器语言)程序,用 C 语言等高级语...
OpenCV-Python 绘图功能 | 七
目标 学习使用OpenCV绘制不同的几何形状 您将学习以下功能:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等。 代码 在上述所有功能中,您将看到一些常见的参数,如下所示: img:您要绘制形状的图像 color:形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于蓝色。对于灰度,只需传递...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
Fiddler+夜神模拟器进行APP抓包
Fiddler+夜神模拟器进行APP抓包 作者:霞落满天 需求:对公司APP进行抓包获取详细的接口信息,这是现在开发必备的。 工具:Fiddler抓包,夜神模拟器 模拟手机 安装APP 1.下载Fiddler https://www.telerik.com/download/fiddler Fiddler正是在这里帮助您记录计算机和Internet之间传递的所有HTTP和HTTPS通信...
相关热词 c#时间格式化 不带- c#替换字符串中指定位置 c# rdlc 动态报表 c# 获取txt编码格式 c#事件主动调用 c#抽象工厂模式 c# 如何添加类注释 c# static块 c#处理浮点数 c# 生成字母数字随机数
立即提问