mageek 发布的文章

后端好书阅读与推荐


后端好书阅读与推荐

这一两年来养成了买书看书的习惯,陆陆续续也买了几十本书了,但是一直没有养成一个天天看书的习惯。今天突然想要做个决定:每天至少花1-3小时用来看书。这里我准备把这两年来看的书挑出好的做一个简要总结、即将要看的书做一个计划,以便整理成书单留给自己学习,也顺便推荐给需要的童鞋。

ps:本书单针对同一大类的知识点大致遵循着循序渐进,越学越深入越具体的顺序。

JavaScript高级程序设计

JavaScript高级程序设计(第3版) (豆瓣) https://book.douban.com/subject/10546125/

有人可能会有疑问,后端为啥要学JavaScript呢?其实就是为了更好的使用node.js做铺垫。这本书说是高级程序设计,其实还是比较基础,但是难能可贵的是它几乎包含了所有的基础知识,而且对基础知识的讲解比较深入,至少看了过后就不会犯那些常见的错误(比如for循环绑定变量i,这个问题几乎天天有人问(⊙﹏⊙)),能知其然、知其所以然,而且讲了许多最佳实践,所以还真的是高级。对于后端的同学可以只看基础部分,不看浏览器相关的部分(当然时间多也可以了解)。

本书有很多值得学习的地方,比如

  • 建议始终语句结尾要加分号,分支始终要加花括号,这样虽然多了些小麻烦,但能省去很多大麻烦:提高解析器性能,避免压缩错误,代码易读性可维护性更好。
  • 推荐使用 === 和 !== 而不是用 == 和 != ,这样才能保证代码中数据的完整性,避免歧义。
  • with语句不仅容易造成混淆,还会影响性能,不建议使用。
  • 函数按值传参,没有按引用传参,基本类型就不用说了,即使是引用类型参数a,函数也并不能修改a,使得a指向堆里面的另一个对象,所以也是按值传递。
  • 函数传参之时,使用对象字面量{}来封装大量的可选参数,比直接命名多个参数更灵活。


Nodejs中的一些小trick


之前常常因为不注意,习惯用写PHP或者Java的方式来写nodejs,产生了了一些错误,这里总结一些小小的trick,以便于展示nodejs的不同,和平时需要注意的地方。

变量提升

var variable = 'global';
console.log(variable); 
function fn () {
    console.log(variable); 
    var variable = 'local';
    console.log(variable);
}
fn();

你可能以为这段代码执行结果为:

global
global
local

但实际上结果是


数据结构与算法——常用数据结构及其Java实现


前言

仿佛一下子,2017年就快过去一半了,研一马上就要成为过去式了,我打算抓住研一的尾巴,好好梳理一下数据结构与算法,毕竟这些基础知识是很重要的嘛。所以准备在这里搞一个系列的文章,以期透彻。

本系列将采用Java语言来进行描述。亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位。

首先给出Java集合框架的基本接口/类层次结构:


Java8解决了什么?


在学习面向对象时,许多人都会用Java来举例子,但是其实Java并非纯正的面向对象语言,最明显的就是:int,double等基本类型不是对象。
自从java8出来过后,引入了流,函数式编程,就更不是在向着面向对象发展了。有人可能会感到诧异,为啥越来越偏离我们遵循了这么久的面向对象设计模式?

其实很简单,我们对工具的改造的最终目的都是为了解决问题,以前有面向过程解决不了的问题,那么面向对象出来解决了;现在面向对象有许多问题,那么就可以用函数式编程来解决,所以这些变化是很自然的,Java要在不同时代的保持自己的活力,就必须与时俱进,所以Java8的出现就是自然而然的。


Java String 探索


今天看到了一个Java string的相关问题,解决问题的过程中就想把string 好好理顺了,总结在这里。

== 和 equals()

== 是判断两个变量是否指向同一个对象,equals()只判断两个字符串内容是否相同

public class Cons {
    public static void main(String[] args) throws InterruptedException {

        String s2 = new String("vv");
        String s3 = "vv";
        System.out.println(s2 == s3);//false
        System.out.println(s3.equals(s2));//true
    }
}