草鞋林 发表于 2023-10-3 19:55:49

JAVA自己写什么功能可以提升技术?

JAVA自己写什么功能可以提升技术?

edaole 发表于 2023-10-3 19:56:26

搞三个事儿就行,挺锻炼人的:
1、读开源软件的源码,我推荐kettle和elastic search,现在看落伍了,但是说实话你看明白了就不这么想了。
当然我只是建议,说实话我脱离一线好几年了,现在有什么更牛的东西真不知道。
从技术角度来看,es深度挺深的,比Hadoop那些玩儿深,因为它扩展以后就是NLP体系了,体系外溢太广了。所以就分平台侧和算法侧,都不容易做。我最早玩Hadoop的时候还是nutch呢,看法可能有一点偏颇吧。Hadoop体系现在太庞大且过时了,但是内蕴的技术内核,没太大变化的。读完了核心实现,其实现在那些东西,基本上一样的。
至于kettle,屎山+设计模式,学会了以后,你写的代码基本上没人乐意改,有助于延长职场生命力哈哈哈……
2、自己尝试做一个数据库,什么类型都行,仔细衡量在性能和可靠方面,把深度扩展到jvm,乃至于CPU、缓存等……在扩展,知识就很深了,早期的交换机,插哪个口性能都有区别的。(现在的不清楚了,太久脱离一线了)。
3、最后,参与一个牛逼的开源项目,一定得是国外的。我当年参与了一个国内知名开源的贡献top3,结果创始人赚钱了跑路了,项目死掉了。

扩展:
自己多造轮子。别相信前辈说什么为什么造轮子,纯属S13才说这种话,造不出来你就直说。这跟造不如买是一个水平的目光短浅的说法。
但凡劝你不要自己造轮子的,大概99.999999%,技术都不咋地。

但是更实在一点说吧,我建议,我上边说的你都当放p,现在哪个火你就研究哪个,一定要研究到源码级,并且在网上写笔记,时间久了,大厂一些325会偷你的东西去做开发。
重点来了:你技术不行,每个关键节点都容易产生一个隐藏的BUG。比如自己封一个map,不小心命名成concurrenthashmap,多线程一访问,死循环了,乐子就来了。
这一点吧,我没法详细的讲,以我的技术,我不小心留下的bug多得数不清,所以每每想辞职的时候公司都万般挽留、依依不舍……老板默默无语两眼泪……
总之,这方面我不是很懂,我就是技术不行,bug多,所以导致我的职场生涯顺风顺水:毕竟,老板认为不应该开了我,否则bug咋办对不对?

不是说大厂技术菜搞不定这事儿,而是大家都奔着kpi没功夫研究,搞不定就干脆招进来找一个做,不比自己研究代价低多了吗?
更何况你们知道我为啥推荐kettle吗?设计模式这玩意儿一旦入坑了,不容易追寻源码你懂吗?我的意思是说:你们学好了,以后就不会轻易写这么烂的代码了。

ps:扩展知识。
不如读一读我以前写的东西,不同年龄感受不同。大多数人没法做到我刚说的那样的。
不要太看重技术了,不一定有用。

ps:扩展2。
技术到了某个程度有几条路,发paper、做专利、在大厂被菜13吹捧、写博客混知名度、有个业内拿得出手的成绩……
想把技术最深,要么靠吹、要么靠运气,就好像国内软件行业技术上来说,一塌糊涂,还有人天天和我吹xx什么乱七八糟的。国内互联网和软件行业,都是建立在开源软件基础上的,真明白的,大概真的没有脸自吹自擂。

ps:扩展3。
技术玩深了大概有三个关卡:算法和数据结构(或者说就是算法)、对计算机底层的理解、实践水平。
而最终盖棺定论的,是你到底有没有一个可以拿得出手的东西。

碎雨寒辰 发表于 2023-10-3 19:57:09

写交易所:
项目架构设计手写Spring:
手写Spring手写Tomcat:
手写Tomcat应该可以升到架构师。

lnfsmnb 发表于 2023-10-3 19:58:09

搭建一个web管理系统,实现100万张图片的管理和搜索,以及10万个种子文件的管理和搜索,当然还有自动爬取图片和种子文件的功能。
搜索功能要支持全文搜索,和 关键词过滤。
把这个管理系统做出来,且能顺畅管理前面说到的这个量级的内容,你的技术就可以达到很不错的水平。

<hr/>update 2023.09.14晚:
没想到评论的不少,补充一下技术关键点的说明吧,能独自搞定这些技术关键点的,35岁之后下岗的可能性会很低不少。
1.图片的获取
解析网页,批量下载图片,图片内容md5简单防重。一般访问海外的网站比较安全,最多被封ip,不会有其它后果。
2.bt种子的获取
infohash的格式是有32位和40位的,需要归一化,需要从某些url提取解析提取infohash。
需要通过某些网站通过infohash下载种子文件。
3.图片相似度去重及清洗最佳图片
有些图片只是被多加了水印,且层层转换,会存在大量冗余图片,需要一定的算法能力去清洗出低画质图片,尽可能只保留高画质,且尽可能聚合归类。
4.图片exif信息解析,图片与网页内容的关联梳理等。
5.图片内容加密存储,不想直接被查看,或者是想使用网盘存储,AES加密一般是需要的。加密则涉及密码的管理,全局只使用一个密码的安全性是很低的。
6.网页内容的分词处理,过滤不必要的干扰内容。
7.bt种子的解析提取,bt种子内的垃圾文件过滤逻辑处理。
8.网页内容和bt种子内容中的全文搜索(有两个bt搜索网站,一个只支持按bt种子文件名搜索,那种文件名是1的,没法搜索到种子内的优质内容,另外一个搜索网站,有全文搜索功能,但是没有过滤垃圾文件名,搜索结果精度有限)。
9.保存大量文件的目录划分规则,以及大量小文件的存储优化。
10.使用图形识别技术,将有共同特征的图片自动聚合在一起,便于搜索。
11.数据库存储上百万记录之后,可以做下分库分表的练手。
做好这些,既能锻炼技术能力,又能收获大量内容,还能快速精准的找到自己喜欢欣赏的内容,一举多得。

update 2023.09.28 :
我不会白嫖别人的技术,也不会白嫖别人的资源。以后有兴致了再写点文章分享下原创的技术知识点总结。

http://picx.zhimg.com/50/v2-c80459716ede79bc0d14b23422d96203_720w.jpg?source=1940ef5c

http://picx.zhimg.com/v2-a34228ce90aa6e98044e3e6c89934b8c_r.jpg?source=1940ef5c

scrollll 发表于 2023-10-3 19:58:41

本人首先想说的是,一般提升Java技术的方式是,在跑通人家基础上理解流程和代码,即提升技能是靠抄,而不是凭空去写。讲得再明确些,想通过自己写代码提升的,往往甚至都未必能入行。
为什么得靠跑通+理解的方式去提升,而不是凭空写的方式去提升,本人有专门的文章解释,甚至大家还能看到具体用“跑通+理解”方式去提升的方法。
怎么吃透一个java项目?下文就具体说说,哪些java代码能帮助程序员提升技术,以及能提升到什么程度。
1 跑通Java核心部分的代码,只能说知道个皮毛,甚至连找工作的门槛都没到。
比如跑通个集合,多线程,或者是带界面的游戏,或者是界面+JDBC的xx业务系统,这些只能证明会java,哪怕是跑通10个20个只是带界面的游戏,甚至连初学者的门槛都没达到。
2 跑通个spring boot(或ssm或其它web框架)框架,能针对单表做增删改查的业务,这至少达到了找工作的门槛。
对于初学者来说,找工作最好是需要能证明有项目经验,而如果当能用spring boot连数据库做增删改查,那么就能证明自己做个单个业务模块,再扩展下数量,真能证明自己做过项目了。
在做会spring boot连数据库做增删改查的基础上如何写简历和找工作,大家可以看我如下的文章。
老胡聊Java:23年,在Java行情一般的情况下,说说通过自学找java工作的操作要点3 对3年内项目经验的java开发来说,提升技术不是靠写功能,而是靠排查解决实际问题。
一方面是靠看日志分析日志,分析异常点的位置以及解决方法,另一方面可以逐步提升解决问题的难度,比如一开始是语法异常,再后面是数据库异常,再可以是性能调优方面的异常,再升级一下就可以是部署或者是组件使用方面的异常。
4 再要提升一般就得通过使用组件了。
Java程序员的发展方向是架构,架构技能一般是通过使用组件开始学,比如一开始是用redis,kafka等组件,或者是nacos等微服务方面的组件。
所以java程序员在找到工作后,固然可以通过写业务代码来熟练技能,但要提升的话,一定是两个方向,第一刚才已经讲过,是排查解决实际问题,另一个方向就是先去从api层面用redis或nacos等组件,然后再去排查组件层面的业务问题。
但是一般小公司项目能给出的技术实践上限是使用组件的api,后面更值钱技术的实践机会,可能要中大厂才能给予了。
5 会用(分布式或微服务)组件意味着java程序员开始向架构师升级,升级过程中一定得从运维和部署的角度去搭建组件的环境,或者是解决组件层面的问题。
比如一般开发是会用redis,初级架构是能排查redis的实际问题,或者是能搭建redis单机版或集群,而redis层面的任何问题,比如是性能问题或各种异常,其它人搞不定,高级架构或公司顶梁柱级别的架构,一定得能通过看日志,debug(redis或其它组件)的底层源码来解决。
也就是说,做熟增删改查业务的java程序员如果要提升,得实践组件配置部署,组件使用,以及排查组件问题的相关技能。
6 再往上就是搭建轮子的大牛级别程序员了,比如开发个seata组件,或者开发个skywalking组件。
而在提升过程中,写业务功能的代码,确实有帮助,但第一帮助有限,第二只能帮忙提升到java开发的熟练工(一般是高级开发),再要往上提升,一般得先去得到相关技术的实践机会,否则如果没实践机会,哪怕自己看资料,或者去买资料看,效果不大。
顺带说下,java高级开发提升到架构,一般是个门槛,原因是不少公司没法提供架构级技术的项目实践机会,而提供架构级技术实践机会的公司,在招架构师时,一般都要求有架构实践经验。
对应的方法一般是,先通过准备面试,在技术不到位的前提下拿到项目实践机会,然后再到项目里去提升,相关做法本人也有文章。
小公司程序员自学是否能达到大厂程序员的技术水平?虽然说,实践出真知,但在具体操作起来,如果一直做重复劳动,那么提升毕竟会有上限,比如做熟增删改查只能帮忙提升到熟练工,而本文列出的一些提升渠道和方法,应该可以帮到大家。
写到这里,本人再从反面来讲讲,java方面写哪些代码,或者看哪些技能点,对提升的帮助不大。
1 java是做web后端开发的,所以用java实现界面方面的代码,比如做游戏,或者写UI等桌面程序,运行这部分的代码基本没什么用。
2 通讯相关的socket代码,看了效果不大,多线程相关的代码,如果没使用场景也别看,当下高并发多线程这块,基本上是用组件,而不是自己用多线程对象实现。
3 除非是要解决实际问题,那么可以通过debug底层源码的方式熟悉spring boot, java core,redis或其它组件的底层代码,否则别去看底层源码。底层源码除了能帮助解决实际问题外,另外一个唯一的价值,就是结合项目应用说辞用在面试上。
4 除非有用到,否则别去细看算法源码,而且当下大多数java项目是做应用,而不是写算法。
最后再啰嗦下,java方面,提升的捷径一般就两个,第一是通过面试找到能给予相关技能(各种技能包含值钱技能)实践机会的项目,第二在项目里,除了要写代码以外,更要多解决实际问题。

ylyl007 发表于 2023-10-3 19:59:29

自己从零搭建个框架,在这期间可能会遇到各种问题,你甚至需要对底层的源码去进行研究
从最简单的开始,然后一点点的加算法,加线程池,加缓存,加多数据源,加消息队列,一系列下来,用最原始的方式去写代码,写完之后再去参考借鉴一些优秀的开源项目,去优化自己的代码,让代码尽量的简介,去除臃肿的形式。在这期间多练练设计模式的运用,使用各种方法去优化代码。最后写个测试,看看自己代码还有哪些可以优化的,整完之后,有心情了还能再自己搭个网站,把自己在这过程中的经历写成博客,总结一下其中遇到的问题与搭建历程。
页: [1]
查看完整版本: JAVA自己写什么功能可以提升技术?