面试积累【记下哪些被虐的细节】
来源:互联网 发布:虚拟社交网络弊端 编辑:程序博客网 时间:2024/06/05 09:23
[今天去一家叫做云知声的北京科技(逗比在深圳怎么叫北京捏)企业没面试,被虐了]
以下代码请想办法输出“ab”
http://www.cnblogs.com/Sharley/p/5895870.html#3516964
public void print() { if ( ) { System.out.print("a"); } else { System.out.print("b"); }}
脑洞大开的做法:
public void print() { // if ( ) { System.out.print("a");// } else { System.out.print("b");// }}
套路解法:
填入内容 true){System.out.print(“a”);}if(false。
public void print() { if (true) { System.out.print("a"); } if (false) { System.out.print("a"); } else { System.out.print("b"); }}
类似地也可以填入 true){System.out.print(“ab”);return;}if(false 等。
当初大学时单纯的少年可是很难想出这样的套路的,时间改变了我们啊
————————————————->
#define AAA 100#define BBB AAA+100#define CCC BBB*2 printf("%d",CCC);/*结果输出是: 300 *//*今天面试的那个工程师错了*/
有关内存泄露和内存溢出的试题:
如何防止内存泄露?如何检查内存泄露?
http://www.cnblogs.com/Sharley/p/5285045.html
内存泄漏:是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出
以发生的方式来分类,内存泄漏可以分为4类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
内存溢出和内存泄露是两个问题。
内存泄露在调试的时候可能发现不了但是应用上线后可能就会暴露【小型潜入式系统这类问题比较少见】。
—————————————->
#include <stdio.h>#include <stdlib.h>/**/#if 0void strcopy(char *dst,char* src){ while((*dst++ = *src++)!='\0');}#elif 0 //将源字符串加const,表明其为输入参数,加2分strcopy( char *strDest, const char *strSrc ) { while((*strDest++=*strSrc++)!='\0');} #elif 0 void strcopy(char *dst,const char *src){ if((dst)&&(src)){ /*assert( (strDest != NULL) && (strSrc != NULL));*/ while((*dst++=*src++)!='\0'); }else{ printf("error in argv\n"); }}#elif 1/*为了实现链式操作,将目的地址返回,加3分!*/char * strcopy(char *dst,const char *src){ char *ret=dst; if((dst)&&(src)){ /*assert( (strDest != NULL) && (strSrc != NULL));*/ while((*dst++=*src++)!='\0'); return ret; }else{ printf("error in argv\n"); return NULL; }}#endif/********************************//****形参的顶级陷阱***/void getmem(char *p){ p = malloc(100);}char *p = NULL;getmem(p);if(NULL==p) printf("fuck empty\n");/*p没有被改变*//*******************************/ /**********************/#define AAA 100#define BBB AAA+100#define CCC BBB*2 printf("%d\n",CCC);//300/**********************/int main(void){ char dst[6]=""; char src[6]="hello";// char *dst=NULL; strcopy(dst,src); if(dst) printf("%s\n",dst); return 0;}
编写一个函数【可以编译】输入年月日时分秒,能计算出下一面的年月日时分秒:如输入2000年2月28日-23点59秒59分,能输出2000年2月29日-00点00分00秒
#include <stdio.h>#include <unistd.h>#include <stdlib.h>void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second){ int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31}; if( *year < 0 || *month < 1 || *month > 12 || *date < 1 || *date > 31 || *hour < 0 || *hour > 23 || *minute < 0 ||*minute > 59|| *second <0 || *second >60 ) return; if( *year%400 == 0 || *year%100 != 0 && *year%4 == 0 ) dayOfMonth[1] = 29; ++(*second); if(*second >= 60) { *second = 0; *minute += 1; if(*minute >= 60) { *minute = 0; *hour += 1; if(*hour >= 24) { *hour = 0; *date += 1; if(*date > dayOfMonth[*month-1]) { *date = 1; *month += 1; if(*month > 12) { *month=1;*year += 1; } } } } } return;}int main(void){ int year=2001, month=2, date = 28, hour=23, minute=58, second=59; while(1){ ResetTheTime(&year,&month,&date,&hour,&minute,&second); printf("%d-%d-%d > %d:%d:%d\n",year,month,date,hour,minute,second); usleep(1000); //second++; }}
关于内存和栈的区别:
这里的栈和堆的东西其本质应该是一种数据结构【队列,栈,链表】
堆和栈的区别:
一、堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二、堆栈缓存方式区别:
1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三、堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。
- 面试积累【记下哪些被虐的细节】
- 百度面试经历以及一些需要记下来的细节
- 记下点滴的灵感,学会积累(1)
- 记下自己java面试的经历(转)
- C++的细节问题还是记下来的好0.0
- 面试的一点积累
- 细节积累
- 细节积累
- 【面试技巧】让你被“刷”掉的面试细节
- 简历要怎样写呢?面试要注意哪些细节?
- 记下一些Java面试被问到的问题,欢迎回答
- 关于面试项目的积累
- 工作日常小知识积累---这些东西,不记下就会忘的。
- 面试中,不可忽视的细节
- 面试积累
- 面试积累
- 面试积累
- 面试积累
- 使用NotificationCompat获得好看的通知 (Android Development Patterns S1 Ep 2)
- memcache安装,配置和使用
- 2 Python 类,实例,静态方法
- [解读小程序]生活工具集合
- Longest Ordered Subsequence
- 面试积累【记下哪些被虐的细节】
- 判断给定字符串是否为回文串
- 机器学习与计算机视觉的两个网站
- 关于recvfrom接收超时
- PHP CURL 总结
- Java字符串相加
- 最近遇到的之前没遇到的但是很常用的问题(仅供自己记录)
- Android内存进程管理机制
- Leetcode-9. Palindrome Number