Exception和Error的区别
Java中,异常Exception和错误Error的意义截然不同,简单地说:
Exception是程序自己应该handle的
Error程序自己不handle
Checked exception
一般是针对需要的资源不存在。
比如说我们在读取文件时,我们就要catch或者throw "FileNotFoundException",当文件没有被发现时,Java就会扔出这个 exception,这里出现异常并不是我们的有代码有什么问题,而是我们缺少了必须的资源。
Checked exception是我们预期会发生的异常,所以我们在写程序时如果碰到checked exception,一般编译器会强行要我们handle exception,handle的方式要么是throws,要么是做try/catch。
RuntimeException
运行时异常指的是,在编译的时候编译器不会在意,但运行时就会发生的问题。
比如说编译器觉得loop的语法是对的 (可能会warning,但程序员有时候会忽略),loop明明长度只有5,却access第5个位置,运行时就会出现IndexOutOfBounceException。
RuntimeException一般是bug,是程序 (员) 本身的问题,所以一般是通过改code来更正。因此在写程序时,为了防止没想到的exception,至少要在endpoint上要catch exception。
Error
Error指的不是程序自己的问题,而是JVM (Java虚拟机) 的问题,比如著名的StackOverflowError, OutOfMemoryError。Java虽然也可以throw error,但一般是既不throw也不catch。
Error不是程序直接的问题,但不代表code完全正确,比如说错误地使用recursion会导致StackOverflowError。
MVC与3-tier architecture的区别
Model–view–controller
MVC 是一个architectural pattern,所以这是abouthow to organize the codes。将代码根据职责不同,安排到controller,view和model这三个不同的范围里面。
例如,一个网络应用的project folder里面,大家经常能看到controller,model和view命名的文件夹,来置放各自相关的代码。
3-tier architecture
3-tier是网站的硬件架构。从硬件上,将网络应用分别放到presentation layer,application layer和data layer。一个常见的做法,就是将这三个layer放到三台不同的服务器上面了。
当然,在大型的结构里面,每一层可能代表着几十上百个的服务器。两者虽然看上去都是前端-后端-数据库的形式,但是在MVC里面只是在代码层面上区分,而对3-tier来说,才是更加接近full-stack的前端-后端-数据库形式。
3-tier本身是multi-tiers的一种形式,所以我们可以推理得知multi-tiers就是在硬件层面上对一个网络应用进行拆分和责任化,每一层负责一个具体的任务。
JavaScript中 ==与===的区别
== (equal) 和 === (identical) 的功能基本一样,但在===在比较中没有type的转化。
接下来是每周固定会出现的算法题啦,希望大家在看答案之前自己想想,努力得到更优化的解法哦。
算法题:回文
A palindrome is a word that reads the same backward or forward.
Write a function that checks if a given word is a palindrome. Character case should be ignored.
For example, isPalindrome ( "Refer" ) should return true as character case should be ignored, resulting in "refer", which is a palindrome since it reads the same backward and forward.
拓展:数组排列得到回文
Write a function so that it takes an array of char as input, and return true if you canfind a palindrome from any permutation of the input, or return false if otherwise.
e.g. [a,a,b,b,c,c] is true because one of its permutation, abccba, is a palindrome.
算法题答案
大部分同学可能会想到2种方法,一种是把 string 反过来再比较,一种是反着比较,两者都可以。
如果需要优化,把方法 isPalindrome2() 写得更efficient:里面的loop,不需要循环sLower整个length那么多次,只需要循环length的一半便可以,对于奇偶数都适用。
拓展题答案
与上一题相比,不考虑顺序。其实也就是变相在问,string里的char是否能成双成对:
如果char的数量是偶数,char刚好能成双成对就是palindrome的排列组合
如果是奇数,应该剩一个单身char,被放在回文的中间
领取专属 10元无门槛券
私享最新 技术干货