词法分析(1)—词法分析的有关概念以及转换图
词法分析是编译的第一个阶段,前面简介中也谈到过词法分析器的任务就是:字符流——>词法记号流
这里词法分析和语法分析会交错进行,也就是说,词法分析器不会读取所有的词法记号再使用语法分析器来处理,通常情况下,每取一个词法记号,就送入语法分析器进行分析,图解:
词法分析器是编译器中与源程序直接接触的部分,因此词法分析器可以做诸如1). 去掉注释,自动生成文档(c#中的///注释)2). 提供错误位置(可以通过记录行号来提供),当字符流变成词法记号流以后,就没有了行的概念3). 完成预处理,比如宏定义
词法记号,词法单元(lexeme),模式模式是一种规则每个词法单元都有一个特定记号
比如 int a=3,这里 int,a,=,3都是词法单元,每个词法单元都属于某个词法记号,比如3就是”num”这个词法记号的一个词法单元,而模式规定了什么样的字符串的词法记号是什么样的(模式是一种规则)
某一特定模式规定了某个词法记号下的一类词法单元,比如:模式:用字母开头的包含字母和数字的串上 ...
1、 条件断点断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。
条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。
在断点处点击鼠标右键,选择最后一个"Breakpoint Properties"
断点的属性界面及各个选项的意思如下图,
2、 变量断点断点不仅能打在语句上,变量也可以接受断点,
上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。
3、 方法断点
方法断点就是将断点打在方法的入口处,
方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。
4、 改变变量值代码停在了断点处, ...
介绍
当分布式系统编程成为你生活中的一部分时,你需要经历一段学习曲线。这篇文章描述了一下我当前在这个领域大致属于哪个层次,并希望能为你指出足够多的错误,从别人的错误中学习,从而使你能以最优的路径通向成功。先声明一下,我在1995年时达到第1级,我现在处于第3级。你自己属于哪一级呢?
第0级:完全一无所知
每个程序员都从这一级开始。我不会在此浪费太多口舌,因为这实在没什么太多可说的。相反,我会引用一些我曾经经历过的对话,为从未接触过分布式系统的开发者们提供一些建议。
对话1:
NN:“在分布式系统中,复制是个很容易的操作,你只需要让所有的结点同时存储你要复制的东东就行了”。
另一段对话(从我记忆深处挖出来的):
NN: “为了我们的第一人称射击游戏,我们得写一个自己的网络处理引擎。”
我:“为什么?”
NN: “虽然已经有一些优秀的商业引擎了,但获取license的费用非常高昂,我们不想为此买单。”
我:“你之前对于分布式系统有什么经验吗?”
NN:“是的,我之前写过一个套接字服务器。”
我:“你觉得你要花多久能完成这个网络引擎?”
NN:“我想2周吧。保险起见,我计划用4周时间。”
好 ...
系统架构
未读首先来回答一个问题:为什么在磁盘中要使用b+树来进行文件存储呢?
原因还是因为树的高度低得缘故,磁盘本身是一个顺序读写快,随机读写慢的系统,那么如果想高效的从磁盘中找到数据,势必需要满足一个最重要的条件:减少寻道次数。
我们以平衡树为例进行对比,就会发现问题所在了:
先上个图
这是个平衡树,可以看到基本上一个元素下只有两个子叶节点
抽象的来看,树想要达成有效查找,势必需要维持如下一种结构:
树的子叶节点中,左子树一定小于等于当前节点,而当前节点的右子树则一定大于当前节点。只有这样,才能够维持全局有序,才能够进行查询。
这也就决定了只有取得某一个子叶节点后,才能够根据这个节点知道他的子树的具体的值情况。这点非常之重要,因为二叉平衡树,只有两个子叶节点,所以如果想找到某个数据,他必须重复更多次“拿到一个节点的两个子节点,判断大小,再从其中一个子节点取出他的两个子节点,判断大小。”这一过程。
这个过程重复的次数,就是树的高度。那么既然每个子树只有两个节点,那么N个数据的树的高度也就很容易可以算出了。
平衡二叉树这种结构的好处是,没有空间浪费,不会存在空余的空间,但坏处是需要取出多个节点,且 ...
背景:调试模式下,单步运行一个查询订单协议操作,记录了ibatis框架的执行动作,侧面剖析其原理。
一、简介:
1. dal 层的dao接口实现类通常会继承SqlMapClientDaoSupport。spring容器在初始化一个dao bean实例时,通常会注入两块信息DataSource(数据源)和sqlMapClient(主要是sql语句),这两块信息会封装到SqlMapClientTemplate
2. 其中数据源的实例通常采用apache的开源项目dbcp
代码配置如下:
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">
<propertyname="driverClassName"value="com.mysql.jdbc.Driver"/>
<propertyname=" ...
下载了文档自己截图存留
8种排序之间的关系:
1, 直接插入排序
(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排
好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数
也是排好顺序的。如此反复循环,直到全部排好顺序。
(2)实例
(3)用java实现
123456789101112131415161718 package com.jsdiff; public class insertSort {public insertSort(){ inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; int temp=0; for(int i=1;i<a.length;i++){ int j=i-1; temp=a[i]; for(;j>=0&&temp<a[j] ...
一、为什么跳槽和选择公司
1. 为什么跳槽
虽然我们跳槽的原因各自不同,但是主要原因一般都是待遇、成长、稳定这些主要因素,也有一些比如想距离家更近等等因素。
待遇就是收入,比如工资、股票、奖金等等,在这个层面影响我们跳出的心态一般都是,比如我觉得我技术能力达到了某个阶段,但是目前薪水比我能力要低,或者是我一起成长的同学朋友同事现在薪水都比我高,或者是在高房价下面或者要养孩子,需要更多的收入来支撑,不管什么原因,追求高薪自然是我们在商业社会每个人的重要选择。这个无可厚非,不过就是要按照行业大情况、个人能力等综合考量。
跳槽很多普遍原因是待遇低,或者是跟自己预期不满足。另外一个是工作太累或者是没有发展空间了,还有的是为了离家距离近,这些也可以理解。不够我一个建议的原则是:不要频繁跳槽!
我感觉你在一个公司没有呆超过2年+,你其实对整个公司的认识还不是足够的,有时候容易片面,或者是刻意放低了自己目前的工作,觉得自己很悲催,不换个工作对不起自己。其实没必要,按照个人情况和行业大环境等等去做决定。
是否跳槽,自己决定想清楚,做了不要后悔!
2. 选择什么公 ...
spring
未读什么是 Spring 视图和视图解析器Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring 视图和视图解析器则是 Spring MVC 中的组成部分。在介绍 Spring 视图和视图解析器前,我们先了解下在 Spring MVC 框架中,一个 Web 请求所需经历的六个阶段:
请求会首先被 Spring MVC 的前端请求分发器(Dispatcher)拦截。该拦截器是一个 Servlet, 需要在 web.xml 中配置,所有符合所配置的 URL 样式的访问请求,将都会被该拦截器拦截。Spring 提供了默认的分发器 org.springframework.web.servlet.DispatcherServlet,您可以根据需要,决定是否需要定制自己的分发器。
在接收到访问请求后,分发器会根据开发人员在 Spring 配置文件或代码中的注解(Annotation),来查找合适的控制器。
分发器在查找到合适的控制器后,将请求转交给该控制器处理。
通常,控制器会调用相应服务类来处理业务逻辑,在将请求处理后,控制器需返 ...
前言 主要强调了两个内容,一个是要相信自己,一个是要压制自己浮躁的心理。这两点都是非常重要的,倘若做不到这两点,那么在你学习的过程的当中,很有可能会碰到各种各样的问题。
比如第一点相信自己,我们主要强调的是不要攀比。试想如果你做不到这一点,在你正奋力的学习的时候,忽然发现身边的一个朋友或者同事,在你认为不应该超越自己的时候,工资忽然翻了一倍远超于你,这时候你就很可能被这些事情所影响。其实若是你不够相信自己,容易去攀比的话,那么浮躁的心理就很容易产生。
总而言之,心态很重要,非常重要,请各位准备破釜沉舟,背水一战的猿友一定要先调整好自己的心态。调整好心态以后,我们就该去付诸于实践了,也就是真正的行动起来,去进行自己的学习之旅。
对象范围 这里讨论的对象首先需要满足一点,那就是你是一个有上进心的人,倘若你的生活态度就是得过且过,吃饱喝足即可,那么本篇文章可能不太适合你。当然,这种态度没什么错,个人有个人的生活和工作上的追求,只要开心快乐,都是可取的。
本文的适读对象要满足的第二点,就是你确实有足够的上进心,但却总是因为各种各样的原因打断自己的学习,导致自己的学习效果不太理想 ...
也许你是一位项目经理,也许你是一位项目骨干成员,或者开发小组长。在我发表“如何提高代码质量”的这一系统文章后,有许多网友都向我抱怨,说他无法把握整个项目组成员的代码质量。我想,这也是所有项目组普遍存在的问题吧,它通常表现为以下几个问题:
软件项目普遍存在的问题1)新手。任何项目组成员都不可避免地出现新手,他们往往是刚刚从大学毕业的学生。这些新手由于软件开发时间太短,往往技术不成熟,没有形成良好的开发习惯,所以编写代码质量较差,问题很多。他们常常成为项目组的“鸡肋”,用多了项目质量无法得到保证,不用则又人手不够。
2)人员变动。一个维护时间稍长一点儿的软件项目,人员变动是在所难免的。老员工被调动到其它项目去了,由新员工来接替他们的工作。在我的项目组中,人员调动达到了90%,唯一没有调走的就是我自己。新员工在接替老员工进行代码维护,甚至继续进行新的开发的时,由于对原有代码以及设计思路理解的偏差,也会出现大量的低劣代码。
3)不规范的代码编写。即使除去以上两个问题的影响,项目组成员编写的代码同样会出现问题。在项目开发之初,我们往往会制定一个代码编写的规范,但在项目开发过程中,许多成员往往会忽 ...
