「java垃圾桶」垃圾收集java
今天给各位分享java垃圾桶的知识,其中也会对垃圾收集java进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、关于C加加和JAVA
- 2、JAVA手机怎样去掉桌面图标
- 3、怎样学好java
- 4、thinking in java 这书写的太愚蠢了,你们觉得呢?
- 5、不改表结构如何动态扩展字段
- 6、java 将上传文件以二进制流保存在数据库表中的某个字段,怎么做啊?
关于C加加和JAVA
C++之父评论C++与Java
Linux之父炮轰C++:
Java之父评价C语言之父:我用尽了形容词
C++之父评论C++与Java
如果人们非要拿C++和Java来作比较,我建议他们去阅读The Design and Evolution of C++,看看C++为什么是今天这个样子,用我在设计C++时遵从的原则来检验这两种语言。这些原则与SUN的Java开发小组所持的理念显然是不同的。除了表面语法的相似性之外,C++与Java是截然不同的语言。在很多方面,Java更像Smalltalk。(Sun的培训教材清楚地写道:Java在设计上采用了与C++相似的语法,与Smalltalk相似的语义。所以可以说Java与C++是貌合神离,与Smalltalk才是心有灵犀。)Java语言相对简单,这部分是一种错觉,部分是因为这种语言还不完整。随着时间的推移,Java在体积和复杂程度上都会大大增长。在体积上它会增长两到三倍,而且会出现一些实现相关的扩展或者库。这是一条每个成功的商业语言都必须走过的发展之路。随便分析一种你认为在很大范围内取得了成功的语言,我知道肯定是无有例外者,而且实际上这非常有道理。
上边这段话是在Java 1.1推出之前写的。我确信Java需要类似模板的机制,并且需要增强对于固有类型的支持。简单地说,就是为了基本的完整性也应该做这些工作。另外还需要做很多小的改动,大部分是扩展。1998年秋,我从James Gosling(Java语言的创始人)那里得到一份建议书,说是要在Java中增加固有类型、操作符重载以及数学计算支持。
还有一篇论文,是数学分析领域的世界级大师,伯克利大学的W. Kahan教授所写的How Java's Floating-Point Hurts Everyone Everywhere(且看Java的浮点运算如何危害了普天下的芸芸众生),揭露了Java的一些秘密。我发现在电视和出版物中关于Java的鼓吹是不准确的,而且气势汹汹,让人讨厌。大肆叫嚣凡是非Java的代码都是垃圾,这是对程序员的侮辱;建议把所有的保留代码都用Java重写,这是丧心病狂,既不现实也不负责任。Sun和他的追随者似乎觉得为了对付微软罪恶的“帝国时代”,就必须如此自吹自擂。但是侮辱和欺诈只会把那些喜欢使用不同编程语言的程序员逼到微软阵营里去。
Java并非平台无关,它本身就是平台。跟Windows一样,它也是一个专有的商业平台。也就是说,你可以为Windows/Intel编写代码,也可以为Java/JVM编写代码,在任何一种情况下,你都是在为一个属于某个公司的平台写代码,这些代码都是与该公司的商业利益扯在一起的。当然你可以使用任何一种语言,结合操作系统的机制来编写可供JVM执行的程序,但是JVM之类的东西是强烈地偏向于Java语言的。它一点也不像是通用的、公平的、语言中立的VM/OS。私下里,我会坚持使用可移植的C++作大部分工作,用不同的语言作余下的工作。
“Java is not platform-independent, it is the platform”,B. S的这句评语对于C++用户有着很大的影响,有些C++高手甚至把这句话作为自己的签名档,以表明对Java的态度和誓死捍卫C++的决心。
Linux之父炮轰C++:
糟糕程序员的垃圾语言(1)2007-09-09 13:33 刘江 刘江@图灵 我要评论(14) 字号:T | TLinux之父为Linux内核开发而专门打造的版本控制软件Git已经引起了业界的广泛关注。Dmitry Kakurin查看源代码之后,发现使用的是纯C而非C++,表示不可理解。引起了Linux之父炮轰C++:糟糕程序员的垃圾语言。AD: 2013大数据全球技术峰会低价抢票中
Linux之父炮轰C++:糟糕程序员的垃圾语言Linux之父话糙理不糙不得不看的两次从C++回归C的高手评论C++C语言是否该扔进垃圾桶为什么每个程序员都应该学习C语言?每个程序员都应该学习C语言?我可不这么认为C语言已经死了,5个需要忘却它的理由用C设计 用C++编码为什么使用C++C++0x:崭新的C++,还是另一个Java?编程语言的三大定理动态语言为何难堪重任动态语言面面观Linux之父Linus Torvalds为了Linux内核开发而专门打造的版本控制软件Git已经引起了业界的广泛关注。昨天,有一位Dmitry Kakurin老兄在查看了源代码之后,发现使用的是纯C而非C++,表示不可理解,他直言:“别拿可移植性说事儿,这是屁话(BS,bullshit)。“(此外,他还批评Git蛮力地直接操作文本,既啰嗦又易错,而且很难跟上高层代码逻辑。)”这个BS引起了Torvalds的强烈反应,他用“*YOU* are full of bullshit.”(你才满嘴屁话呢)作为自己反驳的开场白。接着,他先转向了对C++的罕见的火药味十足的炮轰:“C++是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使情况更糟,以至于极容易产生彻头彻尾的垃圾(total and utter crap)。老实说,选择C就是为了把C++程序员踢出去。……我有这样的结论,任何喜欢用C++而不是C开发项目的程序员可能都是我希望踢出去的人,免得他们来搞乱我参与的项目。C++会导致非常非常糟糕的设计选择。你们这些C++程序员总是一上来就用语言的那些‘漂亮的’库特性比如STL、Boost和其他彻头彻尾的垃圾,这可能对你们的程序有所‘帮助’,但是却会导致:
——当库无法工作时无穷无尽的折磨(别跟我说什么STL尤其是Boost很稳定而且可移植性很好,那全是屁话,而且一点都不可笑)
——低效的抽象编程模型,可能在两年之后你会注意到有些抽象效果不怎么样,但是所有代码已经依赖于围绕它设计的‘漂亮’对象模型了,如果不重写应用程序,就无法改正。也就是说,使用优秀的、高效的、系统级的和可移植的C++的唯一方式,最终还是限于使用C本身具有的所有特性。项目限制只用C,意味着参与的人不会捣乱,也意味着会得到许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’垃圾的程序员。
所以,我很抱歉,但是对于Git这样效率是主要目标的软件,C++的所谓优点只是巨大的错误。而我们将看不到这一点的人排除在外却成了一个巨大的附加优势。如果你想要用C++写的版本控制系统,去玩Monotone吧。他们确实使用了‘真格的数据库’,使用了‘漂亮的面向对象库’、使用了‘漂亮的C++抽象’。可是说老实话,所有这些对某些计算机专业人士而言富于吸引力的设计决定,其最终结果确是一堆可怕、难以维护的垃圾。”【070907更新】Torvalds和Dmitry Kakurin争论继续中。对Torvalds的回击,Dmitry反唇相讥:“随着只用C编程的恐龙们逐渐灭绝,你很快就会发现只剩下自己一个人在固执己见。用Git贡献者的数量是说明不了问题的。显然C++开发者也能够贡献C代码。但是以为他们喜欢这种方式,那可就错了。
没有C的时候我用汇编编程。然后在C++诞生之前,我转向了C。现在我使用C++和C#,而且不再走回头路。差劲的程序员用任何语言都写不出好程序。但是为了将差劲的贡献者拒之门外这样一个没谱的理由而惩罚优秀的开发者,这简直是胡闹。”只过了10几分钟,Torvalds就回贴了:“和你不同的是,我实实在在地给出了不喜欢C++的原因,而且指出了它可能导致的各种问题的一些例子。而你呢,没有给出一条像样的使用C++的理由。事实上,Git比其他软件配置管理软件都要好,而好的品味(taste)和C正是原因之一。”
对上面的最后一句话,Torvalds后来又做了如下补充:
“说得更具体一些:
——简单和清晰的核心数据结构, 非常精益(lean)且颇具雄心的暧昧管理着它们,将“简单胜于花哨”这一方法发挥到极致。
——有意识地不抽象数据结构和算法,因为它们恰恰是Git核心的全部要素(whole point)。 如果你想用更花哨的语言,C++绝对是最糟糕的选择。如果想要真正的高级特性,那就选择有垃圾回收或者好的系统集成的,而不是既缺乏C的简约(sparseness)又缺乏C的直接而且没有重要概念的高层 绑定(high-level bindings to important concepts)的东西。 一言以蔽之,C++正处在困境当中,它既无法帮助原型化或者简单的GUI编程足够简化从而真正可用,不是C那样积极地鼓励你使用简单和直接的语言构造的精益系统编程语言。” (另一位同学插了一句:这还没有提到很难找到两个C++编译器支持同样的特性。)“这与什么恐龙毫无关系。好的品味永远不会过时。将C与汇编语言相提并论,恰恰说明你对自己所讨论的问题缺乏起码的概念(don't have a friggin idea)。”
Java之父评价C语言之父:我用尽了形容词
摘要:Java 之父James Gosling在上周发布了关于讨论C语言之父Dennis Ritchie的简短博文称:C语言撑起了一切,他的影响巨大,并超越了科技世界。
Java之父詹姆斯·高斯林(James Gosling)在上周发布了关于讨论C语言之父丹尼斯·里奇(Dennis Ritchie)的简短博文:丹尼斯·里奇辞世的新闻如五雷轰顶。过去几天已经有很多资讯报道此事。他的影响巨大,并超越了科技世界,虽然他的大多影响都不为人知,但完全可以感受到。C语言撑起了一切。我的整个职业生涯也是从C语言和Unix中发展而来。对当今的大多数工程师而言,很难理解我在20世纪70年代感受到的幸福愉快感。当一种编程语言最终出现,我(其他人也)可以从汇编语言提升到一种真正的编程语言。我们可以做任何一切,过去我们得编写所有低级位系统。在C语言之前,编程语言达不到任务:开销太大了。系统的复杂性是真的阻碍了用汇编语言编写大型软件。C语言就像代码的JATO。(编注:“JATO”是“Jet-fuel assisted take off”的缩写,字面意思:“辅助起飞的喷气燃料”。这个系统通过小型火箭提供辅助动力,以帮助超载的飞机起飞升空。)下面是詹姆斯·高斯林此文的一些评论:Truely James. For every Computer professional in the world, the first language they come across is C. With so much of wonderfulness and which also makes the learning experience so fun and entertaining. RIP Ritchie!!!说的很对,詹姆斯!对于每个计算机专业人士,他们所接触的第一种编程语言就是C语言。(C语言)有着如此多的令人惊奇的地方,这也使得学习过程非常有趣。安息,里奇!!!Great ones are falling. I still love C. So simple. So powerful.一位巨星的陨落。我仍然爱着C语言。如此简单,如此强大。I remember C being like Adventure for programmers: lots of little pits for the unwary to fall into. Even after many years there were a few I hadn't found. It was a good time.我记得C语言就是程序员的冒险:有很多小坑,一不小心就陷进去。即便很多年过后,还有一些我没有发现的。那是个美好时刻。The equation is quite simple : Richie is like Einstein, pure Genius. All the IT is built on Kamp;R works. Thanks man, and RIP...等式非常简单:里奇就像爱因斯坦,纯粹的天才。IT业的所有都基于肯贝汉和里奇的成果。感谢,安息……文章出自:nighthacks译文来自:伯乐在线
JAVA手机怎样去掉桌面图标
山寨手机不可以,android安卓手机可以,一直按住这个图标,拖到下面的垃圾桶里就可以了。
怎样学好java
1.基础:李刚的《java疯狂讲义》仔细看熟,钻研明白,主要概念不如背会,就像中学时候,有时候笨方法其实很有效,当然理解了更好。别的书就不用了,看了也是浪费时间,书中知识都一样,而这本更全。对于大学里发的连IT杂志都不如的教科书你可以直接丢尽垃圾桶,那些玩意你就算是一本书背下来了也没用
2.深入:还是李刚老师的书,就是那本红色轻量级J2EE企业级SSH应用开发实战,主要看各个框架的配置以及原理,把例子代码都敲出来,运行下。把书中知识都掌握好。别的J2EE书还是不用看,但是在校期间有机会一定要深入地学习下javascript,这个很重要
3.实践:如果你看再多的书,自己敲最多的代码例子,如果你不做两三个项目,你等于还是什么也不是,在学校的时候和导师搞好关系,争取跟着导师做几个项目。大三的时候假期了或者没课了就去应聘实习,实习一个两个月兼职也行(我大三的时候就开始兼职,能学到东西还能赚点生活费),不是为了赚钱,是为了赚经验,把你前两部学的复习一遍,付之于实践,就算一个月八百块钱也去干。你赚的经验在将来是一大笔钱。在公司实习的时候一定要争取多干点活,独立的完成分配给你的任务,争取参加个公司大点的项目。辛苦点没啥,我那时候天天晚上两三点睡觉,早上五点多起来继续敲代码,然后不吃饭六点半就挤公交去公司。
4.工作:别在大学里浪费太多时间,中国的大学除了个别大学外其他的都可以说是垃圾,根本培养不出什么人才,大四没课了就赶紧去工作,在学校多呆一天就是浪费一天青春。由于前三步,特别是第三步的积累,这时候你找工作已经很容易了。找个自己喜欢的公司,不一定非得大,一定要找个能学到知识,锻炼自己,有发展的公司。这时候你要做的就是等着电脑听老板给你谈钱的事吧
5.好好工作
前两步里我不是专门宣传李刚老师的书,也不是说他的书有多好,只是因为我买了很多书,后来对比之后发现只有这两本对我有用,虽然他写的书有些地方看着让人反感,特别是前言里呵呵(你可以看看)。然后我就是这样走出来的,其实也是我的亲身经历,我以前也遇到过同样的问题,摸摸索索现在我已经大四了,在北京也已经工作三个月了,明年六月份毕业,现在一个月工资将近4.5K。虽然不高,但是对于我一个就读于一所非常次的二本院校的大四在校本科生,已经挺不错了。今天就把我的学习所得拿出来和你分享一下,你可以试试,当然重要的是你得找个适合自己的学习方法。所以加油吧。努力了,以后的路会很好走的,至少不会像现在很多大学生迷茫的活着。
thinking in java 这书写的太愚蠢了,你们觉得呢?
说实话,我不赞同楼主的说法。
这是一本很不错的书,讲得很清楚,很详细。学习程序语言刚开始的时候一定要多写,写多了就会有感觉,但是光会写是不够了,你只有明白了它的原理,它的思想,你的程序才会写得更好,你才能更好地理解这门语言。
刚开始看这本书的时候,我也觉得文字太多,看半天不太明白,也有个原因可以是我们看的是翻译过来的,而不是英文原版,肯定有翻译不恰当的地方。如果楼主,英文很好的话,可以直接去看原版的。
我读这本书采取的方法是写其中的代码,写了之后自己分析一下,或者改改程序,然后再去看书中的说明,这样收获要大些,如果直接去看里面的文字,会觉得很没趣,毕竟编程语言的学习还是要多写,只看不写肯定是不得行的。
《thinking in java》这本书把JAVA的编程思想讲得很清楚,注重的不是实战,而是对思想和原理的理解,这对我们了解这门语言是很有帮助的,如果只是能写代码的话,只要写多了,再笨的人也会按照步骤来写的。
这本书需要静下心来慢慢地看,不要急,细细体会,值得多看几遍。
这只是我个人的想法,如果有让楼主不满意的地方,还请见谅~!
不改表结构如何动态扩展字段
增加 json 格式的扩展字段。
下面配合一些代码来描述这个解决方案,读者便于去理解。
mysql 数据库脚本:
DROP TABLE IF EXISTS `cs_dustbin`;
CREATE TABLE IF NOT EXISTS `cs_dustbin` (
`id` VARCHAR(45) NOT NULL COMMENT '主键自增id',
`rfid_no` VARCHAR(20) NOT NULL COMMENT 'rfid 卡号',
`state` INT(1) NOT NULL COMMENT '垃圾桶状态:0:已注销;1:未使用;2:待使用;3:已使用(绑定收集点);',
`user_id` INT NOT NULL COMMENT '登记人,负责录入垃圾桶的人',
`type` INT(1) NOT NULL DEFAULT 1 COMMENT '垃圾桶类型:1:餐厨垃圾桶',
`street_code` INT(11) DEFAULT NULL COMMENT '所在镇街 code,根据状态,这里的含义可能是领用镇街、退还镇街。',
`create_time` DATETIME NOT NULL DEFAULT now() COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT now() COMMENT '更新时间',
`ext` VARCHAR(1000) NOT NULL DEFAULT '{}' COMMENT '扩展字段',
...
PRIMARY KEY (`id`))
ENGINE = InnoDB
COMMENT = '垃圾桶表';
复制代码Java 代码:
import com.alibaba.fastjson.JSON;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* 垃圾桶实体
* Created by Blink on 6/28/2018 AD.
*
* @author Blink
*/
@Data
public class Dustbin {
private String id;
/**
* rfid 卡号
*/
@NotNull
private String rfidNo;
/**
* 垃圾桶状态:0:已注销;1:未使用;2:待使用;3:已使用(绑定收集点);
* 对应 Dustbin.StateEnum 类
*/
@NotNull
private Integer state;
/**
* 录入垃圾桶的人员id
*/
@NotNull
private Long userId;
/**
* 垃圾桶类型:1:餐厨垃圾桶
* DefaultValue: 1
*/
@NotNull
private Integer type;
/**
* 所在镇街 code
* 根据状态,这里的含义可能是领用镇街、退还镇街
*/
private Integer streetCode;
/**
* 创建时间
* defaultValue : now()
*/
@NotNull
private Date createTime;
/**
* 更新时间
*/
@NotNull
private Date updateTime;
/**
* 扩展字段,详细数据查看 DustbinExt.java
* DefaultValue: {}
*/
private String ext;
...
public DustbinExt getExtObject() {
return JSON.parseObject(this.getExt(), DustbinExt.class);
}
public void setExtObject(DustbinExt ext) {
this.ext = JSON.toJSONString(ext);
}
/**
* 垃圾桶扩展属性
* Created by Blink on 6/28/2018 AD.
*
* @author Blink
*/
@Data
public static class DustbinExt {
/**
* 所在镇街
* 根据状态,这里的含义可能是领用镇街、退还镇街、绑定的镇街
*/
private String street;
/**
* 客户(收集点)id,绑定收集点的时候需要填入
* 根据目前的需求(2018-06-29),当收集点解绑的时候
* 需要保存垃圾桶最新绑定收集点名称,所以在解绑垃圾桶的时候不会把这个信息删掉
* 只有当绑定收集点的时候才把他覆盖
*/
private Long customerId;
/**
* 客户(收集点)名称,绑定收集点的时候需要填入
* 根据目前的需求(2018-06-29),当收集点解绑的时候
* 需要保存垃圾桶最新绑定收集点名称,所以在解绑垃圾桶的时候不会把这个信息删掉
* 只有当绑定收集点的时候才把他覆盖
*/
private String customer;
/**
* 损坏部位
* 1:桶盖;2:桶口;3:桶身;4:桶轴;5:桶底;6:桶轮;
* 对应 DustbinDamagePartEnum 类
*/
private ListInteger parts;
}
...
}
复制代码mysql 脚本可以看到扩展字段的信息:
ext VARCHAR(1000) NOT NULL DEFAULT '{}' COMMENT '扩展字段'
复制代码可以看到这么一段 Java 代码:
...
/**
* 扩展字段,详细字段查看 DustbinExt 类
* DefaultValue: {}
*/
private String ext;
public DustbinExt getExtObject() {
return JSON.parseObject(this.getExt(), DustbinExt.class);
}
public void setExtObject(DustbinExt ext) {
this.ext = JSON.toJSONString(ext);
}
...
复制代码可以看到 ext 字段就是用来存储 json 格式的数据,它可以动态地增加任何字段,甚至是对象,不需要通过 DDL(Data Definition Language) 去创建字段,非常适合用来解决上面提到的问题。
Java 代码在这里起到辅助性作用,通过定义一个内部类来管理扩展字段的属性,方便我们了解和管理扩展字段,提高代码的可读性和可维护性,java 这种方式也是笔者总结出来的较为优雅的做法(个人观点)。
局限性
有经验的读者可能会提出,ext 字段在 Mysql 5.7.8 以下版本无法对扩展字段中的某一个或一部分字段建立索引,因为 Mysql 5.7.8 版本以下不支持(Mysql 5.7.8 支持为 Json Data Type 建立索引)。
没错,这是这个解决方案的一个局限性,在 Mysql 5.7.8 以下版本,我的建议是, ext 扩展字段不要存储热点数据,只存储非热点数据,这样就可以避免查询操作,降低维护 ext 字段带来的成本和风险,那如何识别新增字段是不是热点数据呢?这个需要结合实际业务需求来判断,也可以询问对业务和技术更有经验的同事,便于读者更快得出结论。
终极版解决方案
在一些极端的情况下,变化可能来得太快,而我们要的是减少变化带来的成本和风险,所以在表设计之初可以根据自身经验,或者找更有经验的人寻求帮助,预估一下需要预留多少个备用字段,再配合扩展字段,基本上可以把改变(添加字段)表结构的次数降至一个非常少的次数。
总结
在特殊情况下,通过扩展字段 + 预留字段基本上可以做到动态扩展字段,又不会影响为热点数据建立索引的情况,这样我们得到了一个非常灵活的表结构,便于我们应对未来的变化,但是请注意,要维护好我们的实体,包括里面的每一个字段,敬畏每一行代码。
java 将上传文件以二进制流保存在数据库表中的某个字段,怎么做啊?
楼主这是个不好的思路,不要把数据库当成“垃圾桶”,什么东西都往里扔,你应该在这个字段里存储你存放文件的信息,另外在本地文件夹里存放图片,视频之类大数据量的文件。
对一般大字段文件,采用字节流读取存储,底下是个读取的代码
Reader reader = rs.getCharacterStream("details");
StringBuffer strBuf = new StringBuffer();
if(reader!=null){
BufferedReader bufReader = new BufferedReader(reader);
String line;
while ((line = bufReader.readLine()) != null){
strBuf.append(line);
strBuf.append("\r\n");
}
bufReader.close();
}
判断是否有附件,你既然存储了路径,用File类的exist的方法就可以判断是否有该文件存在。。。。
java垃圾桶的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于垃圾收集java、java垃圾桶的信息别忘了在本站进行查找喔。