我们到底能走多远系列(15)

扯淡:这些知识点来源是通过面试涉及到的,面的公司不多,知识点涉及也不多,我每次面试后都在备忘录里写下有用的东西,集合起来分享一下,因为是知识点,所以就不出什么面试题目啦。不涉及任何公司,也不谈论面经,纯粹是学习而已。

  《我们到底能走多远系列》的阶段性目标已经达到啦,15个,先给自己鼓励一下吧。

  有目的性学习的确会让人不偷懒,能让人在短时间里努力,自我激励的方式很多,每天花点时间做一件事对你肯定有帮助,好吧先讲一个故事,口痒了,哈哈。

  可能很多朋友都听过了,没关系,再听一遍,你就可以熟练的讲给你的朋友们听了。

  从前有两个和尚他们分别住在河对岸的两个庙里,每天他们都会来河边打水,每天都会见面,时间一长他们就相当于那啥,心灵相通,成了好朋友,但他们谁也没跨过河去看望过对方。这样年复一年,一日,住在东岸的和尚没来打水,西岸的和尚就疑惑了,一天不打水,他喝什么呢?第二天,西岸的和尚还是没来,连续半个月东岸的和尚都没见到西岸的和尚,于是他就想他朋友是不是病了。于是就挑着水去到西岸的庙里,他看到他的朋友一点没事,就问他:你怎么不来河里打水了呢,没有水,你喝什么呢?西岸的和尚把他朋友领到园子里,指着角落里的一口井说,这是我挖的一口井,有了井,就不用再去河边打水了。东岸的和尚又问了:我们平时在庙里怎么忙,几乎没有空闲的时间,你怎么可能有时间挖一口井呢?回答:我每天就在那个地方掘一下,年复一年,它就成了井。

  你在掘你的井吗?

 

主题:

关于数据结构:有不正确的地方或改进的地方希望你能指出来,我会感谢你给我进步的机会。

1,stack

来自《Introduction to Algorithms》的图:

遵循先进后出(FILO)的原则,下面是模拟的代码:

package code.structures;public class Stack {private String[] s;// 用数组来模拟private int top;private int length;// 初始化public Stack(int index){this.s = new String[index];this.top = 0;this.length = index;}// 放数据public void push(String str){if(str == null){return;}if(top == length){System.out.println("stack is full");return;}this.s[top] = str;this.top++;}// 拿数据public String pop(){if(this.isEmpty()){System.out.println("There is no data");return null;}String s1 = s[--top];//因为数组从0开始,顺便每pop一次要把top减一s[top] = null;return s1;}// 取得最高位置public int getTop(){return this.top;}public boolean isEmpty(){if(this.top == 0){return true;}return false;}
}

2,queue

来自《Introduction to Algorithms》的图:

遵循先进先出(FIFO)的原则,下面是模拟的代码:

代码使用标志符的方式来控制内部的数组不溢出和为空是不能取出数据。

package code.structures;public class Queue {private String[] s;// 用数组来模拟private int head; // 队列头private int tail; // 队列尾private int length; // 队列长度private boolean isFull; // 满信号private boolean isEmpty; // 空信号public Queue(int index) {this.s = new String[index];this.head = 0;this.tail = 0;length = index;isFull = false;isEmpty = true;}// 放数据public boolean enQueue(String str) {if (isFull) { // 已满的队列就不能再放数据啦System.out.println("queue is full");return false;}// 放在队列的尾部s[tail] = str;tail++; // 移动尾部// 头尾相连if (tail == length) {tail = 0;}// 在放数据的时候出现头尾相同时,就认为是满了if (head == tail) {isFull = true;}// 因为是放数据,所以不可能出现空队列if (isEmpty) {isEmpty = false;}return true;}// 拿数据public String deQueue() {if (isEmpty) {// 空队列就不处理了System.out.println("queue is empty");return null;}// 从头部取得数据String str = s[head];head++;if (head == length) {head = 0;}// 取数据的时候出现头尾相同,就认为出现空队列if (head == tail) {isEmpty = true;}// 因为是取数据,所以不可能出现一个满队列if (isFull) {isFull = false;}return str;}public boolean isEmpty(){return isEmpty;}public boolean isFull(){return isFull;}
}

3,ArrayList和LinkedList

我们不看他们的源码,但也有必要知道他们大概的实现方式:ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。这就是他们区别的关键之处,我想着相当于是一个数组和一个链表在比较。

ArrayList基于数组的,看他的构造方法:

    public ArrayList(int initialCapacity) {super();if (initialCapacity < 0)throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity// 传入ArrayList大小,就帮你创建一个这样大小的Object数组this.elementData = (E[])new Object[initialCapacity];}public ArrayList() {this(10);//默认的话,就是10大小的数组}

关于ArrayList的动态数组的实现,是依靠啦一个方法: System.arraycopy方法。

看下面两个源码方法就会明白:

 public void ensureCapacity(int minCapacity) {modCount++;int oldCapacity = elementData.length;if (minCapacity > oldCapacity) {Object oldData[] = elementData;// 新数组长度是老数组的1.5倍int newCapacity = (oldCapacity * 3)/2 + 1;if (newCapacity < minCapacity)newCapacity = minCapacity;// 创建出新的数组elementData = (E[])new Object[newCapacity];// 把老数据拷贝到新数组里去System.arraycopy(oldData, 0, elementData, 0, size);}}public boolean add(E o) {ensureCapacity(size + 1);  // 确定是否需要增长数组elementData[size++] = o;return true;}

ArrayList的remove方法,决定了它暴露了频繁删除数据性能不高的原因:

       public E remove(int index) {RangeCheck(index);modCount++;E oldValue = elementData[index];//删除的数据作为返回值int numMoved = size - index - 1;if (numMoved > 0)// 用一个自我拷贝,移动了删除点后的全部数据,所以会影响效率System.arraycopy(elementData, index+1, elementData, index,numMoved);// copy数据后,最后一位的数据还在,需要把它删除elementData[--size] = null; // Let gc do its workreturn oldValue;}

而LinkedList是基于列表的,它的remove只需要断开一个连接,连上一个连接,无论我们删除那一个数据需要的时间是相同的。但是考虑到LinkedList的检索需要更多的时间因为,最差的结果里,需啊哟遍历整个Link。

所以:

1.对于随机访问get和set,ArrayList觉得优于LinkedList。
2.对于新增和删除操作add和remove,LinedList比较占优势。

3.若只对单条数据插入或删除,ArrayList的速度反而优于 LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList.

3.HashMap和HashTable
1.HashMap 线程非安全 null可为key
2.HashTable 线程安全 null不可为key
3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

4.SQL基础几点

1,case语句的使用

select classId, count(case when sex = "男" then 1 end) from Test group by classTd;

2,group by :

select后面的所有列中,没有使用聚合函数的列,必须使用group by!

3,having:

筛选满足条件的组,条件经常包含聚合组函数.

4,left join 相当于 left out join ,right join 相当于 right out join 也就是说什么外连接就是左连接和右连接嘛(不知道准不准确),join 相当于 inner join。

还有个full join,链表全部需要查出来嘛。

left join和right join相当于是求有交集的两个集合的一个集合的值。

inner join相当于是纯粹的交集。

full join 你懂的还剩下并集。

5,代码规范

      可读性:代码是否可读易读,对于一个团队来说,编码标准是否一致,编码风格是否一致;

   功能性:代码正确得实现了业务逻辑;

   可维护性:代码逻辑是有层次的,是容易修改的;

   高效性:代码实现在时间和空间的使用上是高效的;

 

  就这么多吧,sql方面还有很多需要学习的地方,发现以前写的出的sql现在觉得很困难了,各位,有没有学习提高sql的方法,或推荐的书。以前系统学过sql后几个月没用,就一下生疏了,然后重复捡起来,再生疏,难点复杂点的sql头绪会很乱,有好的训练方法吗?

 

让我们继续前行

----------------------------------------------------------------------

努力不一定成功,但不努力肯定不会成功。
共勉

转载于:https://www.cnblogs.com/killbug/archive/2012/11/13/2769017.html

Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)相关推荐

  1. JVM面试知识点合集 — Android 春招 2022

    JVM面试知识点合集 - Android 春招 2022 星光不问赶路人,时间不负有心人 Tips:文章较长,可以在侧栏目点击子标题,快速跳转 喜欢的话,就一键三连吧

  2. js中this和回调方法循环-我们到底能走多远系列(35)

    我们到底能走多远系列(35) 扯淡: 13年最后一个月了,你们在13年初的计划实现了吗?还来得及吗? 请加油~ 主题: 最近一直在写js,遇到了几个问题,可能初入门的时候都会遇到吧,总结下. 例子: ...

  3. html5实现饼图和线图-我们到底能走多远系列(34)

    我们到底能走多远系列(34) 扯淡: 送给各位一段话:     人生是一个不断做加法的过程 从赤条条无牵无挂的来 到学会荣辱羞耻 礼仪规范 再到赚取世间的名声 财富 地位 但是人生还要学会做减法 财富 ...

  4. 图片尺寸判断等-我们到底能走多远系列(21)

    我们到底能走多远系列(21) 扯淡:又是一年过年,给各位拜个很早很早的年,实在点的祝福:祝各位明年工资全部翻一番啦! 主题: 1,判断上传图片尺寸功能 如下代码即可在页面上结果掉这个问题: var i ...

  5. 10多家公司的Java开发面试常见问题合集

    ​上篇文章我请几个大佬帮我总结了一下,整理了三套模拟面试题,细心的大佬已经发现我中间断更了一天,为什么断更呢,也讲一下原因吧.我把我以前去面试过的那些东东扒出来了,今天我分享一下我的. 本人是做jav ...

  6. 【2021年最新版Java校招面试题目合集】

    1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节 ...

  7. 牛客网-精华专题-前端校招面试题目合集

    前端校招面试题目合集 501 HTML CSS 前端基础 HTML 浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层(structural layer).表示层(presentation ...

  8. 全国计算机二级office选择题知识点,全国计算机二级考试MS office选择题知识点合集(通用)...

    全国计算机二级考试MS office选择题知识点合集(通用) 计算机二级选择题考点总结 2014年计算机二级 office高级应用考试基础知识 计算机的发展.类型及其应用领域. 1.计算机 (comp ...

  9. Java常见面试知识点:继承、接口、多态、代码块

    问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...

最新文章

  1. Random在for以及foreach循环中产生相同随机数问题
  2. qt的输出中文,数字到表格
  3. cesium学习之环境搭建
  4. 旋转数组中的最小元素 java_程序员算法面试题之旋转数组的最小值
  5. 如何写一个批量下载PDF文件的程序hp48
  6. 三成手机电子书暗藏陷阱 诱骗下载强行吸费
  7. 和计算机与设计相关的,计算机设计和类论文参考文献 计算机设计和参考文献有哪些...
  8. 攻防世界逆向入门maze详解
  9. 团队博客-第二周:需求规格说明书(科利尔拉弗队)
  10. 2种前端实现图片加水印的方式
  11. [Darktable]dt源码分析(未完)
  12. 盘点抖音上的整蛊程序,会了这些谁还敢跟你玩?小心没朋友啦
  13. 数字图像处理学习笔记(四)点处理:灰度值反转、对数变换、伽马变换
  14. 打破壁垒,国产毫米波雷达技术热度持续攀升
  15. 2022年湖北省乡村振兴科技创新示范基地申报条件以及流程汇总
  16. 阿里云平台与MQTTX软件通信
  17. 火拼泡泡龙技巧以及一些技术简介
  18. 十亿用户数据,上千个用户标签维度,用户分析怎么做?
  19. 词向量:GloVe 模型详解
  20. Asix2 插件 错误 InvocationTargetException 解决办法

热门文章

  1. vs2019 缺android sdk,VS2019由于缺少NuGet Microsoft.NET.Sdk.Functions程序包而无法加载项目,但也无法添加此程序包(示例代码)...
  2. 怎么把网页保存到本地计算机,在IE浏览器中,将网页保存到本地计算机中,若只需保存其中的文字、超链接和表格信息,应该选择的保存类型为( )...
  3. python求解三元一次方程_北师大版八上数学5.2 求解二元一次方程组 知识点微课精讲...
  4. win10改成ubundu主题_如何将ubuntu引导win10,修改为win10引导ubuntu
  5. 请问染色浴比对染色性能有影响吗?浴比对染色的哪些性能有影响?染色亲和力测定有哪些实际应用意义
  6. CodeForce 2A —— Winner
  7. linux下搜狗输入法无法输入中文解决方法
  8. 蒙特卡洛法求圆周率100亿数据
  9. QTextEdit实现图片和文本同行显示
  10. java中if 运算符_[Java]Java基本语法结构(运算符,流程控制语句,if语句)