面试题梳理
文章平均质量分 56
程序员面试过程中的小题梳理。包括:Java、C/C++、Python的语法、设计模式、数据库、网络和操作系统中的一些知识点。对这些内容进行梳理、编程验证等
两鬓已不能斑白
这个作者很懒,什么都没留下…
展开
-
C/C++面试题:构造函数与析构函数
构造函数与析构函数的一道小题下面程序的输出是什么?#include<iostream>using namespace std;class TestClass{ char x;public: TestClass() { cout << 'A'; } TestClass(char c) { cout << c; } ~TestClass() { cout << 'B';原创 2017-08-11 21:36:10 · 1952 阅读 · 0 评论 -
java 向下取整和向上取整
转自:http://dilegencehe.blog.163.com/blog/static/43255413201111178523181/ 向上取整用Math.ceil(double a) 向下取整用Math.floor(double a) 举例: double a=35; double b=20; double c = a/b;转载 2017-08-12 09:02:30 · 1425 阅读 · 0 评论 -
java打印出当前时间小例子
java打印出当前时间小例子java打印时间的方法有很多,这里我写一个小程序留作存档,以后需要时查看比较方便 ~import java.util.Date;import java.text.SimpleDateFormat;public class Example{ public static void main(String args[]){ Date d = new Da原创 2017-08-12 10:41:14 · 3463 阅读 · 0 评论 -
排序的时间复杂度(记忆帖)
排序的时间复杂度(记忆帖) 怕记不住稳定的排序 时间复杂度 空间复杂度 冒泡排序 平均O(n2),最好O(n) 1 插入排序 平均O(n2),最好O(n) 1 归并排序 O(nlogn) O(n) 桶排序 O(n) O(k)不稳定的排序 时间复杂度 空间复杂度 选择排序 O(n2) 1 希尔排序 O(原创 2017-09-02 14:34:19 · 2959 阅读 · 1 评论 -
转载:TCP为什么要三次握手而结束要四次
转载:TCP为什么要三次握手而结束要四次转自:http://blog.csdn.net/scythe666/article/details/519260421、连接为什么3次握手举个打电话的例子: A : 你好我是A,你听得到我在说话吗 B : 听到了,我是B,你听到我在说话吗 A : 嗯,听到了 建立连接,开始聊天!三次握手的过程如下所示:简单而言:如果不是三次握手的话,那么到底需要几次握转载 2017-08-29 10:40:06 · 1224 阅读 · 2 评论 -
Java常量池的大概理解
转载自:http://www.cnblogs.com/iyangyuan/p/4631696.html 触摸java常量池 Java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。 理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不转载 2017-08-25 08:59:58 · 551 阅读 · 0 评论 -
HashMap和Hashtable的遍历
HashMap和Hashtable的遍历 HashMap Hashtable keySet() keySet() entrySet() entrySet() value() elements() iterator iterator 此外,Hashtable还可以使用keys() 和Enumeration进行遍历,闲言少叙,直接上代码import java.u原创 2017-08-25 09:58:34 · 2153 阅读 · 0 评论 -
java写一个堆排序(大顶堆)
java写一个堆排序(大顶堆) 堆排序的时间复杂度,最好,最差,平均都是O(nlogn),空间复杂度O(1),是不稳定的排序堆(或二叉堆),类似于完全二叉树,除叶子节点外,每个节点均拥有左子树和右子树,同时左子树和右子树也是堆。 小顶堆:父节点的值 <= 左右孩子节点的值 大顶堆:父节点的值 >= 左右孩子节点的值堆的存储: 用一个数组存储堆就可以了,如【19, 17, 20, 18,原创 2017-08-28 12:22:13 · 3263 阅读 · 1 评论 -
面试总结:java程序执行过程 + JVM内存管理 + GC垃圾回收机制
java程序执行过程 +JVM内存管理 + GC垃圾回收机制1、Java程序执行过程一个java程序的编译和执行过程如下:.java ——编译——> .class类加载器负责加载各个字节码文件(.class)加载完.class后,由执行引擎执行,在执行过程中,需要运行时数据区提供数据补充:手动编译.javaMain.javapublic class Main { public sta原创 2017-08-17 19:15:26 · 16204 阅读 · 6 评论 -
面试总结:关于数据库范式的一点理解
关于数据库范式的一点浅显的理解 因为看不懂复杂的定义和概念,只能写几个小例子记录下来。作者纯小白,如果有错误还请指正~1NF 原子项,不可再分2NF 非主键要绝对依赖主键,消除部分依赖3NF 不包含其它表中的非主键信息1 NF每一个属性都是原子项,不能再分割。下面这个例子中,联系方式可再分为email和tel,所以不满足1NF ID 姓名 年龄 联系方式 1 asdf原创 2017-08-17 19:39:34 · 416 阅读 · 0 评论 -
面试总结:TCP三次握手、四次挥手
TCP三次握手、四次挥手参考:百度百科1、三次握手三次握手的过程如下:客户端A 发送SYN(seq = x)报文给服务器B,然后进入SYN_SENT状态;B收到SYN报文,回应一个SYN(seq = y) ACK (ACK = x + 1)报文,进入SYN_RCVD状态;A收到SYN报文后,回应一个ACK(ACK = y + 1),进入ESTABLISHED状态;B收到ACK报文后,进入EST原创 2017-08-17 22:14:57 · 5653 阅读 · 0 评论 -
java中逻辑右移">>>"算术右移">>"的区别?
1、算数右移 “>>” 考虑符号位,右移1位,若符号位为1,则左边补1;若符号位为0,则左边补0。2、逻辑右移 “>>>” 不考虑符号位,左边统一补0例子: byte a = ~127;System.out.println(a);a = (byte)(a >>> 2); //强制转成byte型,将对结果进行截断System.out.println(a); 结果如下 -128转载 2017-08-19 10:29:38 · 975 阅读 · 0 评论 -
java构造方法、静态变量初始化顺序的小例子
java构造方法、静态变量初始化顺序的小例子题目来自:https://www.nowcoder.com/test/question/done?tid=10095249&qid=56443#summary以下代码输出的结果是:class Singleton { private static Singleton obj = new Singleton(); public static i原创 2017-08-21 14:49:41 · 531 阅读 · 0 评论 -
字符统计
字符统计 题目描述 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用) 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出 示例1 输入 aadddccddc 输出 dca思路1:使用HashMap,扫描字符串统计每一个字符出现的次数,然后根据出现次数进行排序。时间复杂度最好也就是O(n原创 2017-08-04 15:12:39 · 462 阅读 · 0 评论 -
找出字符串中第一个只出现一次的字符
找出字符串中第一个只出现一次的字符 题目描述 找出字符串中第一个只出现一次的字符。输入一个非空字符串,输出第一个只出现一次的字符,如果不存在输出-1 示例1: 输入 asdfasdfo 输出 o思路:利用桶排序的思想import java.util.Scanner;public class Main { public static原创 2017-08-04 22:29:35 · 1316 阅读 · 2 评论 -
最大连续bit数
最大连续bit数 题目描述 功能: 求一个byte数字对应的二进制数字中1的最大连续数, 例如3的二进制为00000011,最大连续2个1思路:利用位运算,不断右移并“与”1,如果“与”的结果是1,说明二进制bit为最后一位的数字是1。注意:可能有负数的情况。对于负数的处理思路是:统计0的个数,然后用8减。由于byte在java中占用1个字节,就是8位,所以可以用8减。impo原创 2017-08-05 11:03:50 · 377 阅读 · 0 评论 -
最大公共子串
最大公共子串 题目描述 计算两个字符串的最大公共字串的长度,字符不区分大小写最大公共子串与最长公共子序列不同str1 = “12345” str2 = “123abc45”最长公共子串子串:123 最长公共子序列:12345这两个都可以用动态规划,只是状态转移方程有区别 首先两者都要创建一个二维数组dp[m][n],并且初始化二维数组的内容为0: 然后,i 和j 分原创 2017-08-05 13:31:02 · 754 阅读 · 0 评论 -
查找两个字符串a,b中的最长公共子串
查找两个字符串a,b中的最长公共子串 题目描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 输入 abcdefghijklmnop abcsafjklmnopqrstuvw 输出 jklmnop思路:最大公共子串与最长公共子序列不同str1 = “12345” str2 = “123abc45”最长公共子串原创 2017-08-08 21:39:34 · 2118 阅读 · 1 评论 -
网易笔试:构造队列
网易笔试:构造队列 题目描述 小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序: while(!Q.empty()) //队列不空,执行循环 { int x = q.front(); //取出当前队头的值x q.pop();原创 2017-08-09 09:28:15 · 478 阅读 · 0 评论 -
网易笔试:洗牌
网易笔试:洗牌 题目描述 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直原创 2017-08-09 13:56:11 · 477 阅读 · 0 评论 -
网易笔试:解救小易
网易笔试:解救小易 题目描述 有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解原创 2017-08-09 19:31:35 · 601 阅读 · 0 评论 -
网易笔试:Fibonacci数列
网易笔试:Fibonacci数列 题目描述 Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让原创 2017-08-09 19:33:51 · 749 阅读 · 0 评论 -
网易笔试:数字翻转
网易笔试:数字翻转 题目描述 对于一个整数X,定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如: 如果 X = 123,则rev(X) = 321; 如果 X = 100,则rev(X) = 1. 现在给出整数x和y,要求rev(rev(x) + rev(y))为多少? 输入描述: 输入为一行,x、y(1 ≤ x、y ≤ 1000),以原创 2017-08-09 20:30:57 · 845 阅读 · 0 评论 -
牛顿法求解立方根
牛顿法求解立方根 题目描述 计算一个数字的立方根,不使用库函数 输入: double 待求解参数 返回值: double 输入参数的立方根 示例1 输入:216 输出:6.0以下是牛顿法的介绍,来自维基百科: 牛顿法(英语:Newton’s method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一原创 2017-08-02 20:17:11 · 3955 阅读 · 0 评论 -
最长递增子序列
最长递增子序列 题目描述 Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么?你能替Redraiment研究他最多走的步数吗? 样例输入 6 2 5 1 5 4 5 样例输出 3 提示 从第1格开始走,最多为3步, 2 4 5 从第2格开始走,最多只有原创 2017-08-03 22:35:26 · 993 阅读 · 0 评论 -
并发量面试小结
并发量面试小结 根据之前面试的血泪史,除了功能以外,系统的性能也是面试官很喜欢发难的地方。由于平时在学校做的项目没有多少访问量,因此难以接触到大量并发请求达到系统性能瓶颈的问题。为了准备面试,也为了开发出性能更优化的系统,我最近查阅了一些资料,现将相关内容总结如下:1、代码优化 一个系统最基础的部分就是一行一行代码,如果我们的每一行代码都优化到极致,那么系统的性能想必也差不到哪去。原创 2017-08-03 17:20:21 · 3656 阅读 · 0 评论 -
Java源码阅读之HashMap
Java源码阅读之HashMap知识汇总HashMap的结构如下,绿色框是一个数组,数组的每一个元素都是一个单链表的头结点。红色框就是一个单链表,单链表用来解决冲突,如果不同的key值映射到了数组中的同一位置,则将其放到链表中。HashMap中的结点重写了hashCode()方法和equals()方法,只有key和value都相等时,才认为两个结点相等,源码如下:static原创 2017-07-31 22:17:28 · 509 阅读 · 0 评论 -
python join连接字符串Demo
python join连接字符串# -*- coding: utf-8 -*-list = ['a', 'b', 'c']print(''.join(list))原创 2017-08-01 09:04:28 · 486 阅读 · 0 评论 -
Python __name__ == '__main__'的作用
在Python中,经常能看到下面这句话:if __name__ == '__main__':那么这句话的作用是什么呢?首先上结论:1、当.py文件自己运行时,main下面的代码执行 2、当.py文件被其他文件引用时,main下面的代码不执行为了验证上面的结论,来看一个小例子:新建一个first.py文件,在文件中键入以下代码:# first.pydef hello_world(): pri原创 2017-08-01 17:04:52 · 681 阅读 · 0 评论 -
UML 箭头怎么画
UML 箭头怎么画 概念走开,我们只要例子 :-) ——下文并不阐述UML的具体概念,只是以最简单的示例,展示如何绘制UML中类的各种关系。如果想更多地了解概念,可以参考这篇文章http://www.uml.org.cn/oobject/201104212.asp1、继承 继承——实线三角箭头2、实现 接口实现——虚线三角箭头3、关联 关联——实线箭头 关联:A原创 2017-07-27 13:10:32 · 5055 阅读 · 1 评论 -
Java源码阅读之ArrayList
Java源码阅读之ArrayList 前言:网上有很多关于java源代码的文章,其中不乏逐行分析代码的大牛博文。本文不再赘述每行代码的意思,而是分析一些常用方法的代码段。这样,我们在编程的时候,就能了解函数背后运行的机制,使得我们程序设计得更为合理。1、知识汇总 ArrayList本质上是一个”动态数组”,能够动态申请内存。当存储空间不够时,能够自动扩容。由于底层是用数组实现的,所以Arr原创 2017-07-27 23:10:27 · 472 阅读 · 0 评论 -
Java源码阅读之LinkedList
Java源码阅读之LinkedList 前言:网上有很多关于java源代码的文章,其中不乏逐行分析代码的大牛博文。本文不再赘述每行代码的意思,而是分析一些常用方法的代码段。这样,我们在编程的时候,就能了解函数背后运行的机制,使得我们程序设计得更为合理。 ——如果事先知道容量大小,可以使用ArrayList。否则由于扩容的关系,建议使用LinkedList1、知识汇总 Linked原创 2017-07-28 00:05:04 · 364 阅读 · 0 评论 -
Java多线程学习笔记
Java多线程学习笔记1、继承Thread类 实现多线程的常用方法就是继承Thread类,然后覆盖run()方法。下面是实例代码:import java.util.Date;public class ThreadTest extends Thread{ @Override public void run() { // 重写run方法 System.out.prin原创 2017-07-29 00:04:22 · 715 阅读 · 0 评论 -
Java 各类型的范围
Java 各类型的范围,留作参考public class Test { public static void main(String[] args) { byte byte_max, byte_min; short short_max, short_min; char char_max, char_min; int int_max原创 2017-07-21 16:36:13 · 594 阅读 · 0 评论 -
C++ 整数与字符串相互转化
一. 整数转化为字符串方法1:用itoa(实战时常用)#include <iostream>#include <stdlib.h>using namespace std;int main() { // 整数转字符串 int num = 6; char string[7]; // itoa()函数有3个参数:源字符串、目标字符串、进制 itoa(num, str原创 2017-07-21 19:17:08 · 3925 阅读 · 0 评论 -
sizeof和strlen
sizeof和strlen sizeof 和 strlen返回的都是字节数,一个重要的区别在于, strlen返回的是字符串的长度(不包含’\0’),其参数只能是char* sizeof 返回的是对象或类型,所占的内存字节数,所以sizeof需要考虑’\0’。sizeof的参数可以是数组、字符串、对象等等。#include <iostream>#include <stri原创 2017-07-21 22:02:19 · 418 阅读 · 0 评论 -
char 数组的初始化问题
char 数组的初始化问题#include <iostream>#include <string.h>using namespace std;int main() { // 一维数组 char str1[] = "ab"; cout << str1 << endl; // ab char str2[] = {"ab"}; cout原创 2017-07-21 22:22:52 · 1935 阅读 · 0 评论 -
union和内存对齐的小例子
union和内存对齐的小例子下面这两个例子,包含了两个知识点: 1. union共用内存首地址 2. 结构体内存对齐例子1:#include <stdio.h>#include <iostream>using namespace std; /*union 共用体,完全共用一个内存首地址,针对union中变量的操作共同生效*/ /*牵一发而动全身,a、b中的任意一个变了,另一个也变了*/ty原创 2017-07-23 23:03:36 · 434 阅读 · 0 评论 -
switch小例子
switch小例子#include <iostream>using namespace std;int main() { int n = 'c'; switch(n++) { default : cout<<"error"<<endl; break; case 'a': case 'A':原创 2017-07-23 23:13:42 · 1301 阅读 · 0 评论 -
printf从右向左计算,从左向右打印
printf从右向左打印#include <stdio.h>int main() { int x = 0; printf("%d,%d\n", x, x++); printf("%d",x); return 0;}printf(“%d,%d\n”, x, x++)函数,从右向左执行。首先打印x++,然后打印x原创 2017-07-23 23:29:21 · 4888 阅读 · 3 评论