欢迎来到98聘

java毕业设计心得体会如何写我教你。(精选5篇)

更新日期:2025-12-08 15:12

java毕业设计心得体会如何写我教你。(精选5篇)"/

写作核心提示:

写一篇关于Java毕业设计的心得体会作文,需要注重真实、深入、有条理地展现你的学习过程、遇到的问题、解决方法以及最终收获。以下是一些关键的注意事项:
"一、 内容方面 (Content Focus):"
1. "真实性 (Authenticity):" "真情实感:" 写你真实的感受和思考,无论是成功的喜悦、失败的沮丧,还是解决问题的成就感。避免空话、套话。 "具体事例:" 用具体的例子支撑你的观点和感受。比如,提到遇到了技术难题,可以简述是什么问题,你是如何查找资料、请教老师/同学、尝试解决,最终如何解决的。这比泛泛而谈更有说服力。
2. "深度反思 (Deep Reflection):" "不仅仅是过程记录:" 不要仅仅罗列你做了什么,更要反思你 学到了什么,哪些地方做得好,哪些地方可以改进。 "知识应用与深化:" 反思如何将课堂上学到的理论知识应用到实际项目中,以及在实践过程中对知识理解的深化(比如对某个框架、设计模式、算法的新认识)。 "能力提升:" 思考在项目开发过程中,你的哪些能力得到了锻炼和提升?(例如:编码能力、调试能力、问题解决能力、团队协作能力(如果有的话)、项目管理能力、文档编写能力等)。

四千字干货 - 十三位Java工程师的学习心得

史上最强Java学习大全,多亏我足够无耻,才从公司十三位Java程序员口中问出方法来。

没错。

这篇文章总结于我们公司十三位使用Java作为开发语言的程序员前辈,方方面面近四千字。

作为十大编程语言榜首的Java,真的太多人学也有太多要学的东西了,以至于后台总有人问Java该怎么学,甚至还有具体问编程问题的。

乘此机会,整理Java程序员的从入门到精通之路,分享一下这么多年来我们公司Java程序员的学习心得。

为了这篇文章,我是费尽口舌,软磨硬泡收集到信息之后,又花了一整个星期才终于写完。

内容框架如下:

  1. 职业规划
  2. 学习安排
  3. 实操技巧

这一点专门针对题主所说的「大部分时间都在写着重复的业务代码,感觉成长很低」这一问题。


一,职业规划

职业道路该怎么走?

因为题主已经明确了自己想要成为「真正的java开发工程师」,所以这里只介绍Java相关的职业规划。

Java这门语言可以发展的方向很多,如果想走开发这一条路的话,至少有七种选择:

传统领域:

  • 后端开发:Java、Shell、Python、SQL
  • 全栈开发:Java、HTML、CSS、JavaScript、Shell、Python、SQL、PHP
  • 移动开发:Java、C、C++、Python
  • 游戏开发:Java、 C#、C++

新兴领域:

  • AR/VR:Java 、C#,、C++
  • 物联网:Java、C、Python
  • 计算机视觉:java、C++ 、Python

本文不做其他编程语言的发展道路以及非开发道路的职业分析,如果感兴趣的话,可以移步作者的另外一篇文章,里面有非常详细的介绍。

计算机专业学什么语言好找工作?www.zhihu.com


了解完了一门语言可能的职业发展方向之后,你就可以根据你的个人喜好以及当下情况,选择不同的方向钻研。

因为你的人生是你自己的,我只能给你提供道路,没办法帮你选择。所以第一步,我只能帮你到这里了。


二,学习规划

通过上面的分析,你可以看到,不管你走哪条道路,你都不能只会一门编程语言,也就是说「真正的java开发工程师」不能只会用Java,你必须得会一些其他辅助性的语言。

所以,关于学习规划,我会分为下面三个部分来讲:

  • 编程通用知识
  • Java的学习步骤
  • 其他编程语言的学习

编程通用知识:

每一个知识点后面,我都放了一门推荐课程,如果自觉掌握扎实,可以跳过。

  • 算法

算法导论-麻省理工:

https://www.bilibili.com/video/BV1Tb411M7FA?from=search&seid=12004933714620194673​www.bilibili.com

  • 编译原理

编译原理-哈工大:

https://www.bilibili.com/video/BV1zW411t7YE?from=search&seid=7656665281813628810​www.bilibili.com

  • 数据结构

数据结构-浙江大学

https://www.bilibili.com/video/BV1JW411i731?from=search&seid=5548436889164823839​www.bilibili.com

  • 操作系统

计算机操作系统精讲-华中科技大学

https://www.bilibili.com/video/BV1Wb411H7Ge?from=search&seid=4742768788475129453​www.bilibili.com

  • 网络原理

计算机网络原理 -哈尔滨工业大学

https://www.bilibili.com/video/BV1gb411k7gd?from=search&seid=5937420088890690226​www.bilibili.com

很多人都会问,学这些有什么用?我编程又用不到。

这里我举个例子,都说学习就像盖房子,而基础学习就是打地基,没有地基能不能盖房子?当然可以!

但是你的房子想建高是不可能了,你的房子想建牢靠也是不可能的了。

所以,为了你之后的学习更顺畅,一定要耐着性子哪怕逼自己也要把这一块给啃下来。

这直接决定了你之后的发展高度。

Java的学习步骤

这一块分为学什么以及怎么学两部分。

学什么

1.语言基础

说白了,就是学习这门语言的基本语法。

需要注意一点的是学习Java语言基础的时候,一定要多动手,不要觉得自己理解了就跳过去了。不然等你真的要实操的时候,你会发现有很多细节是你之前忽略了的,而这些细节阻碍了你的整个编程。

下面是推荐的一些书籍以及课程:

书籍:《Head First Java》《Java核心技术》

视频:

Java零基础教程视频

https://www.bilibili.com/video/BV1Rx411876f?from=search&seid=15227919425633671150​www.bilibili.com

学到最后,你能掌握下面这些知识就够了:


2.进阶学习

1.多线程高并发



推荐课程:

马士兵2020年最新Java多线程高并发讲解:

马士兵2020年最新Java多线程高并发讲解——20年架构师告诉你Java多线程与高并发应该怎么学_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

2.Web开发



它们的学习顺序应该是从上到下,因此最先学习的应该是前端开发的HTML/CSS/JS三种语言。

课程:

HTML5+CSS+JS全方面解析

【星月教你做网站】HTML5+CSS+JS全方面解析,附上节课回顾word文档帮助记忆,最新最全的HTML5教程—_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

学完这方面的内容后,你可以试着自己写一些页面。要求是尽量做的漂亮一点。

接下来,你需要学习的是Servlet/JSP(J2EE)部分,这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的。

Servlet和JSP

Servlet和JSP(JAVAEE基础)【北京尚学堂·百战程序员】_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

还是那句话,一定要多动手

3. 数据库使用

你需要学会使用数据库,mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候,就会接触到的,其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库,还要学会使用数据库客户端工具,比如navicat,sqlyog,二选一即可。

MySQL 基础+高级篇- 数据库 -sql -尚硅谷

https://www.bilibili.com/video/BV12b411K7Zu?from=search&seid=11418667468726396464​www.bilibili.com

4、开发框架



开发过程中一般为了提高效率,会使用一些Java Web框架,而这也是你需要掌握的。

目前比较主流的是SSM框架,即spring、springmvc、mybatis

学习这个框架,经常接触到一个叫maven的工具,这个工具也是你以后工作当中几乎是必须要使用的工具。所以在你学习搭建SSM之前,可以先了解一下maven的知识,不需要太深入,只要大概即可,进一步的学习可以边用边学。

至于学习三个框架的搭建,你一定要可以快速的利用它们三个搭建出一个Web框架。

课程:


mybatis-spring-springmvc-Java一站式学习

https://www.bilibili.com/video/BV1mE411X7yp?from=search&seid=15801924176319161348​www.bilibili.com

学完之后,你可以尝试着做一个简单的增删查改的Web项目,检验学习成果。

其他编程语言的学习

作为一个程序员,不可能靠一种语言走遍天下。所以你还要拓展至少一种其他语言。

至于,精通python之后的编程语言该如何选择,首先就得看你自己的工作需要。

或者,你可以参考下面的这篇文章。

最热门的十种编程语言,总有一种适合你


怎么学?

每个人的学习方法都不一样,有的人喜欢边做项目边学习,有的人则喜欢学一段时间做一个项目,有的人喜欢看书学,有的人喜欢看视频学,这些都不是问题,重要的是找到适合你自己的。

但下面这几点,最好还是不要去做了,因为我带了这么多人,敢这样做的都是事倍功半,结果惨不忍睹。

1.一味的对着别人的代码去敲。

刚开始不会做只有跟着别人敲,这不是问题,问题是跟着别人敲了之后你要自己理解自己记忆把它变成自己的东西。照着别人代码敲一遍两遍哪怕三遍,除了让你看得仔细点,练了打字外并没有其它任何帮助。

因为模仿复现不是关键,思考才是关键。你要能做到思考学习别人思路后,脱离书本和博客,完全自己实现功能。只有这样,你的学习才是有效的。

2.想着一口气吃成个胖子

这一块的情况稍微少见,但也不是没有,有的人急于求成,学习只学个大概只求个会用,没有做到知其然还知其所以然。

一个典型的例子,我两年前带的应届生,北京一所高校来的。当时他做的那部分出了点问题,我就推荐了一本书给他,让他看完后把这个问题解决,因为不是很急,我说一个星期搞定就行了。结果两天后,他就跑过来跟我说书看完了,问题也解决了。我问他怎么做的,他说他看了个大概后直接照着书上做了。

技术这玩意儿,不是看了个大概能照着做就会了,一口气吃不成个胖子,必须得扎扎实实地把事情做好。所以不要试图一次性解决所有问题,这里给个建议:可以将每天的学习过程拆分成小块,分阶段学习,这样的效率会更高些。

说完了第一点如何学习基础知识,接下来说说第二点如何巩固基础知识。方法千千万,最有效的我认为还是刷题,有方法的刷题。

下面这个刷题方法很普通但也很实用,推荐给你:

第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。

第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。

第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。

在这里,给大家推荐两本书还有一些学习网站,能够让大家学得更轻松些。

三,实操技巧

这一点专门针对题主所说的「大部分时间都在写着重复的业务代码,感觉成长很低」这一问题。

如何找项目练手:

1.做一些实操性强的个人项目,自己练练手

田纳西大学助理教授奥斯汀·亨利结合自身经验,给出了一份“程序员都应该尝试的挑战性项目”清单,包含下面六个项目,我之前做了一遍觉得还不错,推荐给大家:

  • 文本编辑器
  • 2D游戏-太空侵略者
  • 编译器-Tiny BASIC
  • 迷你操作系统
  • 电子表格
  • 电子游戏机模拟器

每一个项目都存在不同的挑战,比如文本编辑器就要求在不使用GUI框架中内置的文本框组件的情况下,搭建支持光标移动、选择、插入和删除操作的文本框并将文本文档存储在内存中。

如果你能解决掉这些项目中的这些问题,然后把项目独立完整的做出来并且运行成功,你的能力肯定能再上一个台阶。

2.写技术文章

大家想必都知道费曼技巧,这也是其中的一种应用了,把你自己弄懂的东西教给别人,让别人也能看懂,在这个过程中你肯定还是要把一个完整的项目给做出来的,一整套下来,你会将自己理解的东西掌握的更透彻更深入。

也算是一种不错的实操方式了,能让你的基础更加牢固。

3.接一些开发兼职

这是三种方法中实操性最强的一种了,没有之一。

而且不用说,这也是最快最有效的方法了,毕竟编程这件事,光有理论是不够的,动手实践才是关键也是最终目的。

但兼职也有很多坑很多小门道,你首先得注意项目是不是靠谱,像那种没有需求文档的就不要接了。

这里我分享一篇很实用的文章,不仅教你如何判断项目是否靠谱,还整理了国内外总计24家IT类兼职平台的特点及区别,希望能对你有所帮助。

六个接私活的网站,你有技术就有钱

推荐大家试用一下UUID V7做数据库主键

UUID(通用唯一识别码)嘛,就是类似这样“
e48364cd-e497-4c90-a775-a05c79bd9167”,因其理论上具有全局唯一性,做数据库的主键是很好的。

但又因为其无序性,再加上MySQL(InnoDB)中,主键的聚簇索引是B+树,必须保持有序,所以会导致频繁页分裂,影响写入性能,增加磁盘I/O,因此实践中主键还是用自增。

不过自增ID又有其自身的麻烦,导致项目实践中不拿它来做业务。例如:

  • 自增ID很容易让攻击者按顺序爬数据。
  • 关联表迁移的时候,丢失关系。
  • 分库扩容要调整步长等,复杂易出错。

还有其他问题,不赘述了。

这时候要么是主键使用雪花算法ID,要么就图省事,主键还是自增,再多一个业务ID使用雪花算法(我也见过用UUID的)。

不过雪花算法也有问题,例如强依赖机器ID的配置,扩容的时候要协调,还有就是头疼的时钟回拨问题。

反正不管怎么做,没有完美的解决方案。

现在有了UUID V7,也并非完美,只是提供另一种思路。

介绍

不搞长篇大论,简单几点:

  • 128位=48位时间戳(毫秒级,UTC时区)+4位版本号(固定值0111,代表版本7)+12位随机数A+2位变体号(固定值10,符合RFC 4122 标准)+62位随机数B。
  • 时间戳保证有序(毫秒级)。有高精度时间(微秒级)需求,可以使用12位的随机数A进行填充。
  • 随机数保证唯一,与时间戳组合后,每秒10亿次生产的数,需要数万亿年才可能重复。
  • 去中心化,各节点独立生成。

注意时间戳,其天然可以作为create_time来用。

问题

UUID V7有个突出的问题就是其存储空间,如果是按照字符串CHAR(36)存储,在utf8mb4字符集下,要占144字节。

雪花ID用bigint,也就64位8个字节。

不过MySQL可以使用BINARY(16)来存储UUID,也就16字节,并且MySQL8+还内置了一些函数做针对性的处理(UUID_TO_BIN、BIN_TO_UUID 和 IS_UUID)。虽然还是比不过bigint,比CHAR(36)要好太多了。

当然既然有了时间戳,就避免不了面对时钟回拨问题,但正如前面说的,UUID V7有74位(12位随机数A+62位随机数B)随机数,在毫秒内碰撞的概率极低,数学原理和公式我就不列了,要做到50%的碰撞概率,1毫秒内要生成5300亿个ID。。。。我觉得,绝大多数情况下,我们用不着杞人忧天吧。

数据库

建表:

-- 使用 BINARY(16)
CREATE TABLE users (
    id BINARY(16) PRIMARY KEY,
    name VARCHAR(100)
);

新增:

-- 这两个ID就是我使用程序生成的UUID V7
INSERT INTO users (id, name)  VALUES (uuid_to_bin('0198cb7e-5126-7813-b7c2-a5f166b1c76a'), 'Bone');
INSERT INTO users (id, name)  VALUES (uuid_to_bin('0198cb41-12bd-7d37-a5d3-872eac14847c'), 'Leo'); 

注意,我是先新增Bone,后新增Leo,而Leo的UUID,生成时间早于Bone的UUID。

因为是二进制,所以直接查询,大概是这个样子:

要想可读性高一点,可以:

select bin_to_uuid(id),name from users;

按照ID排序也是没问题的:

select bin_to_uuid(id),name from users order by id desc;

因为Bone的UUID生成时间晚于Leo,所以倒序排,即便是Bone先新增入库,Bone也是在前面。

另外,因为UUID V7的时间戳可以天然地作为创建时间,所以我们可以这么创建表:

CREATE TABLE users (
    id BINARY(16) PRIMARY KEY,
    name VARCHAR(100),
    create_time_ms BIGINT UNSIGNED GENERATED ALWAYS AS (CONV(HEX(SUBSTR(id, 1, 6)), 16, 10)) STORED
);

新增记录的时候,直接插入UUID V7,时间戳也自动生成了。不过从工作实践中看,绝大多数情况下,还是使用独立的时间戳:

CREATE TABLE users2 (
    id BINARY(16) PRIMARY KEY,
    name VARCHAR(100),
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

这样我们就要保证程序生成UUID V7的时间与新增到数据库的时间别差太多就行。

代码

现在JDK应该还没有官方支持UUID V7,需要第三方库,例如uuid-creator:

<dependency>
    <groupId>com.github.f4b6a3</groupId>
    <artifactId>uuid-creator</artifactId>
    <version>6.1.1</version>
</dependency>

Java代码:

public class Test {
    public static void main(String args) {
        Test test = new Test();
        test.testUC();
    }

    public void testUC() {
        UUID uuid = UuidCreator.getTimeOrderedEpoch();
        System.out.println("uc id1           :" + uuid);
        System.out.println("当前时间          :" + new Date().toInstant());
        System.out.println("uuid的时间        :" + UuidUtil.getInstant(uuid));
        System.out.println("uuid的时间(秒)   :" + UuidUtil.getInstant(uuid).getEpochSecond());
        System.out.println("uuid的时间:(毫秒):" + UuidUtil.getInstant(uuid).toEpochMilli());
        System.out.println("===============");
        //也可以这么生成
        GUID guid = GUID.v7();
        UUID uuid2 = guid.toUUID();
        String uuid2Str = guid.toString();
        System.out.println("uc id2      :" + uuid2);
        System.out.println("uc id2 字符串:" + uuid2Str);
        System.out.println("uuid2的时间  :" + UuidUtil.getInstant(uuid2));
    }
}

热门标签

相关文档

文章说明

本站部分资源搜集整理于互联网或者网友提供,仅供学习与交流使用,如果不小心侵犯到你的权益,请及时联系我们删除该资源。

为您推荐

一键复制全文
下载