获得徽章 1
- #挑战每日一条沸点#
4月11日 day 1
打卡 python 手动抛出异常:raise抛出异常。
raise语句的基本语法格式为:
raise [exceptionName [(reason)]]
参数的解析:[]里面表示为可选参数,作用是指定抛出的异常名称、异常信息的相关描述。
- 如果可选参数全部省略,raise会把当前错误原样抛出。
- 如果仅省略(reason),则在抛出异常时,将不附带任何的异常描述信息。
故raise的三种常见用法:
1)raise:单独一个raise。该语句引发当前上下文中捕捉的异常(比如在except 块中。)默认引发 RuntimeError 异常。
2)raise 异常类名称:raise后带一个异常类名称,表示引发执行类型的异常。
3)raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。
当在没有引发过异常的程序使用无参的 raise 语句时,它默认引发的是 RuntimeError 异常。
因此:每次执行 raise 语句,都只能引发一次执行的异常。
再来学习 try except(else finally)异常处理结构。这个语句的作用是:捕获异常并进行处理。
try块会捕获raise抛出的异常,并由except块进行处理。
因此,这样处理(使用try except),在程序中使用了raise语句引发异常,但程序的执行是正常的,手动抛出异常并不会导致程序崩溃。
使用示例:
try:
a = input("输入一个数:")
if(not a.isdigit()):
raise ValueError("a 必须是数字")
except ValueError as e:
print("引发异常:",repr(e))
raise展开评论点赞 - #青训营笔记创作活动#
2月23日,打卡day15
今日学习消息队列Kafka。
Kafka包含Topic、Partition、消费者、生产者、副本等基本概念。
kafaka可以从三个角度进行理解:消息系统、存储系统、流式处理平台。
整体架构为:生产者将消息发送到broker;
kafaka通过zookeeper管理集群元数据;
消费者采用拉(pull)模式订阅并消费消息。展开评论点赞 - #青训营笔记创作活动#
2月22日,打卡day14
今日学习Redis 数据库存储系统。如果是面试的话,这篇文章可以直接拿来背诵的程度,就很全很详细。
啥是redis?在客户端和数据层之间建立的缓存层,或者说是缓存中间件。
客户端——缓存层——数据存储层。
不过我觉得这些理论知识需要加上自主实践才能更容易理解。
展开评论点赞 - #青训营笔记创作活动#
2月16日 打卡day13
今天学习:全解MySQL:一条SQL语句从诞生至结束的多姿多彩之旅
本篇主要站在一条SQL的角度,从SQL的诞生开始,到SQL执行、数据返回等全链路进行分析。
首先,sql的诞生都是源于一个用户请求,当完整的sql生成后,
再会先去连接池中尝试获取一个连接对象,假设此时连接池中没有空闲连接,需要再次创建一个新连接,那么就会先发起网络请求建立连接。(网络请求就是。tcp的三次握手)
经过连接层的一系列工作后,接着客户端会将要执行的sql语句通过连接发送过来,然后执行mysql服务层进行处理。
根据用户的操作不同,mysql执行SQL语句时也会存在些许差异。
推荐阅读这个系列文章,感觉又是涨姿势的一天
展开评论点赞 - #青训营笔记创作活动#
2月12日 打卡day12
今日学习Kafka,第一次见这个名词,主要是关于消息的。文章由浅入深,从什么是kafka,到kafka基础概念,kafka版本及日志变迁,kafka应用实战,循序渐进讲述,我基础小白看起来也不觉得枯燥
展开评论点赞 - #青训营笔记创作活动#
2月11日,打卡day11
今日学习:5分钟自建数据库可视化平台——bytebase
文章主要介绍了如何使用Bytebase、常用功能,并且图示化列出了详细的操作步骤,还可以使用SQL语句对数据库进行管理。值得动手一试!展开评论点赞 - #青训营笔记创作活动#
2月10日 打卡day10
今日学习502问题怎么排查?
学习这篇文章可以先看总结,再从头向下开始阅读,更容易理解和掌握。
RST被用来在异常情况下,强制关闭连接。它是TCP包头中的一个标志位,在收到这个标志位的数据包后,连接就会被关闭。
发送TCP的RST报文也是网关代理(nginx)发出502的原因之一,之所以发RST报文,有两个常见的原因:①服务器过早断开连接;②服务端应用进程崩了(crash)☜这也是造成502状态码最常见的原因。
展开评论点赞 - #青训营笔记创作活动#
2月7日 打卡day9
今日学习优秀后端都应该具备的开发好习惯。
没有基础刚开始学习后端,感觉学起来好难、很吃力,读这篇文章磨耳朵 试着培养后端学习过程中的意识。
为加深印象,总结一下文中的内容:
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构
3. 不在循环里远程调用、或者数据库操作,优先考虑批量进行。
4. 封装方法形参
5. 封装通用模板
6. 封装复杂的逻辑判断条件
7. 保持优化性能的嗅觉
8. 可变参数的配置化处理
9. 会总结并使用工具类。
10. 控制方法函数复杂度
11. 在finally块中对资源进行释放
12.把日志打印好
13. 考虑异常,处理好异常
14. 考虑系统、接口的兼容性
15. 代码采取措施避免运行时错误展开评论点赞 - #青训营笔记创作活动#
2月5日 打卡day8
今日学习MySQL的架构篇。当时学习数据库时用的是SQLServer,对于MySQL了解不多。本文是由浅入深的对MySQL的整体架构进行阐述,可以读下全文来,受益匪浅,值得反复看。评论点赞 - #青训营笔记创作活动#
2月4日 打卡day7
今日学习写出漂亮代码的45个小技巧。
如果不加以规范和注意,平时写出来的代码可读性很差,修改起来很麻烦。如何养成或者写出漂亮规范的代码不仅需要好好运用这些小技巧,还需要在使用过程中慢慢更改、摸索。
搬运原文中的45个小技巧。
1、规范命名
2、规范代码格式
3、写好代码注释
4、try catch 内部代码抽成一个方法
5、方法别太长
6、抽取重复代码
7、多用return
8、if条件表达式不要太复杂
9、优雅地参数校验
10、统一返回值
11、统一异常处理
12、尽量不传递null值
13、尽量不返回null值
14、日志打印规范
15、统一类库
16、尽量使用工具类
17、尽量不要重复造轮子
18、类和方法单一职责
19、尽量使用聚合/组合代替继承
20、使用设计模式优化代码
21、不滥用设计模式
22、面向接口编程
23、经常重构旧的代码
24、null值判断
25、pojo类重写toString方法
26、魔法值用常量表示
27、资源释放写到finally
28、使用线程池代替手动创建线程
29、线程设置名称
30、涉及线程间可见性加volatile
31、考虑线程安全问题
32、慎用异步
33、减小锁的范围
34、有类型区分时定义好枚举
35、远程接口调用设置超时时间
36、集合使用应当指明初始化大小
37、尽量不要使用BeanUtils来拷贝属性
38、使用StringBuilder进行字符串拼接
39、@Transactional应指定回滚的异常类型
40、谨慎方法内部调用动态代理的方法
41、需要什么字段select什么字段
42、不循环调用数据库
43、用业务代码代替多表join
44、装上阿里代码检查插件
45、及时跟同事沟通
明天继续加油!展开评论点赞
![[奋斗]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_29.2801857.png)
![[赞]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_108.a6defc6.png)