Steve's Blog

Talk is cheap, show me the code.

0%

截屏2022-08-15 23.04.54

本系列文章旨在学习整理MyBatis的一些知识。本文是本系列的第一篇,用来介绍JDBC的内容,本文不是纯新手教程,如果有疑问,请查询官方文档。

阅读全文 »

截屏2022-08-15 22.57.06

曾经写过一段时间“技术博客”,但是都没坚持下来。“技术博客”打引号是因为现在看来,那些文章并不算真正的技术博客,有为了找工作而做的各种东拼西凑、还有些纯粹就是书本或者技术文档的摘抄和贴图。严格意义上算不得技术博客。

现在有时间坐下来好好想想,要不要写技术博客,怎么写技术博客(如果要写)这几个萦绕在心头的问题。

如果在很长的时间尺度中观察,想在事业上取得成就,把自己学到的积累并用自己的方式结构化是必要的,而写技术博客是一种方式。之前写技术博客总是坚持不下来,失败的原因很大程度上是:写博客不是为了让自己成长,而是为了在找工作时简历上多点东西。这种想法现在看来十分短视和肤浅,失败只是时间问题。如果是为了自己能在以5年为时间尺度总结自己的能力成长,那么写技术博客是个不错的选择。

写技术博客还是以兴趣和目标驱动为主。找一个合适的平台,坚持下去。要不断的提醒自己,写文章是为了提升自己的知识储备,找工作或者别人的关注都是附带的,那些并带不来长久的快乐和提升。

img

在最近读了一些书,但是人生还是没有太大的起色,感觉总是对生活提不起热爱。内心仍有诸多纠葛和自我拉扯。
很多时候其实不是不知道答案,而是不理解答案。觉得自己按照自己的方式走也不会太差,但是结果是“失之毫厘,差之千里”。但是日子总是要过,而且希望越过越好。一些努力不是深彻的,但是仍然值得鼓励,因为只有慢慢的坚持,最终从整体来看,才是健康的、昂扬的。

阅读全文 »

这是听的公司讲关于技术人如何后续发展的讲座,听讲座不能只作机械的记忆,而是应该结合自己的理解,去深入理会和吸收。因为讲座一般是一个人关于自己一段时间内的行为以及收获的总结,它可以帮助我们少走一些弯路,提供更清晰的发展路径。

演讲主题是《技术驱动业务》。

阅读全文 »

最近准备提离职去南京工作,对近两年做个总结。

1. 学习到的

  1. 得到了一些教训,对自己不理解或者自身价值观不接受的行为,不过早表露态度,多观察,多思考
  2. 整体上对业务的理解有一定深入。在做一个产品或者功能时,不再仅着急实现预定好的功能,而是先思考功能是否完善,流程是否形成闭环,之后再来设计开发。相对以前有很多进益。
  3. 技术上学习到了一些学习的方法,例如源码阅读,很多工具和使用,代码设计也有提高。

2. 自身显露出的缺点

  1. 没有从长远思考问题的习惯,无论是工作还是生活。缺乏深入思考的能力和习惯,只有焦虑是不足以成事的。
  2. 生活中,对于负面的事,应对还是欠妥,导致自己自身状态不好。
  3. 思考一件事更多的还是在如何做以及实现方式等较为表面的层次,没有深层次考虑它的背景,演进过程已经当前方案是否合理,能否从根源上解决问题。这些思考在平时比较欠缺,也因为工作时间紧张,没有抽出精力来思考。
  4. 技术上还是欠缺,对应用的技术缺乏深度和研究的热情,只停留在应用的层面,而缺乏深入理解的动作,这个对后续发展不利。应用技术的优势和劣势缺乏系统的总结,这是深度上的缺失;应用技术选型的贫乏,这是广度上的缺失。
  5. 身体缺乏锻炼,导致身体亚健康。

3. 对未来的展望

  1. 在生活中多思考,或者说多考虑一下未来的可能性和发展规划,避免抽象的,不清晰的发展路径,而是要规划尽量合理的,相对细致的,可完成的,有时间限制的未来发展路径。
  2. 锻炼身体,保持健康的体魄。
  3. 为人处世,多看多想,多关心家人,和朋友交好。
  4. 技术多探究深度和广度,对技术有所坚持,厚积薄发,贵在坚持。
  5. 工作不只追求完成工作,而是尝试慢慢建立自己在部门,在公司,在业界的口碑,经营好自己。
  6. 培养自己的爱好,享受生活。

1. Runnable, Callable, Future, FutureTask

a. Runnable

Runnable代表一个可以被线程执行的任务,其中只有一个run()方法

1
2
3
4
5
6
public interface Runnable {
/**
* 只有一个无参方法run(),当线程执行时,会调用这个run方法
*/
public abstract void run();
}

Thread类继承了Runnable接口, 其中也有Runnable的引用,它的run方法就是执行引用的Runnable实例的run方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Thread implements Runnable {
private Runnable target;
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
boolean started = false;
try {
// 底层调用JNI方法start0()向OS申请线程资源
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
it will be passed up the call stack */
}
}
}

private native void start0();
@Override
public void run() {
// target在构造方法中设置,线程在执行具体的业务逻辑时会调用run方法
if (target != null) {
target.run();
}
}
}

阅读全文 »