写在最后
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
Mybatis面试专题
MySQL面试专题
并发编程面试专题
● hello函数接受一个参数name。
● str是一个函数调用,把由任意参数组成的列表连接为一个字符串。
● defn、hello、name和str都是符号(symbols),代表了它们各自涉及事物的名称。
前缀#'表示这个函数是用一个 Clojure变量(var)来保存的,其中 user 是这个函数所在的命名空间(namespace)(就像 Java的默认包一样,user是REPL的默认命名空间)。
特殊变量
====
使用 REPL 时,最近三次求值结果的描述被分别存储在特殊变量*1、*2和*3中。这使得进行迭代变的非常容易。
使用pst函数(print stacktrace)得到堆栈跟踪信息。
添加共享状态
======
纯函数易于开发、测试,并易于理解,应该优先选择它们来处理任务。
可是,大多数程序拥有共享状态,并且需要使用非纯粹的函数来管理这些共享状态。
#{}是空集合的字面表示法。
conj是conjoin(连接)的缩写,它会新建一个含有新增项的集合。将元素连接到集合,就好像是创建了一个新的集合。
使用def来为原子命名。
def有点像defn,但更为通用。Def既能定义函数,又能定义数据。
要更新一个引用,需要使用诸如swap!这样的函数。
swap!会对拿引用r去调用update-fn,并根据需要传递其他可选的参数。
原子只是Clojure的几种引用类型之一。选择恰当的引用类型时,需要格外小心仔细。
可以在任何时候使用deref或者它的缩写@号来提取引用内部的值。
最后
各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了
973)]