数据结构与算法之路
《数据结构与算法》是大学的必修教材。大学专业课我学的马马虎虎,期末也就85左右,但从学完到实习到转正一点没用过。在加上大学讲的也比较浅,现在也忘的差不多了。黄金时间都在大学,现在时间都得挤。现在回味起来:大学不知算法好,错把妹子当成宝。在我重温的过程中发现它并不是难的问题,而是能否把它坚持下去的问题。现开设此贴,以表决心!
给我一万个理由除了算法工程师之外, 基本不会在工作中会用到,最直接的理由就是为了面试,除此之外
1、这将会是一条强者之路。拒绝拧螺丝,拒绝面向API编程
2、造轮子必备。某天公司让你优化数据库或者框架,甚至想让你设计数据库和框架,你能担当此重任吗?有人表示,扯的远了,我等泛泛之辈也敢班门弄斧?还有人表示,目前市面轮子这么多,能直接用为什么要造,你能有人家造的好?
首先第一点,不要否定未来的自己。谁都是从菜鸟过来的,不要给自己设限,不要放纵自己。一年经验用三年,我是不能接受。第二点,如果只是调用API的工具人,市场竞争力在哪?公司怎么敢重用你?就算轮子造不好,也要有这种能力。有些东西,只有自己有了,才有资格说有没有用。
3、门槛变高。做IT这行技术在突飞猛进,要求 ...
设计模式之路
一个类就能解决的事情,非得拆出四五个类,还得处理类之间的关系,这是在炫技,没有实际用处,这就是我当初的想法
确实,如果代码少或者系统业务不复杂的情况下,怎么写都可以,实现了功能就好了,但在后期维护上如果没有一个好的设计,那就是在堆屎山。写的人爽,维护的人骂娘
内心os:我目前在维护的这个系统真是让我苦不堪言,就是因为当初没有一个好的设计,现在想改也改不了,业务量巨大,不想吐槽了,任务就是保证系统正常运行就好
什么情况下不用设计模式
1、没学过,或者学过不会用
2、需求简单,用设计模式确实没必要
3、工期紧,还讲究什么模式,先实现功能吧
目录
为什么要学设计模式
什么是设计模式
看看你在第几层
如何学明白设计模式
去哪学?怎么学?
设计模式的六大原则
创建型模式
结构型模式
行为型模式
总结
为什么要学设计模式在《重学Java设计模式》中有一段说的特别形象
就像火车加一节车厢不需要改动整列火车 插线板可以支持随时插入各种功能的插头 签字笔没墨水了可以更换笔芯 总之满足基本原则:做出一个可扩展、易维护、好管理的工程代码
参照spring与jdk的源码,为什么debug会经常跟丢?为什 ...
大数据学习之路
满满的都是干货。第一次创作,不喜勿喷~本文中不适合资深人士阅读,创作此文章只供学习交流,欢迎大家在评论区批评和指正。其中链接中的文章也会持续更新。大家觉得不错的话点个赞吧,鼓励我持续更新下去。不忘初心,砥砺向前(๑•̀ㅂ•́) ✧
下面这篇文章聊了聊我对大数据学习的一些感想,和一些学习方法。有兴趣的可以去看看
https://leidl.top/post/3d24dcf9
这篇文章我想聊聊我是怎么学的,奔的什么目的去学的?
大家都知道,学习要讲究一个目的,我为什么要学这个东西。通俗点说就是你得会学。不然你是学不明白的。就比如大数据中一个hadoop就够你学了,知识点很杂很散,我应该怎么找到适合自己的学习方法?应该学到什么程度才可以?如何更加有效率的学习?笔者自认为学的还可以,这里并不是代表我学了多少东西,学了多深的东西,而是我在有限的时间内收获了我想要的。打个比方经历过高考的人老师曾经肯定对你说过这样一句话“先做会的,不会的直接放过”这句话放在现在也很受用吧,学习的时间是有限的,最充裕的时候就是大学四年,但是我相信大部分人大学四年也没有谁像高中一样学下来的,哪怕高中的1/3都没有。如果 ...
我的2021
小汇总
写文章46篇
搭blog
换工作
换房子
2021春3月,参加了思特奇未来之星成人礼,思考了一段时间,感觉比较迷茫,与老板深入沟通后,产生了离职的想法,开始做跳槽准备
4月,主攻数据结构,开始刷题,备战软考
2021夏5月,劳动节帮姥爷干农活,给姥姥过八十大寿
6月,对数据结构部分进行总结->数据结构与算法之路
主攻设计模式部分,算法那俩月差点把我整秃噜了,赶紧拿别的缓缓
拉我舍友出征世界公园,什么都不开放。rnm,退钱!不过舞台剧还不错,总之不值这个票价
2021秋7月,软考通过->软考经历
对设计模式部分进行总结->设计模式之路
主攻JUC,搭建个人blog。前端其实很有意思,比起后端来说不会很枯燥
8月,blog初具规模,整理上传一波笔记,并对blog进行优化(网站加速,SEO优化等)->blog搭建
9月,在对blog鼓捣了两个月后。不满意它的布局和一些组件,魔改的时候发现很多都没见过比如pug格式与styl格式的文件,毕竟我的前端水平也只停留在前端三剑客阶段,vue也是二把刀。整了这个blog后,发现当下的前端真的是突飞猛进, ...
企业微信第三方打通记录
背景介绍企业和客户(B端)进行对接时,往往需要同步客户的组织和成员信息,现在企业大多使用的办公软件有三样:企业微信、钉钉、飞书。现需要对接企业微信,在客户授权企业三方应用时,同步组织和用户信息,方便企业使用
需求分析企业微信官方提供了开发者平台,当然你首先得需要进入一个企业,才可以登录查看开发文档
开发模式简单区分方式:企业和三方比较多,企业自己对自己,三方是别人对自己基于这种背景需求,选择三方开发进入通讯录开发,进入之前建议阅读下开发必读了解基本概念及参数
开发前提该需求不是从0开发已经有的
创建应用
注册一个测试账号安装了服务商应用(我们的应用)
通过授权拿到了基本信息(如公司id,秘钥等)
有这些表示可以直接去请求接口链接
所需接口其实只需要两个接口
获得部门列表
获得部门成员
详细步骤官方已经写的很清楚,也不照本宣科了,只说一些关键点和坑点
获得部门列表
id参数可以不传,或者传0来获取所有部门信息access_token可以通过官方提供的方式获取,如果根据步骤发现获取不到那就是被加密了,要联系当时搭这个应用的人要
无法获得部门名称,用id代替名称了
获得部门成员
i ...
项目搭建
项目结构
项目依赖原则:要什么配什么(application文件同理)springboot - 2.3.2.RELEASE选择理由:比较稳定的版本
mybatis-plus - 3.5.2理由:兼容mz项目的mybatis,同时简单CRUD也不需要编写,但实测没有JPA灵活。主要为了兼容,否则迁移sql工作量也不小
jdk - 1.8理由:企业比较稳定的版本
hu-tool理由:有很多实用的工具包,如UUID生成器,数字类型判断等
启动配置
增加了数据库校验环节,确保数据库配置正确的前提下才能启动项目
增加了插入记录和修改记录自动更新时间的功能
报错信息报错原因:nested exception is java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory
问题背景使用springboot整合mybatis-plus时,出现报错
思考过程控制台提示LoggerFactory空指针,说明无法将mapper对象加入其中,也就是说拿不到这个对象,那么可能是没扫描到包的问题,也有可能是版本不兼容的问题,或者是配置文件 ...
开发技巧
减少查询数据库的频率,多在内存中计算在一次请求中,网络IO占据了大多数的时间,代码在内存中的时间是很快的。有时候需要多次查询数据库,这时候可以将一个大的集合查询到,具体使用的时候在进行筛选。尤其避免了在for循环中多次调用数据库查询的情况。举例错误示范
12345List<Pojo> collection = new ArrayList();for (Pojo pojo : collection) { Object o = repository.findById(pojo.getId()); xxx}
正确示范
1234567List<Pojo> collection = new ArrayList();// 并不一定是全量查询,尽量缩小范围List allData = repository.findAll();for (Pojo pojo : collection) { Optional data = allData.stream().filter(e -> Objects.equals(e.getId() ...
缓存小记
缓存脏读无法避免,也没必要避免。如果想要保证数据的强一致性,应该阻塞所有的读(在满足多个db,分区容错性的前提下,必须牺牲一定的可用性),但就失去了使用redis的初衷
如果将更新缓存的方式,变为删除缓存,这样看似合理,本质上和更新一样,除此之外还需要考虑缓存击穿的问题
前脚读,后脚改其实无法避免,即使是单db也无法避免。用户在页面停留半小时点提交也是很正常的。类似这种的做好数据校验和幂等性,提示用户操作失败就可以了
所以只要不是特别严重(长时间不更新的)都是可以接受的
最重要的一定要设置缓存失效时间,兜底刷新
结论:缓存脏读无法避免,数据要求强一致性的本身就不应该放入缓存中。更新db刷新缓存,保证毫秒级别的更新即可
使用spring线程池可以归纳为线程隔离的一种方式。这种做法使Tomcat线程池和spring线程池不会互相拖累。spring线程池的作用是为了保证Tomcat线程池不枯竭