基础知识
两鬓已不能斑白
这个作者很懒,什么都没留下…
展开
-
面试总结: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 · 16261 阅读 · 6 评论 -
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 · 1979 阅读 · 0 评论 -
UML 箭头怎么画
UML 箭头怎么画 概念走开,我们只要例子 :-) ——下文并不阐述UML的具体概念,只是以最简单的示例,展示如何绘制UML中类的各种关系。如果想更多地了解概念,可以参考这篇文章http://www.uml.org.cn/oobject/201104212.asp1、继承 继承——实线三角箭头2、实现 接口实现——虚线三角箭头3、关联 关联——实线箭头 关联:A原创 2017-07-27 13:10:32 · 5207 阅读 · 1 评论 -
java多线程售票小例子
java多线程售票小例子1、错误示范class SellThread implements Runnable { private int i = 20; public void run() { while(true) { if(i > 0) { try { Thread.sl原创 2017-08-11 10:24:06 · 2787 阅读 · 2 评论 -
并发量面试小结
并发量面试小结 根据之前面试的血泪史,除了功能以外,系统的性能也是面试官很喜欢发难的地方。由于平时在学校做的项目没有多少访问量,因此难以接触到大量并发请求达到系统性能瓶颈的问题。为了准备面试,也为了开发出性能更优化的系统,我最近查阅了一些资料,现将相关内容总结如下:1、代码优化 一个系统最基础的部分就是一行一行代码,如果我们的每一行代码都优化到极致,那么系统的性能想必也差不到哪去。原创 2017-08-03 17:20:21 · 3669 阅读 · 0 评论 -
查找两个字符串a,b中的最长公共子串
查找两个字符串a,b中的最长公共子串 题目描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 输入 abcdefghijklmnop abcsafjklmnopqrstuvw 输出 jklmnop思路:最大公共子串与最长公共子序列不同str1 = “12345” str2 = “123abc45”最长公共子串原创 2017-08-08 21:39:34 · 2138 阅读 · 1 评论 -
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 · 705 阅读 · 0 评论 -
数组指针的小例子
数组指针的小例子下面的例子,包含几个知识点: 1. 数组与指针 2. 自增运算符++ 3. printf()从右向左打印#include <iostream>using namespace std;int main() { int b = 3; int arr[] = {6,7,8,9,10}; int *ptr = arr; *(ptr++) += 123;原创 2017-07-23 23:37:26 · 367 阅读 · 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 · 1340 阅读 · 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 · 1456 阅读 · 0 评论 -
请将下列构造函数补充完整,使得程序的运行结果是5
请将下列构造函数补充完整,使得程序的运行结果是5原题地址:https://www.nowcoder.com/test/question/done?tid=9799426&qid=46329#summary#include<iostream>using namespace std;class Sample{ public: Sample(int x){原创 2017-08-12 09:23:39 · 1033 阅读 · 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 · 3475 阅读 · 0 评论 -
转载:快排时间复杂度分析
快排时间复杂度分析转自:http://blog.csdn.net/hn_gsf/article/details/52249621我们来分析一下快速排序法的性能。快速排序的时间性能取决于快速排序递归的深度,可以用递归树来描述递归算法的执行情况。最好情况如图9‐9‐7所示,它是{50,10,90,30, 70,40,80,60,20}在快速排序过程中的递归过程。由于我们的第一个关键字是50,正好是待排序转载 2017-09-23 09:44:40 · 10762 阅读 · 2 评论 -
C++ map遍历
C++ map遍历#include <iostream>#include <map>using namespace std;int main() { map<int, int> _map; _map[0] = 1; _map[1] = 2; _map[10] = 10; map<int, int>::iterator iter; iter = _map原创 2017-07-19 08:21:22 · 210754 阅读 · 19 评论 -
转载:TCP为什么要三次握手而结束要四次
转载:TCP为什么要三次握手而结束要四次转自:http://blog.csdn.net/scythe666/article/details/519260421、连接为什么3次握手举个打电话的例子: A : 你好我是A,你听得到我在说话吗 B : 听到了,我是B,你听到我在说话吗 A : 嗯,听到了 建立连接,开始聊天!三次握手的过程如下所示:简单而言:如果不是三次握手的话,那么到底需要几次握转载 2017-08-29 10:40:06 · 1238 阅读 · 2 评论 -
Java源码阅读之ArrayList
Java源码阅读之ArrayList 前言:网上有很多关于java源代码的文章,其中不乏逐行分析代码的大牛博文。本文不再赘述每行代码的意思,而是分析一些常用方法的代码段。这样,我们在编程的时候,就能了解函数背后运行的机制,使得我们程序设计得更为合理。1、知识汇总 ArrayList本质上是一个”动态数组”,能够动态申请内存。当存储空间不够时,能够自动扩容。由于底层是用数组实现的,所以Arr原创 2017-07-27 23:10:27 · 505 阅读 · 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 · 752 阅读 · 0 评论 -
最大公共子串
最大公共子串 题目描述 计算两个字符串的最大公共字串的长度,字符不区分大小写最大公共子串与最长公共子序列不同str1 = “12345” str2 = “123abc45”最长公共子串子串:123 最长公共子序列:12345这两个都可以用动态规划,只是状态转移方程有区别 首先两者都要创建一个二维数组dp[m][n],并且初始化二维数组的内容为0: 然后,i 和j 分原创 2017-08-05 13:31:02 · 794 阅读 · 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 · 5000 阅读 · 3 评论 -
Java源码阅读之LinkedList
Java源码阅读之LinkedList 前言:网上有很多关于java源代码的文章,其中不乏逐行分析代码的大牛博文。本文不再赘述每行代码的意思,而是分析一些常用方法的代码段。这样,我们在编程的时候,就能了解函数背后运行的机制,使得我们程序设计得更为合理。 ——如果事先知道容量大小,可以使用ArrayList。否则由于扩容的关系,建议使用LinkedList1、知识汇总 Linked原创 2017-07-28 00:05:04 · 400 阅读 · 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 · 450 阅读 · 0 评论 -
Java源码阅读之HashMap
Java源码阅读之HashMap知识汇总HashMap的结构如下,绿色框是一个数组,数组的每一个元素都是一个单链表的头结点。红色框就是一个单链表,单链表用来解决冲突,如果不同的key值映射到了数组中的同一位置,则将其放到链表中。HashMap中的结点重写了hashCode()方法和equals()方法,只有key和value都相等时,才认为两个结点相等,源码如下:static原创 2017-07-31 22:17:28 · 539 阅读 · 0 评论 -
python join连接字符串Demo
python join连接字符串# -*- coding: utf-8 -*-list = ['a', 'b', 'c']print(''.join(list))原创 2017-08-01 09:04:28 · 503 阅读 · 0 评论 -
const与指针、成员函数、#define
const与指针我们知道被const修饰的变量表示常量,如const int a = 100; 表示a是一个值为100的常量,且不可改变。那么const修饰指针呢?const修饰指针的情况分为4种:int b = 500;const int* a = &b; // (1)int const *a = &b; // (2)int* const a = &b;原创 2017-07-03 21:14:01 · 379 阅读 · 0 评论 -
内联函数和宏定义的区别
内联函数和宏定义的区别与普通函数相比,内联函数可以加快程序的运行速度,在编译时,内联函数可以直接嵌入到代码中。内联函数要做参数的类型检查,而宏定义只是简单的替换,因此内敛函数更安全(有点像const)当一个函数被多次调用时,可以考虑使用内敛函数(函数内不包括循环、条件判断等语句)内敛函数的关键字inline,必须放到函数的定义位置,放到声明位置不起任何作用内敛函数的本质是,以空间换性能,因原创 2017-07-05 22:16:16 · 437 阅读 · 0 评论 -
指针与数组(未完)
指针与一维数组int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};cout << a << endl; // 0x22fe20cout << a[0] << endl; // 1cout << *a << endl; // 1cout << &a[0] << endl; // 0x22fe20cout << &a[1] << endl;原创 2017-07-14 13:37:53 · 404 阅读 · 1 评论 -
Test b() 还是Test b?
Test b() 还是Test b? 见下面一段代码,问语句1、2、3、4中,在编译时哪一句会报错?#include <iostream>using namespace std;class Test{public: Test(int) { } Test() { } void fun(){ cout << "fun" << endl;原创 2017-07-13 12:47:48 · 596 阅读 · 0 评论 -
sizeof的那些事儿
sizeof的那些事儿sizeof是一个坑,但它几乎是笔试的必考题,所以有必要整理一下。首先要说明的是,sizeof返回的单位是字节(Byte)———————————————–字符串、字符数组的sizeofchar* ss1 = "0123456789";char ss2[] = "0123456789";char ss3[100] = "0123456789";int ss4[100];co原创 2017-07-03 22:18:36 · 390 阅读 · 0 评论 -
#define宏定义
define宏定义的小例子#include <stdio.h>#include <iostream>#define SUB(x,y) x - y#define ACCESS_BEFORE(element, offset, value) *SUB(&element, offset) = valueusing namespace std;int main() { int i; int原创 2017-07-02 18:35:39 · 721 阅读 · 0 评论 -
switch语句的输出问题
switch语句的输出问题#include <stdio.h>#include <iostream>using namespace std;int main() { int n = 'c'; cout<<n<<endl; // 99 switch(n++) { // 先取n的值,n再加1 default:cout<<"default"; break;原创 2017-07-01 11:04:43 · 2163 阅读 · 0 评论 -
不用if、switch、?: 实现a、b比较大小
不用if、switch、?: 实现a、b比较大小int max = (a + b + abs(a - b)) / 2;分析: if a > b, max = (a + b + a - b) / 2 = a if b > a, max = (a + b + b - a) / 2 = b原创 2017-07-01 10:46:51 · 1221 阅读 · 0 评论 -
指针与引用的区别
指针与引用的区别指针能指向空值;引用不能指向空值,定义时必须初始化指针可以被重新赋值,指向另一个对象;引用总是指向初始化的对象,但是对象的值可以改变如果总是指向一个对象,并且一旦指向一个对象就不再改变,应该用引用。如果可能为空,并且可能指向多个对象,应该用指针,比如遍历链表时,就应该使用指针。(在遍历的过程中,需要指向其他节点,同时当遍历到链表尾时,会指向空)一些小例子:int iv; /原创 2017-07-06 17:59:02 · 299 阅读 · 0 评论 -
关于两个数交换
关于两个数交换 下面5个函数,哪个能成功交换两个数?第一个函数void swap1(int p, int q) { int temp = p; p = q; q = temp;} 很明显不能交换两个数。尽管局部变量被交换了,但是随着局部变量生命周期的结束,不会影响主函数的a,b值。第二个函数void swap2(int *p, int *q) { int原创 2017-07-06 23:23:50 · 941 阅读 · 0 评论 -
用Java写归并排序
用Java写归并排序 归并排序的过程如下:import java.util.*;/* * Java归并排序的练习 */public class MergeSort { public void mergeSort(int[] array, int start, int end) { if(start < end) { int mid = (sta原创 2017-07-16 17:19:43 · 937 阅读 · 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 · 1958 阅读 · 0 评论 -
sizeof和strlen
sizeof和strlen sizeof 和 strlen返回的都是字节数,一个重要的区别在于, strlen返回的是字符串的长度(不包含’\0’),其参数只能是char* sizeof 返回的是对象或类型,所占的内存字节数,所以sizeof需要考虑’\0’。sizeof的参数可以是数组、字符串、对象等等。#include <iostream>#include <stri原创 2017-07-21 22:02:19 · 453 阅读 · 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 · 4107 阅读 · 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 · 610 阅读 · 0 评论 -
用位运算求两个数的平均数
用位运算求两个数的平均数#include <iostream>using namespace std;int func(int x, int y) { // (x&y)是x,y的相同部分 // (x^y)是x,y的不同部分, >>1 表示右移1位,相当于除以二 // 相同部分 加上 不同部分的一半,相当于两个数的平均数 return (x & y) + ((x ^ y原创 2017-07-17 22:13:28 · 479 阅读 · 0 评论 -
C语言运算符优先级
C语言运算符优先级 C语言运算符优先级(图片来自百度百科)运算符优先级的小例子#include <iostream>using namespace std;int main() { unsigned char a = 0xA5; unsigned char b = ~a >> 4 + 1; // + 的优先级高于 >> printf("%d\n", b); r原创 2017-07-18 09:51:47 · 369 阅读 · 0 评论