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

我们到底能走多远系列(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对比学习 ——simsiam 代码解析。

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 ​ 目录 1 &#xff1a; 事先准备 。 2 &#xff1a; 代码阅读。 2.1: 数据读取…

wiki常用语法

为什么80%的码农都做不了架构师&#xff1f;>>> 说明 输入 效果 作用在任何地方 斜体字 斜体字 斜体字 粗体字 粗体字 粗体字 粗体加斜体 粗体加斜体 粗体加斜体 下划线 &#xff08;推荐替代斜体&#xff09; <u>下划线</…

【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

注&#xff1a;本文是【ASP.NET Web API系列教程】的一部分&#xff0c;如果您是第一次看本博客文章&#xff0c;请先看前面的内容。 3.3 Calling a Web API From a WPF Application (C#) 3.3 通过WPF应用程序调用Web API(C#) 本文引自&#xff1a;http://www.asp.net/web-api/…

java开发过程中的命名规范

为什么80%的码农都做不了架构师&#xff1f;>>> 最近在读项目的过程中&#xff0c;发现好多同事的代码并不是很规范&#xff0c;有的包名也按照了驼峰的写法&#xff0c;虽说这样不是不行&#xff0c;但个人认为开发过程中应该遵守这些规范&#xff0c;现整理规范如…

git 使用方法自用(勿进)本地开发分支推上线上开发分支

一、//查看状态 1.git status 二、//查看改了哪个文件夹 1.git diff 2.//会出现改了哪个文件夹src/components/partials/Slider.js 三、//查看改了的文件夹里面具体改了啥内容 1.git diff src/components/partials/Slider.js 四、提交所有 1. git add . 五、写备注…

SVG 和 CSS3 实现一个超酷爱心 Like 按钮

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 在现代网页中&#xff0c;我们经常可以在一些文章、视频和图片页面上找到”Like”按…

redis简单学习3-redis常用命令总结

2019独角兽企业重金招聘Python工程师标准>>> 1.键值相关的命令 keys 返回满足给定pattern的所有key 表达式* 代表取出所有的key redis 127.0.0.1:6379> keys * 1) "myzset2" 2) "myzset3" 3) "mylist" 4) "myset2" 5)…

微软的创新还是败笔?Windows 8为苹果创造天赐良机

网络安全公司Avast近日公布的数据显示&#xff1a;Windows系统使用人数正在不断下降。这一结果对微软来说可谓噩梦&#xff0c;于此同时&#xff0c;苹果则不断加强市场占有率。又是什么导致了这样的结果&#xff1f;接下来就看看最主要的几点&#xff1a; 调查覆盖了13.5万Wi…

testbench常用任务之SPI slave输出数据

模仿了SPI master从SPI slave读取数据的MiSO数据状态 每8个clk后读取的数据加1 用的一些额外寄存器需要自己声明和初始化 //------------------------------------------------------------------------- //send serial data which is increase by 1 on MiSO line //----------…

Vue生产环境调试的方法

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 vue 生产环境默认是无法启用vue devtools的&#xff0c;如果生产应用出了问题&…

RavenDB:基于Windows/.NET平台的NoSQL数据库

众所周知&#xff0c;NoSQL运动旨在成为大数据时代传统关系数据库管理系统的替代品。如今Microsoft对开源的态度有所转变&#xff0c;RavenDB就是很好的例子。Microsoft对RavenDB&#xff08;NoSQL数据库&#xff09;的认可令很多人感到惊讶。RavenDB可以轻易的替代关系数据库管…

JDBC实例--JDBC连接池技术解密,连接池对我们不再陌生

一、为什么我们要用连接池技术&#xff1f; 前面的数据库连接的建立及关闭资源的方法有些缺陷。统舱传统数据库访问方式&#xff1a;一次数据库访问对应一个物理连接,每次操作数据库都要打开、关闭该物理连接, 系统性能严重受损。 解决方案&#xff1a;数据库连接池&#xff08…

重温51汇编指令(附实验)

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 重温51汇编指令&#xff08;附实验&#xff09; 写在前面&#xff1a; 在电子控制…

SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;shede333主页&#xff1a;http://my.oschina.net/shede333 && http://blog.sina.com.cn/u/1509658847版权声明&#xff1a;原创文章&#xff0c;版权声明&#xff1a;自由转载-非商用-非衍生-保…

升级nginx,查看已经安装的模块,并隐藏或者修改版本号

升级前&#xff0c;查看已经安装的版本以及模块[rootmail ~]# /opt/nginx/sbin/nginx -Vnginx version: nginx/0.5.34 built by gcc 3.4.6 20060404 (Red Hat 3.4.6-3)configure arguments: --prefix/opt/nginx --sbin-path/opt/nginx/sbin/nginx --conf-path/opt/nginx/conf/n…

SpringCloudAlibaba微服务docker容器打包和部署示例实战

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 概述 我们使用前面《SpringCloudAlibaba注册中心与配置中心之利器Nacos实战与源码…

MongoVUE的Collections数据不显示的解决方法

问题描述&#xff1a; 使用 mongoDB数据库&#xff0c; 数据添加成功了&#xff0c;使用命令行能查询出来&#xff0c;但在MongoVUE 中数据却不显示 (我使用的是 mongoDB 3.4 的版本) 原因&#xff1a;引擎问题&#xff0c;只要降到2.X版本就可以显示了     3.x默认是wire…

SaltStack WEB UI Halite初体验

闲来无聊&#xff0c;话说saltstack webui halite还一直没玩&#xff0c;于是就凑今天体验一把&#xff1b;很多尝鲜的同学都说halite的功能较少&#xff0c;而其也正符合其说明console&#xff0c;不过其UI我还是蛮喜欢的&#xff0c;个人觉得比较清新简洁、挺好下面就来安装体…

Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

TAppEncoder的main函数

TAppEncoder是编码器工程&#xff0c;完成视频序列的编码。 运行时&#xff0c;首先调用encmain.cpp中的main函数 main函数中完成的工作主要有初始化encoder类&#xff0c;解析cfg文件&#xff0c;然后调用TAppEncTop::encode函数进入下一层&#xff0c;并且对编码过程进行计时…