Java 开发分享

上周Java入门内容分享,分享内容如下图,交流的话题由浅入深地进行,下面是分享的上篇,包括java开发能干嘛,写代码的习惯,数据库等4个内容。

学习Java能干嘛

Java是一门后端开发语言,它目前流行了20多年了,用它可以开发企业应用,游戏应用等等,我们常见的学校的选课系统,互联网的电商系统,政府系统,电力系统,金融系统等等。

京东,淘宝等等都是Java开发的,主要是做系统的后端开发,Java其实分为3个部分:J2SE,J2EE,J2ME,其中游戏开发就是用的J2ME。目前行业主流的后端开发,主要是结合网站做的后端开发,用的技术是J2SE和J2EE。

企业里Java开发具体做什么

企业里大家用java一般做后端开发,java是基础,J2EE是企业应用的重点。大家进入公司后,一般会根据公司的性质,加入到具体的项目,进行对应项目内容的开发。

J2SE就是Java基础,J2EE就是企业应用开发,具体一点,Java基础就是Java入门,包括面向对象,多线程,io,异常,集合类等等,J2EE就是企业应用开发,包括jsp,servlet,cookie,session等。

java基础+企业开发构成了公司里任何项目开发的基础,进入公司后,根据进入的项目组进行具体的需求开发,主要是对需求进行系统实现,测试和上线。

项目里面除了java相关知识,还需要数据库知识,Linux基础知识,目前流行的框架基本封装了J2EE的servlet知识,大家学习框架,最好要学习下J2EE的知识,这个是后续技术发展的必要点。

学习Java学不进怎么办?是自学还是培训班?

学习Java这块是这样的,大家如果想要突飞猛进,体系化,建议参加培训班,培训班目前1万上下半年左右的时间,目前培训班针对有基础的同学,基础薄弱的可能跟不上。

自学的优点是时间灵活,可以从0开始,目前网上的资源很多,自学适合时间充足的人,尤其是大学生,对于工作中的人来说,培训来的快,自学需要大家花费更多的时间。

培训确实需要花费很多的金钱,自学的话需要花费很多精力,技术这么多,如何聚焦是个问题,自学的同学需要的是体系化学习,有钱可以培训,时间充足可以自学。

但是不管培训还是自学,技术这个东西要靠自己实践的,自学的话,首先想了解的不应该是什么书籍,而是自学如何形成体系。

写代码注意事项

没参与过开发的东西,对写代码的注意事项体会不会太深,项目里面写代码是有很多要注意的地方。比如说你的代码的命名,代码包的结构,然后你代码的这种注释,还有代码的这种方法的这种封装等,都是要注意的。

以上提到的其实是代码开发的基本要注意的,那么再往深入一点说呢,你代码异常的处理,代码的日志的处理,有效日志的打印和输出,有助于解决你项目里面有效地解决项目问题。

对象判断与字符串判断

还有写代码的话,你必须得注意,这种空指针的判断,也就是我们使用对象的的时候,一定要判断对象是否为空。这是开发的一个最基本的一个东西。

还有字符串的判断,那么字符串的判断你是用==呢,还是用equals?等等的话,他是判断的是两个对象的地址,equals的话他判断的是两个字符串的内容。

再比如字符串的操作你如何处理,你是用 += 去拼呢,还是用StringBuffer ,还是用StringBuilder ,这里面都是对开发者的开发经验是有要求的。

bo vo dao的区别

POJO(Plain Ordinary Java Object):简单而言,就是一个简单的对象,而且没有任何规则约束。也就是我们平常说的Javabeen。

DTO(Data Transfer Object):数据传输对象,单纯用来数据传输的对象。

PO(Persistant Object):持久对象,可以看成是与数据库中的表相映射的 Java  对象,PO  不包含业务逻辑和数据逻辑。

BO(Business Object):业务对象,和业务逻辑相关的,类似于DTO。

VO(Value Object):值对象,其实和 BO  、 DTO  、 PO  差不多。

DAO(Data Access Object):数据访问对象,操作数据库连接数据库使用它去做CRUD的操作。

在实际项目开发中,不会分这么细,基本上用been的对象,在项目的包结构里分好就可以了。

sql语句

Java很重要的一块内容就是数据库的开发,其实数据库呢,最主要的就是通过sql去操作。

sql最主要的就是增删改查,基本上是掌握sql的那些语法select,update,delete等,还有一些相关的关键字,group by,order by,limit等等,这些东西呢,大家都要去练习了,再往深了说数据库建表,建索引这些东西。

数据库索引,建立索引时需要注意的问题

在我们开发中索引应该说是很重要的一块儿,sql性能优化也是基于这种索引的机制,然后我们才能对sql进行优化,提高它的查询效率。在数据库开发中,要想提高查询效率就必须要建立索引了。当数据表里面的数据量很多的时候,建立索引会提高我们的查询效率。

那我们为什么要建立索引呢,比如说你一张表里面就几百条,几千条数据甚至就是几万条数据,那不建立索引查询效率其实也是很快的,当你数据超过几十万,几百万,几千万的时候,那你不做索引的话,那他的查询效率简直就非常糟糕,查询效率相当的低了。

那建立索引我们需要注意注意什么呢,有以下下几个方面,第一个就是说,我们建立索引目的是为了查询,那你要建立索引的字段,一定是你查询的where条件里面的;

第二就是说,where条件里面的字段,那你选择的这个列的值要分布的就比较广,是什么意思呢,就是说这个列的值出现的重复概率的比较少,就是说很好的把数据区分出来。

你比如说性别,性别一般就是男和女。那这种区分度就很少,假设有1000的数据,如果女性有500万,那剩下的男性相当于还是500万,用性别做索引可以匹配的数据还是很多,它没有区分度的,所以用性别做索引效果就不好。

第三个需要注意的地方就是索引不是越多越好,因为索引也会要占据我们数据库的这种空间,当索引建立的太多的时候,那么维护索引也会给数据库带来很大的代价。

数据库分库分表

为什么我们需要做数据库的分库分表呢,刚才讲到了,数据库索引可以提高查询效率,当数据量再大的时候,数据量过亿,上十亿,上百亿的时候,这么一张大数据量的表,那你通过索引也是没办法解决这种查询效率问题。那只能通过分库分表来实现这种高效的这种查询的性能。

分表常用的方式有两种,一种是垂直拆分,另外一种是水平拆分。垂直拆分就是说,你把一些表里面的列,分布到不同的另外的一张表里,做成扩展表;水平拆分就是说,把一张表按条件拆分到不同的表。

假设有一张用户表,用户一般的属性有登录名、密码、姓名、性别、相关的这些东西,假设他的属性有20列,那么垂直拆分就是说,我把这个用户表的一些常用字段放到一张表,另外一些不常用的字段放到第二张表里,作为第一张表的扩展表,那么这2个表就是垂直拆分。

水平拆分就是说我一个用户表有20个字段,那每张表都是20个字段,把一部分用户放到第一张表,一部分用户放到第二张表,以此类推,把用户表水平扩展,从而使单个用户表的记录数减少,以此来提高查询效率。

水平拆分和垂直拆分的使用场景

垂直拆分是把一个表里面的列拆分出来放到不同的表里,那他解决的问题就是,我数据量还不是那么大,一个表里面的数据行数不是那么多,但是表的数据列数特别多,那就应该把这个列给他拆出去,把一些重要的字段放在一个重要的表里,那些不重要的字段,把它拆出去作为第二张表,作为这张主表的一个关联表,这个是垂直拆分的使用场景。

水平拆分的使用场景,现在互联网上使用的这种大表,基本上都是使用的水平拆分,也就是说水平拆分的目的是解决大数据量的一个查询的效率,那么多大呢,一般就是,上千万啊,上亿的数据,需要把它拆分,拆分的目的就是把一张表里的大量的数据拆分到多张表里进行存储,也减轻我这种数据库单表的查询的这种压力。

那我给大家举个例子啊,比如说某网站上,他可能有好几亿的用户,这些用户他肯定不会放在一张表里,他可能是说把这个好几亿的用户放在不同的表里。那么我们假设该网站有10亿的用户,如果说一个表里存放用户的最大量是一个亿的话,你就需要建立10个表,如果一个表存放5000万的话,那你就需要建立20个表啊,水平拆分就是这个意思。

水平拆分具体怎么去分一个表呢,我们还拿这个用户来举例,水平拆分的方法就有多样。

比如说按用户的ID分,比如说我一张表放5000万用户,那你从1到5000万放在第一张表,从5000万到1亿放到第二张表,以此类推,这是一种方式;

还有一种方式我们可以按照这种用户的地域来分,比如说你是上海的,就放到上海的表,是北京的用户就放到北京的表,等等;

第三种方式,我们可以按照用户的某个列进行取模,比如说用户的这个号码,那么我们可以给他取模,如果要分成4张表,就模4,如果要分成8张表,就模8,按取模的余数放到对应的表里。

数据库分库

如何对数据库分库,分库就是把一个相同类型的一些数据,模型的这些表结合起来,放到一个库里;把另外一些数据、模型,放到另外的库里;分库的目的就是,因为一个库的可承受的压力是有限的,不可能把我所有项目里面的这些数据模型、这些数据表都放到同一个数据库下,因此就需要进行分库存放,按业务模块来进行拆分。你比如说,产品相关的数据,放到产品库,订单相关的数据,放到订单库,用户相关的数据放到用户库。

数据库分页

分页的问题很简单,说到数据库的分页,要看你用的是什么数据库,如果你是MySQL的话,分页的关键词是limit,如果你用的是oracle的话,分页的关键词叫rownumber。使用它特有的这种分页的这种关键词,查询出不同的数据,你在代码里面,通过你的组装啊,去把数据返回到前段展示就好了。

然后在java代码里面,一般都会去封装一个分页的类,这个类有5个关键的要素:当前页,总页数,每页大小,从第几条数据开始,总数据条数。把这些要素组装以后,就会很方便的做出分页的模型。

过滤器和拦截器

过滤器和拦截器,是我们Java开发中很重要的一块儿内容。

过滤器,依赖于servlet容器,是servlet规范规定的。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。

我们使用过滤器的目的是用来做一些过滤操作,在web.xml里进行filter的配置。比如:在过滤器中修改字符编码,做编码的转换,汉字的转换,所有请求先通过filter进行处理,拦截一些关键词或者无效字符的处理。

拦截器,依赖于spring等web框架,在实现上基于Java的反射机制,属于面向切面编程的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

关于开源框架,高并发架构,职业发展的分享,下一篇文章会提到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值