1. 8涓绋嫔簭锻桦穿婧幂灛闂达纴鎴戠牬阒蹭简
楂樻哕杩8涓猚璇瑷闂棰桡纴浣犱篃鑳借繘澶у巶
1銆佺敤棰勫勭悊鎸囦护#define澹版槑涓涓甯告暟锛岀敤浠ヨ〃鏄1骞翠腑链夊氩皯绉掞纸蹇界暐闂板勾闂棰)銆
#define SEC_YEAR (365*24*60*60)UL钥冨疗镣癸细1.#define璇娉旷殑锘烘湰鐭ヨ瘑锛堜緥濡傦细涓嶈兘浠ュ垎鍙风粨𨱒燂纴𨰾鍙风殑浣跨敤锛岀瓑绛)銆2.镍傚缑棰勫勭悊鍣ㄥ皢涓轰綘璁$畻甯告暟琛ㄨ揪寮忕殑鍊硷纴锲犳わ纴鐩存帴鍐椤嚭浣犳槸濡备綍璁$畻涓骞翠腑链夊氩皯绉掕屼笉鏄璁$畻鍑哄疄闄呯殑鍊硷纴鏄镟存竻鏅拌屾病链変唬浠风殑銆
3.镒忚瘑鍒拌繖涓琛ㄨ揪寮忓皢浣夸竴涓16浣嶆満镄勬暣鍨嬫暟婧㈠嚭-锲犳よ佺敤鍒伴暱鏁村瀷绗﹀彿L,锻婅瘔缂栬疟鍣ㄨ繖涓甯告暟鏄镄勯暱鏁村瀷鏁般4.濡傛灉浣犲湪浣犵殑琛ㄨ揪寮忎腑鐢ㄥ埌U鍎匡纸琛ㄧず镞犵﹀彿闀挎暣鍨嬶级锛岄偅涔堜綘链変简涓涓濂界殑璧风偣銆傝颁綇锛岀涓鍗拌薄寰堥吨瑕併
2銆佸啓涓涓钬沧爣鍑"瀹廙N,杩欎釜瀹忚緭鍏ヤ袱涓鍙傛暟骞惰繑锲炶缉灏忕殑涓涓銆
#define MIN(a,b)((a)<=(b)?(a):(b))钥冨疗镣癸细1.镙囱瘑#define鍦ㄥ畯涓搴旂敤镄勫熀链鐭ヨ瘑銆傝繖鏄寰堥吨瑕佺殑銆傚洜涓哄湪宓屽叆(inline)镎崭綔绗﹀彉涓烘爣鍑咰镄勪竴閮ㄥ垎涔嫔墠锛屽畯鏄鏂逛究浜х敓宓屽叆浠g爜镄勫敮涓鏂规硶锛屽瑰共宓屽叆寮忕郴缁熸潵璇达纴涓轰简鑳借揪鍒拌佹眰镄勬ц兘锛屽祵鍏ヤ唬镰佺粡甯告槸蹇呴’镄勬柟娉曘2.镍傚缑鍦ㄥ畯涓灏忓绩鍦版妸鍙傛暟鐢ㄦ嫭鍙锋嫭璧锋潵銆3.鎴戜篃鐢ㄨ繖涓闂棰桦紑濮嬭ㄨ哄畯镄勫坛浣灭敤銆
3銆侀勫勭悊鍣ㄦ爣璇#error镄勭洰镄勬槸浠涔堬纻
缂栬疟绋嫔簭镞讹纴鍙瑕侀亣鍒#rror灏变细璺冲嚭涓涓缂栬疟阌栾锛屾棦铹舵槸缂栬疟阌栾锛岃佸畠骞插槢锻锛熷叾鐩镄勫氨鏄淇濊瘉绋嫔簭鏄鎸夌収浣犳墍璁炬兂镄勯偅镙疯繘琛岀紪璇戠殑銆#ifdef XXX...#else...#endif
褰撶▼搴忔瘆杈冨ぇ镞讹纴寰寰链変簺瀹忓畾涔夋槸鍦ㄥ栭儴鎸囧畾镄勶纸濡俶akefile),鎴栨槸鍦ㄧ郴缁熷ご鏂囦欢涓鎸囧畾镄勶纴褰扑綘涓嶅お纭瀹氩綋鍓嶆槸钖﹀畾涔変简XXX镞讹纴灏卞彲浠ユ敼鎴愬备笅杩欐牱杩涜岀紪璇戯细#ifdef XXX#error "XXX has been defined"#else#endif杩欐牱锛屽傛灉缂栬疟镞跺嚭鐜伴敊璇锛岃緭鍑轰简XXX has beendefined,琛ㄦ槑瀹廥XX宸茬粡琚瀹氢箟浜嗐
4銆佸祵鍏ュ纺绯荤粺涓缁忓父瑕佺敤鍒版棤闄愬惊鐜锛屼綘镐庝箞镙风敤C缂栧啓姝诲惊鐜锻锛
while(1)锛宖or(;;)锛宭oop:.钬︼纴goto loop銆
5銆佺敤鍙橀噺a缁椤嚭涓嬮溃镄勫畾涔夈
路a)-涓鏁村瀷鏁(An integer)銆
路b)涓涓鎸囧悜鏁村瀷鏁扮殑鎸囬拡锛圆 pointer to aninteger锛夈
路c)涓涓鎸囧悜鎸囬拡镄勭殑鎸囬拡锛屽畠鎸囧悜镄勬寚阍堟槸鎸囧悜涓涓鏁村瀷鏁(A pointer to a pointer to intege)銆
路d)涓涓链10涓鏁村瀷鏁扮殑鏁扮粍(An array of10integers锛夈
路e)涓涓链10涓鎸囬拡镄勬暟缁勶纴璇ユ寚阍堟槸鎸囧悜涓涓鏁村瀷鏁扮殑銆(An array of 10pointers to integers)銆
路f)涓涓鎸囧悜链10涓鏁村瀷鏁版暟缁勭殑鎸囬拡锛圆 pointerto an array of 10 integers)銆
6銆佸叧阌瀛梥tatic镄勪綔鐢ㄦ槸浠涔堬纻
鍦–璇瑷涓锛屽叧阌瀛梥tatic链変笁涓鏄庢樉镄勪綔鐢锛氱涓銆佸湪淇楗板彉閲忕殑镞跺欙纴static淇楗扮殑闱欐佸眬閮ㄥ彉閲忓彧镓ц屼竴娆★纴钥屼笖寤堕暱浜嗗眬閮ㄥ彉閲忕殑鐢熷懡锻ㄦ湡锛岀洿鍒扮▼搴忚繍琛岀粨𨱒熶互钖庢墠閲婃斁銆
绗浜屻乻tatic淇楗板叏灞鍙橀噺镄勬椂鍊欙纴杩欎釜鍏ㄥ眬鍙橀噺鍙鑳藉湪链鏂囦欢涓璁块梾锛屼笉鑳藉湪鍏跺畠鏂囦欢涓璁块梾锛屽嵆渚挎槸extern澶栭儴澹版槑涔熶笉鍙浠ャ
绗涓夈乻tatic淇楗颁竴涓鍑芥暟锛屽垯杩欎釜鍑芥暟镄勫彧鑳藉湪链鏂囦欢涓璋幂敤锛屼笉鑳借鍏朵粬鏂囦欢璋幂敤銆係tatic淇楗扮殑灞閮ㄥ彉閲忓瓨鏀惧湪鍏ㄥ眬鏁版嵁鍖虹殑闱欐佸彉閲忓尯銆傚埯濮嫔寲镄勬椂鍊栾嚜锷ㄥ埯濮嫔寲涓0銆
7銆佸叧阌瀛梒onst链変粈涔埚惈镒忥纻
鍙瑕佷竴涓鍙橀噺鍓岖敤const𨱒ヤ慨楗帮纴灏辨剰锻崇潃璇ュ彉閲忛噷镄勬暟鎹鍙鑳借璁块梾锛岃屼笉鑳借淇鏀癸纴涔熷氨鏄镒忓懗镌cost钬滃彧璇烩(readonly)瑙勫垯锛歝onst绂昏皝杩戯纴璋佸氨涓嶈兘琚淇鏀癸绂cost淇楗颁竴涓鍙橀噺镞讹纴涓瀹氲佺粰杩欎釜鍙橀噺鍒濆嫔寲锛岃嫢涓嶅埯濮嫔寲锛屽湪钖庨溃涔熶笉鑳藉埯濮嫔寲銆
8銆佸叧阌瀛梫olatile链変粈涔埚惈镒忥纻骞剁粰鍑轰笁涓涓嶅悓镄勪緥瀛愩
涓涓瀹氢箟涓簐olatile镄勫彉閲忔槸璇磋繖鍙橀噺鍙鑳戒细琚镒忔兂涓嶅埌鍦版敼鍙桡纴杩欐牱锛岀紪璇戝櫒灏变笉浼氩幓锅囱捐繖涓鍙橀噺镄勫间简銆傜簿纭鍦拌村氨鏄锛屼紭鍖栧櫒鍦ㄧ敤鍒拌繖涓鍙橀噺镞跺繀椤绘疮娆¢兘灏忓绩鍦伴吨鏂拌诲彇杩欎釜鍙橀噺镄勫硷纴钥屼笉鏄浣跨敤淇濆瓨鍦ㄥ瘎瀛桦櫒閲岀殑澶囦唤銆备笅闱㈡槸volatile鍙橀噺镄勫嚑涓渚嫔瓙锛
1:骞惰岃惧囩殑纭浠跺瘎瀛桦櫒锛埚傦细鐘舵佸瘎瀛桦櫒)銆
2:涓涓涓鏂链嶅姟瀛愮▼搴忎腑浼氲块梾鍒扮殑闱炶嚜锷ㄥ彉閲(Non-automatic variables)
3:澶氱嚎绋嫔簲鐢ㄤ腑琚鍑犱釜浠诲姟鍏变韩镄勫彉閲忋
2. 程序员的工作环境是怎样的
每个人职场人都希望在一个轻松、开心、干净、舒适的环境里面工作,这样心情好工作起来自然效率高,但是这毕竟是理想状态下的工作环境,当然现在绝大多数企业工作环境虽然达不到百分百,但至少有百分之六七十以上吧。
那么对于程序员这种有点特殊的工种工作环境又是怎么样的呢?
程序员又被人们称之为码农,也有人调侃戏称“程序猿”,程序员对工作环境往往需要有一张大的办公桌,他们不仅用一台电脑在工作,有时候需要几台电脑同时操作,而且遇到一些bug或者瓶颈的时候需要和同事协同工作,当然在硬件方面除了办公桌要大外,还需要配置比较高的电脑,毕竟这是程序员最基本的工作工具,试想如果刚有灵感,结果电脑卡顿或者死机了,那有可能灵感顿时就消失了,所以他们大多数工作环境都拥有足够大的办公桌和高配置的电脑。
前面就提到了程序员是有点特殊的工种,因为他们往往加班到很晚,时常会通宵,这就和我们正常上班的时间上错开了,他们往往白天睡觉,晚上工作,有时候为了打起精神工作,他们提神的方式各自不同,有抽烟的、有喝咖啡的、有听歌的等等,大家可以想象这是什么样的工作环境吗?但是程序员工作的时候,大多数情况下都需要安静的环境,毕竟安静能让人更好的思考问题。
每个人对工作环境要求都不一样,让自己觉得舒服的环境是自己愿意留在公司的原因之一吧,程序员也是一样的。
大公司的程序员,工作环境基本上就是一个电脑版的“衡水中学”,每天就是开会写代码改代码查代码开会继续循环往复,跟中学里每天就是拼命读书刷题刷题读书吃饭无味上厕所要跑一个样。
硬件配置无需你考虑,肯定是够你用。跟人的成本比起来,硬件就是个渣。
大公司的程序员工作比较稳定,每个人的分工是比较明确的,职业路径也很明晰,越往上的职位对智商的要求越高,这点和靠情商往上升的工作还真有点不一样。在程序员这个队伍里拍马屁搞关系基本没啥用,你写的代码都无需用户检验,自己一跑就知道成不成。这也是IT公司通常人际关系和氛围都比较轻松且简单直接的根本原因,特别适合那些不喜欢搞关系的同学去撸起袖子加油干。
如果你想在这个行业长期发展,智商一定要够用,真的。有没有基础倒在其次,如果数学好更佳。有些业内大咖本身是学数学或物理这些靠智商吃饭的学科的。
小公司的程序员,尤其是那些非IT类小公司里的程序员工作压力更大。面对不懂程序的销售和老板,还有极度贪心又不愿多付费的客户,需求三天两头变,界面是个人就可以提意见改,时间永远是“明天就要”。他们觉得程序员比悟空办法多,所以什么要求都提得出来。能在小公司做出成绩的程序员,真心让人敬佩不已。
小公司的程序员是掌握公司核心机密最多的人,比老板都掌握得多,所以通常他们的待遇也还过得去。另外他们一来二去把公司业务摸透了,出来自己干的也不少,当然能不能干成是另一回事。
其实程序员的工作环境真没什么要求,只要没什么干扰就行。学霸们在这里会找到十分熟悉的感觉,所以程序员之间以“同学”相称的极多。
我是2015年本科毕业的,但是2014年就开始工作了,从程序员+运营的工作开始实习(其实也是看最后哪一个更合适就走哪一个方向)。
对于实习阶段,因为当时待的是小公司,所以大家的配置都很一般。几个主力程序员加上我这个实习的,工作用的都是windows笔记本,联想的,除了我自己配的固态硬盘之外,很多都是机械硬盘在跑,没有特别明确的代码库规范、没有知识系统,交流全靠跑,有的是后端和前端一起干、前端和客服一起干,所以我兼职运营也是如此……平时要是不忙的话,那还没什么事儿,大家会闲聊扯淡,也算是其乐融融;但是要是忙起来,可能会突然加班到很晚——当然这种情况还是比较罕见的。
工作到了中型公司,跟以前的小公司就不在一个量级上了。这个时候主要的工作是后端开发,配置的电脑是联想的ThinkPad,但不是最高配那种,仍然没有固态硬盘,慢的要死。第一梯队的程序员配置有双显示器、机械键盘、mac。我的话配置的是外接显示器,座椅很一般,坐久了比较累。公司分工明确,办公室跨越两座楼,各个团队都有自己的办公室。有自己的wiki、定期站会、严格的代码规范、安全规范。一般情况下主要是在解决各种bug,或者开发新系统。偶尔流量高峰的时候,会加班到一两点,平常并不是特别忙,工作还是比较有序的。
其实想要招妹子进团队的,因为我们团队唯一的测试工程师长得真的一般,而且性格也很差……一个性格好长得好看的运营妹子真的能调动整个团队的气氛。
所以什么机械键盘、Mac、外接多少显示器、加多大固态硬盘、多好的人体工学座椅……这些都是假的,开发的团队里面有好看的妹子才真的是“好的开发环境”。
可以穿拖鞋?可以戴着耳机听着歌?配备两个显示器?身边总是围绕这MM端茶递水果?还是以上都不是,而是诗和远方?
程序员,一个高薪却严重亚 健康 的群体 。他们有着极客精神,疯狂coding的时候可以废寝忘食,但他们也追求精神自由,喜欢自由自在。对于这样一个群体,良好而又恰到好处的工作环境显得尤为重要。
1. 弹性上班制
常规企业的朝九晚五上班制度,说实话并不适合程序员一族,因为这种制度一定程度上扼杀了这个最需要差异性的群体的差异性,把程序员的Coding灵感等同于工厂流水线上机械手臂,希望按钮一按下,灵感发动,按钮再一按下,灵感结束。这是一种一厢情愿的想法。
所以对于高层次的程序员群体,请不要在作息时间上严格限制他们,因为他们不是装配工,有着独一无二的个体差异性,有着不同的思维G点,他们需要差异性的时间作息来调整自己的最佳状态,从而迸发激情和灵感。
2. 宽松的工作氛围
程序员群体讨厌管理,任何自上而下的所谓管理都容易引起程序员们的心理抵触,特别是那种死板的、指令式的管理模式,尤其让程序员们作呕。
程序员们希望自己做的事情是出于内心的意愿,那样他们就会干劲十足,而不是来自于经理计划文档中那条冷冰冰的文字,哪怕是他们心里意愿的和经理的计划本是同一件事。所以对于程序员群体的管理需要技巧,要化管理于无形,让他们感觉不到管理的痕迹,让他们感觉着做这些事情就是出自于他们自己的意愿。
总结来说就是让他们作为自己的管理者,而团队的管理者所要做就是培养他们这种自管理的能力。
适度的压力可以产生做事的动力,但长时间的持续的压力却是扼杀激情和创造力的罪魁祸首。压力会让程序员焦虑,同时也会造成低劣的设计和代码实现,因为交付的压力会让程序员对匆忙设计出来的方案妥协,而不会持续的优化找到最优方案。而一系列看似微不足道的缺陷设计集合到一起,就会形成让人意想不到的、不可控制的乱象。
所以,“快”不见得是好事,“慢”也不见得是坏事。
3. 鼓励参与开源项目
开源项目社区的欣欣向荣,是一朵盛开的奇葩,无论怎么赞誉都不为过。
一些着名的开源项目,例如Linux,Apahce, openssl等等,数不胜数的优秀设计,给我们带来了多少的惊喜,同时也催生了多少的商业公司。
参与到开源项目中,是一个程序员从初级走向高级、完善技术的最有效途径之一。一些着名的开源项目,架构设计和Coding技巧上都属上乘之作, 浸淫其中,受益匪浅。
其实以上三点不仅是对程序员群体,对任何一个职业的人来说都是适用的。再看下知乎上程序员们理想中的工作环境是怎样的。
@萧井陌:我读书的时候就有一个执念,一定要找一家可以穿拖鞋背心大裤衩上班的公司(当然我不穿大裤衩),如果我找不到这样的公司,说明我学得不好,所以我一直以来努力的目标似乎只是为了进一个能穿拖鞋的公司?哈哈哈哈。。。
@知乎用户:我只想要2个显示器
@知乎用户:1.安静,没有人随便喊你或者在你耳边说话;2.绝对的自由,程序员都有一定的怪癖,比如我喜欢听着摇滚乐写代码。这些都要被允许。3.温度,气味舒适的环境。
4.有个养眼的MM同事,大概是这样的
嘿,箭头方向那个哥们才是真正的程序员吧
5.独立10M光钎线
@Indream Luo,软件工程师:1.女多男少,人均年龄不到27;2.身处白云山上,与广东外语外贸大学一墙之隔;3.无边界文化,有问题可以找任何人沟通,包括高层,如果你见得到;4. 健康 文化,加班有补休,提倡8小时,自建食堂和农场,买下巴马泉眼特供矿泉水
@石磊
硬件:
1. 顶配的 MacBook Pro。
2. 上厕所不需要排队。
与人相关:
1. 不会在开发到一半时被通知要重新讨论功能,然后把以前做的东西全部推翻。
2. 没有不必要的会议,必要的会议速战速决。
3. 行政人事什么的做事清爽高效,这样不用在各种日常手续上浪费时间,只管写代码就好。
4. 同事们效率高、工作态度严肃、善于沟通、活泼有趣。
@张英锋:最理想的工作环境应该是能帮助团队沉下心来,开发出最好产品的环境。
1.上级对程序员工作的认可和尊重;
2.对所作的工作有自主权和决定权;
3.营造能让程序员专注于工作的设施,比如大家都提到的安静、以及各种提高生产率的硬件条件;
4.最后是公司是盈利的,最好是暴利,能持续提供更多福利。
@庄生:其实最重要的工作环境,还是有一帮靠谱的同事,真心的。可以术业有专攻,但是该你负责的你负责到底,保质保量,不要麻烦别人。
那你呢?你希望你的工作环境是怎样的?
上联:一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然七点起床八点开会处理九个漏洞十分辛苦 ;
下联:十年编码九年加班八面无光忙的七窍生烟到头六亲不认五体投地依旧四肢酸软三更加班只为二个臭钱一生孤苦;
横批:苦逼程序员。
程序员飘过
作为一名程序员的我可以很负责任的说:是的,工作环境就像问主图片那样,可能会稍微好点,我们公司都是中央空调,不用电风扇!
我在程序员的岗位上也有好几年了,也待过几家公司,其实就工作环境来说,程序员的工作环境还是不错的,不用风吹日晒雨淋,而且是冬暖夏凉!和人们眼中的白领工作人员的工作环境是差不多的。
工作氛围其实也是很好的,程序员在穿着方面大部分公司是没有什么太大要求,可以穿着自己喜欢的风格(脑补一下大裤衩配凉拖的程序员正在撸代码),同事之间的交流也是很活跃的,所以程序员的苦逼之处不在工作环境,而是工作内容和压力。
程序员分工:
1.纯软件工程师,就是只靠电脑吃饭的,设计包括但不仅限于---网页、架构、UI、数据、运维、系统等等,整天与代码打交道;
2.Firmware(分位)工程师,半软半硬的工种,要焊板,要搭建环境,还要写代码维护代码,算法可能没有纯软件工程师牛,但动手能力绝对强,涉及的知识面可能更广。
本人就是后者,来看下我的桌面:
各个公司对于办公环境都不一样,国外都注重个人隐私,很多都是一个人一个封闭的房间。国内大部分就像图中所示那样,半隔开。也有 科技 公司,鼓励大家敏捷开发,多沟通,开方式办公
请忽略那些包含“安静,优美,闲逸的办公环境”的答案吧!
图中的环境,只是正常普通公司的工作环境。
不一定是程序员的。
程序员的工作环境,因工作内容,导致需要很多屏幕。
而且电脑配置也需要很高。
每个人因面对的公司、自身能力等因素,都会导致工作环境的不一样。
所以就有了工作环境好坏的区分。
如果你曾对着大海构思过某个接口,
在樱花飘落的院落里调试过代码,
那么你还觉得在写字间喝着咖啡对着三屏显示器敲键盘是理想的环境吗?
工作环境,还是得靠自己改变。
在程序者的不断追求下,编程是可以和写作一样成为艺术创造过程,
那么任何一个能够激发出你灵感的时刻和环境都应该可以成为你的办公环境。
资深码农应邀回答这个问题。笼统来说,程序员的工作环境与图中展现的差别不大。但根据工作属性和所属行业来讲,还是有一些区别。
甲方和乙方的区别
我在刚毕业时进入了一家软件外包公司,几乎所有的工作都是在甲方所在地完成的。
因为甲方员工是公司的稳定员工,所以工位来讲就要精致一些,配备也要完善一些。一般都会是隔间,有抽屉、插座、文件架、座机、台式电脑,甚至还有床等等。
而我们作为乙方因为流动性大,人数也不固定,甲方公司不太可能为我们准备这些精致的办公位,一般只是拉几张桌子拼凑起来,然后再接几个线板,有时候靠椅都没有,还得坐独凳。
技术驱动和业务驱动的区别
现在任何一个互联网公司,技术部门是必不可少的。但是有的公司会以业务为驱动,有的公司会以技术驱动业务。
以业务为驱动的公司就会优先考虑业务的发展,然后技术来辅助实现。我现在所在的就是这样一家公司,这样的公司技术部门就会非常的小,人员也会很少。这样的公司程序员的工位大体上和整个公司的风格没有太大的区别,因为人少,一般只有5-6个人,做技术的也喜欢安静,所以一般位置会选择靠近办公室的角落。
以技术为驱动的公司会依靠自身技术实力结合行业发展,碰撞出一些具有竞争力的业务品种,并与业务部门配合来实现并推广产品。这样的公司技术人员起码占到50%以上,这样的公司更有可能为程序员规划一个单独的大办公室,与外界隔离。一方面是为技术人员提供安静、舒适的办公环境,另一方面也是尽量避免闲杂人等进出公司技术核心所在地。
以技术为驱动的公司往往技术实力比较突出,所以他们会为自己的技术团队配备“驾驶舱”、小机房等设施。
就问题中的格子间来讲,不管是什么性质的公司,只要场地不是特别的拥挤,都会设计成格子间,这样既保护了员工隐私也充分利用了办公场地的空间。这并不是程序员特有的风格。
3. 编写一个程序,读取5个整数并确定和打印其中的最大值,以下是我写的代码,错了,谁能帮我改改
系统看成是各种对象的集合,这更接近人的思维。
2)软件需求的变动往往是功能的变动,而功能的执行者--对象一般不会有太大的变化。这使得按照对象设计出来的系统结构比较稳定。
3)对象包括属性和方法,对象把属性和方法的具体实现方式一起封装起来,这使得方法与之相关的属性不再分离,提高每个子系统的相对独立性,从而提高了软件的可维护性。
4)支持封装、继承、多态和抽象,提高了软件的可重用性、可维护性和可扩展性。
2.把一个类放在包里有什么作用?(包的作用)
1)能够区分名字相同的类。
2)有助于实施访问权限控制。
3)有助于划分和组织java应用中的各个类。
3.说出一些常用的类,包,接口,请各举出5个。
Runable,ActionListener,Conllection,Map,Set,List接口
1)java.lang包----包括线程类(Thread)、异常类(Exception)、系统类(System)、整数类(Integer)和字符串类(String) 等, 这些类是java程序中经常用到的。
2)java.awt包----抽象窗口工具箱包,awt是(Abstract Window Toolkit) 的缩写。这个包中包含了用于构建GUI界面的类及绘图类。
3)java.io包----输入/输出包,包含各种输入流类和输出流类,如文件输入流类(FileInputStream类)及文件输出流类(FileOutputStream)等。
4)java.util包----提供一些实用类,如日期类(Data)和集合类(Collection)等。
5)java.net包----支持TCP/IP网络协议,包括Socket类及和URL相关的类,这些类都用于网络编程。
除了上面提到的基本包,JDK中还有很多其他包,比如用于数据库编程的java.sql包,用于编写网络程序的java.rmi包(rmi是“Remote Method Invocation”的缩写)。另外,javax.*包是对基本包的扩展,包括用于编写GUI的javax.Swing包,以及用于编写声音程序的javax.sound包等。
4. 描述一下你最常用的编程风格。
1)注意编码规则,符合编码要求。
2)变量,类等起名要有意义。
3)经常格式化代码,注意格式。
4)代码中加入测试方法或测试类,尽量提早发现错误。
5)代码中要加入注释,为别人和自己将来理解代码带来方便。
5. 说一说标识符的命名规则,以及java的编程规范。
Java标识符的命名规则:
1) 标识符由字母、数字、下划线“_”、美元符号“$”或者人民币符号“¥”组成,并且首字母不能是数字。
2) 不能把关键字和保留字作为标识符。
3) 标识符没有长度限制。
4) 标识符对大小写敏感。
Java编程规范:
1)类名和接口名:首字母大写,其余字母小写。如SamDoc
2)方法名和变量名:首字母小写,其余的字母大写。
如bothEyesOfDoll。
3)包名:字母全部小写。如,com.abc.dollapp。
4)常量名:采用大写形式,单词之间以下划线“_”隔开。
如DEFAULT_COLOR_DOL。
…………………………
31、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射
32、抽象类与接口?
答:抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable 接口和 Comparator 接口
33、STRING与STRINGBUFFER的区别。
答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
34、谈谈final, finally, finalize的区别
答:final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)
finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
35、面向对象的特征有哪些方面
答:主要有以下四方面:
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
36、String是最基本的数据类型吗
答:基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
37、int 和 Integer 有什么区别
答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。原始类型封装类booleanBoolean,charCharacter,byteByte,shortShort,intInteger,
longLong,floatFloat,doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关
38、运行时异常与一般异常有何异同
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
39、说出ArrayList,Vector, LinkedList的存储性能和特性
答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
40、HashMap和Hashtable的区别
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
41、heap和stack有什么区别
答:栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素
42、Java的接口和C++的虚类的相同和不同处
答:由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。
43、Java中的异常处理机制的简单原理和应用
答:当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。
43、垃圾回收的优点和原理。并考虑2种回收机制
答:Java语言中一个显着的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
44、你所知道的集合类都有哪些?主要方法?
答:最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
45、描述一下JVM加载class文件的原理机制?
答:JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
46、排序都有哪几种方法?请列举
答: 排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序
从a[ 0 :n- 1 ]中选择一个元素作为middle,该元素为支点
把余下的元素分割为两段left 和right,使得left中的元素都小于等于支点,而right 中的元素都大于等于支点
递归地使用快速排序方法对left 进行排序
递归地使用快速排序方法对right 进行排序
所得结果为left + middle + right
47、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?="3">答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。
throw语句用来明确地抛出一个"异常"。
throws用来标明一个成员函数可能抛出的各种"异常"。
Finally为确保一段代码不管发生什么"异常"都被执行一段代码。
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。
48、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以。必须只有一个类名与文件名相同。
49、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
答:字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
50、java中会存在内存泄漏吗,请简单描述。
答:会。自己实现堆载的数据结构时有可能会出现内存泄露,可参看effective java.
4. 你见过最水的程序员是什么样的
本来是好好的程序员,硬生生让自己成为了“网管”。
1、公司电脑哪里出问题了,他就会在那里。他是工科大学毕业的程序员,编程玩得贼溜,甚至在刚到公司的时候,还曾经在公司的服务器后台放了一些自己开发的编程小游戏,点击就能够运行。那时候我有服务器权限,还曾经玩过他做的编程游戏,不管是从界面UI、运行流畅程度来讲,他做得都挺好的。
但是就是这样一个程序员,到了公司之后,却成为了一个“网管型”的员工:公司里行政办公人员大概有百来人,几乎每个人都有配置电脑,不过由于这些电脑都是“久经考验”的,所以时不时就会发生问题。而这个时候,不管是关机重启就能解决的问题,还是需要更换内存条、更换cpu之类的硬件问题,大家都会喊他来解决。
一开始的时候,他还会不适应,我一个写程序的,怎么让我来做这种事情呢。不过公司也没有太多需要编程的任务,所以他只能都接着,都去看看……
其实一个人毕业之后,多数都是难以从事自己之前所学专业的工作。甚至哪怕从事“相关”的工作,也可能与自己原先所学的不符。所以,是否能在先就业再择业之中做出一个好的决定,能够保持自己长期的发展潜力,而不被繁琐、机械的工作所限制,这是我们每个人都要思考的。
5. 有一个呆逼程序员男友是一种什么体验
如果说到程序员,我想大家脑子里一定会出现这样一个印象:不个边幅、不苟言笑、无趣、情商低等等等。事实真的是这样吗?
1:程序员一般都很上进,只要有空,就会钻研技术方面的知识、整理读书笔记。同时程序员经常加班,给旁边的人的感觉总是每天忙,可以当你有事要找他的时候,他一定会及时的出现在你的身边。
2:和人交谈你会发现,很难沟通,有事没事总叨叨技术上的专有名词,狠不得所有的事情都和他的专业拉上关系。
3:给大部分的感觉也都是情商低,智商高。如果要争执起问题来,你会发现压根就没有说话的余地。所以,更多的时候其实是他不愿意和其它人争。
4:对待任何人都显得非常有耐心,这可能和平常的工作有很多的关系。有时为了要解决一个错误,反反复复来来回回处理了多遍。也就自然的对待其它事情显得有耐心了起来。
5:电脑高手,接触久了你会发现,你电脑上的任何问题他几下都能搞清楚。有时候找一个app的功能半天不会操作,他一上手,几下就搞好了。需要找什么软件,需要在网上找任何问题,这些你放心的交给他就好了,保证高效的做到。
6:放心,程序员每天对着的就是电脑,平常的私生活顶多就是玩玩游戏而已。你不用担心他去外面和朋友喝酒或ktv什么的。
7:爱好电子方面的东西,这类东西都比较花钱,这点要把控好。
8:经济不会太拮据,程序员行业工资相对还是不错的。一家人过过平常的日子还是可以很好的满足的。
其实还有很多优点,还需要大家去发现。
6. 你的代码出bug了,程序员听到这个时的表现太真实了
这个大撒比写出这么个烂代码,幸亏有哥这样神一样的存在才发现,哥真是救世主。
这个程序运行很久了是不是真有bug啊,是不是你弄错了啊,可以重现么,什么?可以重现,有尼玛问题也不大,要不用户早投诉了,瞧你那惊慌失措的样子,真想吐你一脸狗屎。
这个bug隐藏的很深啊,还好哥犀利犀利,没有被领导发现,今晚加个菜。
这个程序刚上线还处于调试阶段,有bug很正常,谁的程序没bug,连操作系统都有bug。
哥就是犀利,自己开发自己测试,看测试那帮撒比什么也不会干,这么明显的bug都测不出来,真是一群废物。
1、“是删除它还是修改它呢?好纠结 !”
2、网上一定有解决办法。
3、是谁动了我的代码?
4、完全不知道这些代码是神马东东。
5、哦,为什么我都没写注释呢?
6、算了,废了他,我还是从头开始吧!
程序员自身可以在程序生成的每个阶段做这些工作: 仔细的设计、编写代码时、单元测试(重要)、功能测试。
7. 你见过哪些员工因为作死被开除的事情
1、阿里安全部员工狂拽黑客技术刷了公司66盒月饼
(2016年)
阿里内部在搞一个中秋枪月饼活动,某程序员想秒杀一盒月饼,无奈发现刚开始手动操作,一点开界面月饼就被抢光了。
他发现有人用程序刷月饼,于是他对同事说“我也得写个脚本,要不然就抢不到了”。于是他写了一段脚本,内容大概是:定时自动抢,如果按钮变成了秒杀就狂点(和12306抢票插件类似)。
然而,他以为阿里中秋抢月饼的页面和一般秒杀页面一样,抢到后即刻跳转到支付页面。当天16:00自动秒杀,结果一看傻眼了,发现秒杀页面可以一直抢、并且不跳转,一连抢到10几个都没有付款,便赶紧给行政打电话要退。
后来,16:30被约谈,17:30解约合同备好,18:00走人。
2、某哥们在知乎深度剖析暴雪面试全过程
(2015年)
杨笛笛拿到暴雪(上海)的offer,职位是数据分析师。他立刻在知乎来分析面试全过程,洋洋洒洒,图文并茂。
由于在知乎的更新得到了300多赞被顶到日报上,然后不幸被暴雪上海分部的工作人员看到,暴雪对这篇分享感到很不高兴,直接取消了offer。
事后他立即删除这篇回答,也发了邮件道歉,不过于事无补。
再后来,他又恢复了那篇知乎回答,已经累计得到26K点赞,还会实时更新自己的工作动态。(杨笛笛的知乎回答:如何得到暴雪娱乐公司的工作机会?)
3、Facebook员工带游客到公司蹭饭
(2015年)
Facebook的餐点出了名的好吃,而且面向员工免费。不仅如此,员工还可以带家人和朋友来这里免费用餐。
于是,Facebook一名员工(华裔)通过一个旅游中介网站找到想来Facebook体验高大上食堂的游客,以每人20美元的价格带游客进Facebook吃饭,并可以深度旅游拍照。
结果,他一天带了10个人去食堂吃饭,被发现后就开除了。
4.去年公司就有2名女员工在食堂吵架,并打起来了,公司老总劝架都被骂了,第二天,两个人直接被辞退了。
事件发生在一天中午吃饭的时候,我突然听到一顿吵杂的声音,发现两名女员工相互对骂,周围的员工都被这突然的吵架声吓住了!一片安静。只听到其中一个女的说另外一个女的是渣女,勾引男人,不要脸之类的话。另外一个女的话不多,直接揪着对方的头发,相互打了起来!这个时候公司的老总正好带着客户来到了食堂就餐,老总让她们先松手,有什么事先去保安室说明一下。
其中一个女突然说了一句:“上梁不正下梁歪,这个女的就是你们公司的好员工,勾引别人家的男人!”。老总面不改色地说:“有什么事也不要在公共场合吵闹打架。”。这个时候保安赶到了,把这两名女员工带走了。
后来听到流传的小道消息,这两个女的,都是为了一个男的,其中一个女的是前妻,另外一个是现任女友。三个人都在集团的不同分公司,前妻在一个分公司A,那个男的和另外一个女的在一个分公司B。发生冲突的当天,是这个男的前妻正好去分公司B开会,中午在食堂排队吃饭时,发现了这个女的,两个女的见面,格外眼红,直接就火气上来了!就发生了开头的一幕。
公司第二天就根据员工手册,将两位女员工都辞退了。在公司公共场合吵架以及打架,对公司的形象产生了非常不好的影响!甚至会让公司的合作方感觉到公司员工素质差,不值得合作。
这件事让这两名女员工即丢了人又丢了工作,没过一个月那个男的也离职了。
8. 为什么老板总想着程序员把软件开发成万能傻瓜式,以后没有技术人员也能做项目
一般我们中国把程序开发设计人员及程序维护测试人员都归为程序员;
可以,高数只是数学方面的知识,很多没有上大学的程序员开发程序做软件能力很强,高数和软件开发维护没有必然的联系,当然你连一些基本常用的数学知识也没有就不行啦。
程序员的要求如下:
1:团队精神和协作能力
2:文档习惯
3:规范化的代码编写习惯
4:需求理解能力
5:模块化思维能力
6:测试习惯
7:学习和总结的能力
我就是要问你 工作内容怎么不一样了
答:
首先软件工程师与程序员工作上最大的不同,可以打一个比喻:把一款软件比做一座大桥,那么软件工程师相当于施工总指挥,而一般的开发人员也就是程序员相当于建筑工人!
所以很多人就说自己是IT民工就是这么来的;
软件工程师的工作不同于程序员但是一个软件工程师必定是一个优秀的程序员!
为什么工程师要懂?
答:
前面也已经说了,高数和软件开发没有必然的关系,工程师也不一定要懂高数;要讲一点高数是可以提升你的逻辑思维,但是软件开发技术范围很广,这之间没有必然的关联,学了高数软件开发就很厉害或者不学高数软件开发就不行都是伪命题。
软件的开发工具、开发技术在不断地发展。在校学生所能学到的东西很难跟得上发展的需要但是也不能说那些东西完全没有用,只有在完全理解了相应的基本技能之后你才能很轻松地掌握新的技能,软件技术都是一个循序渐进的过程。所以高数只是你在大学里面学习的东西,是很重要的但不是必要的;
软件工程师要理解和领会软件工程,软件工程只是一个理论一个指导思想,搞软件开发的都必须了解这些基本理论并在平时的工作中认真地去贯彻执行,做软件工程师更是如此。
写思路用懂的高数吗?
答:
同上,写思路的关键是要懂软件技术,具体的实现不需过多的考虑,当然有时候设计的时候动数学建模也有帮助,不过不是必需的。
加一句,大学里学的知识上了社会很多都没有什么用处,社会是最好的大学,当然学好高数对开发什么的也有帮助,但是关键是你要一直不断地提升自己,高数再好软件技术不好你也成为不了IT精英,成为高手没有捷径,不可能速成!天道酬勤,作为学生你应该知道眼前需要做什么。那就是打基础,多动手做程序,首先争取成为一个优秀的程序员,技术达到一定高度再转软件管理方面的工作,比如:软件工程师,项目经理,IT主管,IT经理,企业CIO。