导航:首页 > 程序命令 > 程序员犯过什么错误

程序员犯过什么错误

发布时间:2023-02-28 23:35:11

A. C++ 编程过程中,有哪些常犯的坏习惯,哪怕对于多年经验的程序员也会出现

大家都知道,编程是一个非常用脑并要求非常细心的一项工作,在编程过程中,哪怕一个非常不起眼的小细节,比如一个标点符号,都会让整个程序崩溃。

先说在编程时,尽管经验老道的程序员也会犯一些常见的小问题。

说好听的叫拒绝改变,说不听的叫不思进取。而这个也是许多经验丰富的程序员常犯的坏习惯。当然,还有很多,在这里我就不一一说明了。。。

B. java程序员在写SQL时常犯的错误!

Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准:

技能(任何人都能容易学会命令式编程)模式(有些人用“模式-模式”,举个例子,模式可以应用到任何地方,而且都可以归为某一类模式)心境(首先,要写个好的面向对象程序是比命令式程序难的多,你得花费一些功夫)

但当Java程序员写SQL语句时,一切都不一样了。SQL是说明性语言而非面向对象或是命令式编程语言。在SQL中要写个查询语句是很简单的。但在Java里类似的语句却不容易,因为程序员不仅要反复考虑编程范式,而且也要考虑算法的问题。

下面是Java程序员在写SQL时常犯的10个错误(没有特定的顺序)。

1、忘掉NULL

Java程序员写SQL时对NULL的误解可能是最大的错误。也许是因为(并非唯一理由)NULL也称作UNKNOWN。如果被称作 UNKNOWN,这还好理解些。另一个原因是,当你从数据库拿东西或是绑定变量时,JDBC将SQL NULL 和Java中的null对应了起来。这样导致了NULL = NULL(SQL)和null=null(Java)的误解。

对于NULL最大的误解是当NULL被用作行值表达式完整性约束条件时。另一个误解出现在对于NULL 在 NOT IN anti-joins的应用中。

解决方法:

好好的训练你自己。当你写SQL时要不停得想到NULL的用法:这个NULL完整性约束条件是正确的?NULL是否影响到结果?

2、在Java内存中处理数据

很少有Java开发者能将SQL理解的很好。偶尔使用的JOIN,还有古怪的UNION,好吧,但是对于窗口函数呢?还有对集合进行分组呢?许多 的Java开发者将SQL数据加载到内存中,将这些数据转换成某些相近的集合类型,然后再那些集合上面使用边界循环控制结构(至少在Java8的集合升级 以前)执行令人生厌的数学运算。

但是一些SQL数据库支持先进的(而且是SQL标准支持的)OLAP特性,这一特性表现更好而且写起来也更加方便。一个(并不怎么标准的)例子就 是Oracle超棒的MODEL分句。只让数据库来做处理然后只把结果带到Java内存中吧。因为毕竟所有非常聪明的家伙已经对这些昂贵的产品进行了优 化。因此实际上,通过将OLAP移到数据库,你将获得一下两项好处:

便利性。这比在Java中编写正确的SQL可能更加的容易。性能表现。数据库应该比你的算法处理起来更加快.而且更加重要的是,你不必再去传递数百万条记录了。

解决方法:

每次你使用Java实现一个以数据为中心的算法时,问问自己:有没有一种方法可以让数据库代替为我做这种麻烦事。

3、使用UNION代替UNION ALL

和UNION相比UNION ALL还需要额外的关键字。如果SQL标准已经规定了支持,那么可能会更好点。

UNION(允许重复)UNION DISTINCT (去除了重复)

移除重复行不仅很少需要(有时甚至是错的),而且对于带很多行的大数据集合会相当慢,因为两个子select需要排序,而且每个元组也需要和它的子序列元组比较。

注意即使SQL标准规定了INTERSECT ALL和EXCEPT ALL,很少数据库会实现这些没用的集合操作符。

解决方法:

每次写UNION语句时,考虑实际上是否需要UNION ALL语句。

4、通过JDBC分页技术给大量的结果进行分页操作

大部分的数据库都会支持一些分页命令实现分页效果,譬如LIMIT..OFFSET,TOP..START AT,OFFSET..FETCH语句等。即使没有支持这些语句的数据库,仍有可能对ROWNUM(Oracle)或者是ROW NUMBER()、OVER()过滤(DB2、SQL Server2008等),这些比在内存中实现分页更快速。在处理大量数据中,效果尤其明显。

解决方法:

仅仅使用这些语句,那么一个工具(例如JOOQ)就可以模拟这些语句的操作。

5、在Java内存中加入数据

从SQL的初期开始,当在SQL中使用JOIN语句时,一些开发者仍旧有不安的感觉。这是源自对加入JOIN后会变慢的固有恐惧。假如基于成本的 优化选择去实现嵌套循环,在创建一张连接表源前,可能加载所有的表在数据库内存中,这可能是真的。但是这事发生的概率太低了。通过合适的预测,约束和索 引,合并连接和哈希连接的操作都是相当的快。这完全是是关于正确元数据(在这里我不能够引用Tom Kyte的太多)。而且,可能仍然有不少的Java开发人员加载两张表通过分开查询到一个映射中,并且在某种程度上把他们加到了内存当中。

解决方法:

假如你在各个步骤中有从各种表的查询操作,好好想想是否可以表达你的查询操作在单条语句中。

6、在一个临时的笛卡尔积集合中使用 DISTINCT 或 UNION 消除重复项

通过复杂的连接,人们可能会对SQL语句中扮演关键角色的所有关系失去概念。特别的,如果这涉及到多列外键关系的话,很有可能会忘记在JOIN .. ON子句中增加相关的判断。这会导致重复的记录,但或许只是在特殊的情况下。有些开发者因此可能选择DISTINCT来消除这些重复记录。从三个方面来说 这是错误的:

它(也许)解决了表面症状但并没有解决问题。它也有可能无法解决极端情况下的症状。对具有很多列的庞大的结果集合来说它很慢。DISTINCT要执行ORDER BY操作来消除重复。对庞大的笛卡尔积集合来说它很慢,还是需要加载很多的数据到内存中。

解决方法:

根据经验,如果你获得了不需要的重复记录,还是检查你的JOIN判断吧。可能在某个地方有一个很难觉察的笛卡尔积集合。

7、不使用MERGE语句

这并不是一个过失,但是可能是缺少知识或者对于强悍的MERGE语句信心不足。一些数据库理解其它形式的更新插入(UPSERT)语句, 如 MYSQL的重复主键更新语句,但是MERGE在数据库中确是很强大,很重要,以至于大肆扩展SQL标准,例如SQL SERVER。

解决方法:

如果你使用像联合INSERT和UPDATE或者联合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入时,请三思。你完全可以使用一个更简单的MERGE语句来远离冒险竞争条件。

8、使用聚合函数代替窗口函数(window functions)

在介绍窗口函数之前,在SQL中聚合数据意味着使用GROUP BY语句与聚合函数相映射。在很多情形下都工作得很好,如聚合数据需要浓缩常规数据,那么就在join子查询中使用group查询。

但是在SQL2003中定义了窗口函数,这个在很多主流数据库都实现了它。窗口函数能够在结果集上聚合数据,但是却没有分组。事实上,每个窗口函数都有自己的、独立的PARTITION BY语句,这个工具对于显示报告太好了。

使用窗口函数:

使SQL更易读(但在子查询中没有GROUP BY语句专业)提升性能,像关系数据库管理系统能够更容易优化窗口函数

解决方法:

当你在子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成。

9、使用内存间接排序

SQL的ORDER BY语句支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。你可能重来不会在Java内存中排序数据,因为你会想:

SQL排序很慢SQL排序办不到

解决方法:

如果你在内存中排序任何SQL数据,请再三考虑,是否不能在数据库中排序。这对于数据库分页数据十分有用。

10、一条一条地插入大量记录

JDBC“懂”批处理(batch),你应该不会忘了它。不要使用INSERT语句来一条一条的出入成千上万的记录,(因为)每次都会创建一个新 的PreparedStatement对象。如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语 句。你可能需要在达到一定量的插入记录后才提交来保证UNDO日志瘦小,这依赖于你的数据库和数据库设置。

解决方法:

总是使用批处理插入大量数据。

来自:OSChina

译者:oschina.net/translate/10-common-mistakes-java-developers-make-when-writing-sql

C. 杭州一程序员被辞退后写代码给自己转账,此举涉及到了哪些罪名

这名程序员的行为已经涉及了盗窃罪,再加上拒不配合警方调查,又涉及到了妨害公务罪,最终两罪并罚。等待他的将是几年的牢狱时光,希望在这段时间内他能够反省自己所犯的错误,在里面好好地接受改造。这次事件告诉我们不管做什么工作,都要遵守职业道德,这是我们工作的道德底线。天网恢恢疏而不漏,只要你做了违法犯罪的事情,就一定会受到法律的审判和制裁。

请大家牢记一句话,法律在保护我们的同时也在监视我们,只要你做出违法犯罪的行为,就一定会逃过法律的惩罚。

D. Java程序员开发存在哪些错误

什么是Java程序员呢?Java程序员是这几年出现的,他们的着装经常被吐槽,没有人能够get到他的笑点,总是让人感觉到莫名其妙,这就是很多人眼中的程序员。程序员在进行软件开发的时候,会存在一些错误的问题,学会避免是非常关键的。下面电脑培训为大家介绍一下。


1、改一行代码,不会影响其他功能

做任何事情诚意是非常关键的,在不认真的情况下任何事情都是做不好的。如果随意改动代码,在连接数据库的时候会出现很多问题。想要成为一名合格的程序员,对代码的严谨性是非常关键的。

2、不考虑自身问题

在进行软件开发的过程中,存在问题是不可避免的,如何面对和处理问题才是最关键的。如果在遇到问题的时候一直认为是电脑的问题,这样想法想要成为合格的程序员是不可能的。IT培训认为硬件问题是比较少的,不能很好的解决自己的问题想要成功是不可能的。

3、使用临时的方法

临时方法并不是解决问题的最好方法,在进行编程的过程中,由于可能出现的问题比较多,如果使用临时办法,最终可能会演变为永久的办法,这对于程序员来说,北大青鸟认为是非常避讳的解决方法。

4、以后在给代码添加注释

习惯是需要在生活中不断养成的,好的习惯是成功的垫脚石。在进行代码书写的时候也应该有一个好的习惯,如果只会一味地推脱,很难让自己前进。

5、测试过,没有BUG

有的程序员永远不承认自己存在问题,代码存在BUG是很正常的,就算进行测试之后也会出现同样的问题。在程序出现问题的时候不要一味的认为是使用而导致的,北大青鸟云南计算机学院认为,作为程序员,应该解决所有存在的问题。


E. 程序员/技术人员犯了什么样的错误会被立马开除

您好:
基本上是出现了重大的运维失误或者代码bug。
比如不小心删除了数据库。弄崩溃了服务器。
让数据库内数据大量错误而未及时发现。
在项目中留后门,严重违反员工守则等。。。

F. 程序员犯罪问题有哪些

技术本质上是无罪的,所以犯罪只是个人的问题。程序员其实可以利用自身的技术为社会和自己创造更美好的未来,但是利用不当的话就会出现犯罪的风险。
希望可以帮到你,谢谢。

G. Java编程中 常见的异常有哪几种

相信作为程序员的我们在对程序进行编译过程中经常会遇到错误,或者在运行过程中出现错误,在这里主要跟大家谈谈经常遇到的一些异常与错误,以及解决办法。

异常是指程序在编译或运行过程出现的错误。

在java.lang包中Throwable包含了所有的异常。

Error (错误) 和Exception(异常)

(1)Error(错误)

一旦发生无法修复,但可以避免发生。

常见错误类:

IOError:I/O错误,当发生严重的I/O错误时,抛出此错误。
VirtualMachineError:虚拟机错误,当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。

StackOverflowError:栈内存满了,当应用程序递归太深而发生堆栈溢出时,抛出该错误。

OutofMemoryError:堆内存满了,因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常。

以上是一些常见的错误,在Error类中还有一些别的错误(参照文件Java.lang.Throwable.Error).

(2)Exception(异常)

一旦发生,可以捕获并处理,不会导致程序终止,有时可以避免有时无法避免。

异常的分类:

1.编译时异常(需要强制处理) 2.运行时异常(不需要强制处理)

常见的异常有:

IOException:输入输出流异常
FileNotFoundException:文件找不到的异常
ClassNotFoundException:类找不到的异常
DataFormatException:数据格式化异常
NoSuchFieldException:没有匹配的属性异常
NoSuchMethodException:没有匹配的方法异常

SQLException:数据库操作异常
TimeoutException:执行超时异常

常见的运行时异常:

RuntimeException:运行时异常
NullPointerException:空指针异常

:数组越界异

ClassCastException:类型转换异常
IllegalArgumentException:非法的参数异常
InputMismatchException:输入不匹配

以上是常见的一些异常,另外还有别的异常,参见文件:Java.lang.Throwable.Exception

既然我们常常会遇到一些异常,那我们如何来处理这些异常就是一个急需解决的事情。

(1) 如何处理编译时异常?

方法一:将需要处理的代码块放在一个try...catch...中
try{
//需要处理异常的代码
}catch(XXXException ef){
ef.printStackTrace();
}

我们方法一就是要将我们不确定的代码放入try......catch中,先进行try一下,如果没有异常,则不会触发catch,没有输出,一旦出现异常,那么catch就会工作,在catch中捕获异常信息,根据异常信息进行补救措施。

如以下代码:

从结果可以看出,我们在输入数据的时候出现错误,这样通过自定义异常能够让我们更直接快速的找到运行或编译时的异常。

在上述中我们分别提到了三种throw,分别是Throwable,Throws以及throw,那么到底三者有什么区别?

Throwable:是指在在Java.lang包中的一个类,其包含了所有的异常和错误,其中类Error和Exception 是它

的子类。

Thows:是指在解决编译时异常,将方法中异常抛给上一级,在方法后面要加Throw Exception来进行抛。

throw:是指在自定义异常时,如果方法出现异常,那么将作为引用方法的对象抛出。即抛出异常。

希望对您有所帮助!~

H. 新手程序员易犯的六个错误

新手零基础学习编程,每天不可避免的都会遇到各种问题,难免会感觉很迷茫。昆明北大青鸟http://www.kmbdqn.cn/整理了新手程序员易犯的五个错误及解决措施,希望能让大家少入坑。

不使用版本控制系统

一旦你开始对代码有点熟悉的时候,学习如何使用VCS就应该成为你的首要任务。

这个系统有很多的高级功能,这对我们来说很重要。但一开始,通常会专注于settinguprepository以及committing,这有助于新手跟踪开发的进度。然后,学习fetching/pulling和pushing的概念也是很重要的,这样就可以拥有一个在线备份存储库。

2.不去阅读比你优秀的程序员的代码

北大青鸟校区老师相信这是学习的一个重要部分。新手学员常常疑惑,我为什么还要花时间去读别人的代码,在一个较大的开源社区里,学习者会有机会向优秀的程序员学习。在这里,新手可以找到一些使用你熟悉的代码编写的项目,并对它们进行深入挖掘和理解。当然不必理解所有的内容,只需要分析其中一小部分代码,这些都会让你受益匪浅。

3.快速切换语言或技术

的确,能学到一点东西的感觉会很好,在语言和技术之间切换也是有趣的。但如果新手学习者在学习过程中经常这样做,就会适得其反,也会给造成很大的损失。相反,如果对一项技术有很深入的了解,想要切换其他技术语言就会变得很容易。

4.没有完成主要项目

这是北大青鸟校区老师在观察学员自我学习过程中易犯的一个问题。一大部分新来的学员对软件体系结构有着很大的兴趣,喜欢尝试不同的模式,框架和方法来学习一些特定需求很好的编程实践。但通常,部分在编写了代码的核心部分以形成一个很小的工作演示后,就倾向于“置之不理”,然后转移到别的项目上。

5.不关心代码质量vs过于关心代码质量

没有质量问题的丑陋代码比有质量问题的漂亮代码更好。一开始可以不关心代码质量,只要你对这个问题有意识,并且愿意在编程结束时进行清理和解决问题。代码质量是很重要的,但如果没有找到平衡,就可能会过度框架住新手的应用程序。

6、不对代码进行单元测试

单元测试可能会让你觉得在莫名其妙地重复着工作。但是,将测试加入到学习的工作流程中,这从很多方面看都是有益的。


阅读全文

与程序员犯过什么错误相关的资料

热点内容
努比亚Z5无命令 浏览:640
展示网站云服务器 浏览:870
代码混淆器php 浏览:365
贝恩pdf 浏览:207
丙烯pdf 浏览:366
云服务器华硕 浏览:711
sublime3运行python 浏览:188
怎么把安卓视频传到苹果上面 浏览:81
手机拍鬼片用什么app 浏览:640
爬山虎app是干什么用的 浏览:505
有哪些写给程序员的歌 浏览:49
成都市命令 浏览:993
建立系列文件夹 浏览:983
苹果开机白屏带文件夹问号 浏览:733
体验服为什么服务器会关闭 浏览:41
酒店命令 浏览:750
中走丝线切割编程视频 浏览:80
衣服压缩袋手泵原理 浏览:714
通达信编程书籍 浏览:981
车用压缩天然气瓶阀 浏览:971