精华内容
下载资源
问答
  • 浦发银行 信息科技岗 大数据方向 面经

    万次阅读 多人点赞 2018-08-09 23:00:31
    (我回答研一主要是上课和看论文)接着问我上什么课(我回答了模式识别,最优化方法,矩阵理论等)⑤接下来面试官就总结了一下,大概意思就是:我的专业不对口,虽然我说了我这些东西也做了不少实际的项目和事情,但...

    浦发银行总行信息科技部(大数据方向)面试

    0绪论

    0.1 面试

    2018.8.6日面试了浦发银行信息科技岗,想写一个面经,发现大家都说的差不多了(面试流程较为固定),所以总结一下大家的面经(主要来自牛客网: https://www.nowcoder.com/search?type=post&query=%E6%B5%A6%E5%8F%91 ),为后来人提供个参考(明年应该变化不大)。

    面试主要分为三个部分:

    1. 即兴演讲(结构化面试 3面试官对6个学生)、
    2. 上机测试、
    3. 专业面试(3对1)。

    这三个顺序不固定,哪里面试官有空位 工作人员就先安排大家面哪一个部分。

    大家应该重点参考一下“结构化面试”的题目,提前排练一下,提前想一下“如果是我来回答这个问题,我该怎么答?” “别人把我想说的都说过了,怎么办?”,提前准备一下“固定套路、万能句式”,毕竟做编程的同学在这方面都不是特别强。(包括我 (┬_┬)

    0.2 招聘时间流程 参考

    • 2019届应届生参加 上海总部信息科技提前批,2018年8月6日面试,
    • 10月16日体检通知,
    • 11月21日背调邮件,
    • 11月30日给的offer邮件.

    浦发比较传统且谨慎,因此求职总流程比较慢,铁心去浦发的童鞋一定注意保留自己的三方,不要提前签了别家; 其他童鞋可以安心去其他公司继续面试, (后来发体检通知的时候, 我都快忘记自己面过浦发)

    1 大家的面经

    1.1 浦发银行总行(上海)大数据岗8月6号面经

    https://www.nowcoder.com/discuss/91911

    我是8月6号12:30的场次,面试的是大数据岗。面试一共三部分:综合面,技术面,机试,不分先后顺序,在2楼大厅等着工作人员叫名字,叫到哪里就去哪里参加面试。

    一、综合面

    综合面也就是群面,六个人一组,一共三个面试官。每个人进去抽题,每组有两道题目,抽到以后两分钟时间阅读材料,阅读完以后每个人三分钟时间阐述自己的观点。我当时抽到的题目是“长租公寓行业是否值得投资”,当时组里还有一道题目是关于“高考选择志愿”

    的问题,因为不是我所抽到的题目,所以没有额外留意。每个人三分钟演讲结束后,面试官会单独问问题,有的面试小组是每个人都被问到了,但我在的小组里我和另外一个男生没有被单独问问题,有可能是我三分钟演讲表现不好或者其他原因。后来面试官最后提了一道抢答题,当时考虑到自己没有被单独问问题,所以就抓紧抢了抢答题,但抢答嘛,没有时间考虑答案,所以回答也不是很好,群面就这样结束了。

    二、机试

    在大厅等候的时候工作人员会给你讲哪些岗位是必须要参加机试的,哪些岗位是不必须参加的但若你选择参加会给加分,所以基本上所有的人都会选择机试。机试题目都很简单一共三道题目:①输入一个数字要求输出该数字各个位上偶数的和,如输入5584,输出12。②输入一组数N和数字b ,求出该组数字中能被b 整除的个数。如输入1 2 3 4 5 6和 2,结果输出为3。③求N阶楼梯共有多少种上楼方式,每次只能上1个或2个台阶。编译环境只有java和c和c++,其他语言写的没办法现场编译,但工作人员说仍然提交,他们后再后台看你写的程序。我是用python写的。

    三、专业面试

    专业面试是让我觉得最无法描述的面试,仍然是工作人员喊到你的名字后去面试的地方等,三个面试官。当时我等的时候我前面有四个人,一个哈工大研究生,一个西安交大研究生,一个武汉大学的,还有一个美国回来的硕士生。工作人员说每个人面试时间10到15分钟,但我前面的几个都基本上15分钟,有的还有20分钟的。当时我在等的时候,他们每出来一个也和交流了一下面试官问了哪些问题,他们说自我介绍,针对自我介绍问了一些项目和算法问题。所以我自认为准备还是不错的。

    等我进去以后,面试官同样让我先自我介绍,我当时介绍了一下我是哪个大学什么专业的硕士,然后介绍了一下我会哪些机器学习算法,python编程,hive环境下sql 脚本开发,讲了一个我用逻辑回归和随机森林做的一个项目,最后讲了一下我上一份互联网公司的实习做的东西,在公司主要负责的事情。

    我觉得我的自我介绍还可以,只要想问应该能挖出来很多技术问题可以问。但面试官没有问我一个技术问题,从头到尾也只有一个面试官在问我,我自我介绍结束以后的问题:①我本科哪个学校的,学的什么专业(我本科普通一本非211),②说我硕士专业是控制,和大数据不对口。我解释了一下,虽然我是控制专业,但我导师是机器学习方向的,所以我做的也都是机器学习方向的东西。③问我不是计算机专业的,是不是对计算机编程的东西都不是很懂?(我当时也是一脸懵逼)我解释了一下说我可能做开发比不过计算机的学生,但我基本的东西都会,包括数据结构,操作系统的话Linux 基本指令都会,只不过编程语言是python不是java或者C++。④问我研一都在干什么?(我回答研一主要是上课和看论文)接着问我上什么课(我回答了模式识别,最优化方法,矩阵理论等)⑤接下来面试官就总结了一下,大概意思就是:我的专业不对口,虽然我说了我这些东西也做了不少实际的项目和事情,但给他们的感觉就是我学的很杂,乱七八糟的,让他们无从下手问我问题,感觉我不太符合大数据岗,还有一个就是他们觉得我会的这些东西都是我自学的,因为我的专业不对口(我也是一脸懵,即使计算机的学生,很多东西也不是老师上课教的呀,都是自己自学)

    总之,技术面就这样结束了,我具体多长时间没看表,但大概七八分钟吧,绝对不到十分钟。回来以后我也在反思技术面哪里出了问题。各种原因吧,肯定有我自身的原因。也有可能我前面都是双985都是很优秀的人,到我这面试官压根不想面我吧,不想深入交流。也有可能面试官对我学历和专业不满意(本科普通一本,硕士上海这边的211)

    总之,感觉找工作很随缘吧,我还幻想如果分到别的技术面小组说不定面试官会问我几个技术问题呢,现在也看开了,反正就水了水浦发,炮灰一把呗。

    1.2 浦发面经

    作者:白夏是小白
    链接:https://www.nowcoder.com/discuss/91866
    来源:牛客网

    我投的是总行信息科技部,面试主要分为三个部分:即兴演讲、上机测试、结构化面试。在武汉面试的,从上午十二点左右到武汉分行,到了下午六点多才走,等待面试等得心急如焚。HR小姐姐们十分贴心了,给又饿又焦急的我们买了面包牛奶,笔芯:)

    即兴演讲

    即兴演讲六个人一组,每个人都有一个序号,然后面试的时候一共有三个面试官。进去之后每个人抽一个题目,两分钟看题三分钟回答。这个回答次序是自定的,虽然说第一个举手回答有一定好处,但是一定要思路想清楚描述想清楚了再回答啊QAQ,大概主要是考察表达能力吧,我抢第一个结果回答得巨烂ORZ
    我的题目是说学校决定把什么校车超市之类的地方交由学生管辖,有人认为这会让学生重商轻学,然后问你的看法。
    六个人都回答完之后面试官会提一个问题让六个人回答,我们的问题是“大学里得分最高的一门课是什么?为什么能拿这么高的分?”,然后再抽几个人问了问题,面试官特地问了我一个“你是本科生?”的问题,觉得本科生仿佛受到歧视。

    上机测试

    上机测试是三道巨简单的题目,大概每一个几行代码吧。
    我的三个题目是:
    字符串反转
    数列求和
    字符串缩写
    (悄咪咪说一句,还可以看到大家的做题状态和排名,而且好像是手改,不是很懂)

    结构化面试

    结构化面试就是正常的面试,大概一个人十分钟左右的样子,人多,面试官少,等得生无可恋。三个面试官对一个人,一个主面试官问一些基础问题,然后旁边两个面试官有针对性的问问题,应该一个是问语言,一个是问数据库。
    一开始先自我介绍,然后开始问专业问题,好像面试官手上有一个记录,问一个问题,你说会他做一个记号,说不会或者停顿沉默一会儿就会划掉下一个问题(时间很紧不能迟疑吖)。
    结构化面试大概是整个面试流程中最体现专业的地方了吧可是我并没有感觉到很专业。我在网申的时候在简历上写了一句觉得银行的工作压力比互联网公司小,然后面试的时候特地问了我一句,“你确定吗”,搞得我很虚,我说我接受不了长期熬夜,总觉得会因为这个被毙掉ORZ

    总结
    整个过程下来,我觉得面试银行本科生毫无竞争力,一片全是研究生大佬;而且银行的面试让人捉摸不定,不知道他们到底想要什么样的人,可能比较需要全方面发展,可是技术的话就比较一言难尽。但是整个过程下来就没什么压力,人比较放松,虽然之后越想越凉凉吧emm
    据说浦发结果短则一个月多则两三个月才出来QAQ可能是并不想招人!

    1.3 浦发银行大数据创新岗上海打卡

    作者:明媚_
    链接:https://www.nowcoder.com/discuss/91675
    来源:牛客网

    面试分为三部分

    第一部分 综合面试

    6-7个人抽材料,阅读两分钟,表述三分钟,目前了解到的题:央行发布撤销某些地区的地铁修建资格,问认为这些地区是否该修建/积极废人/阅读习惯/中国是圆珠笔产量大国,核心技术掌握在别的国家/人工智能对银行的影响/无纸化阅读

    第二部分 专业面试

    首先进行自我介绍,根据自我介绍进行提问,确实重视项目,项目问了很久,别的没怎么问,感觉面试官并不专业。除项目问题,问了为什么这么多银行选择来浦发/你的职业规划/最近浦发上一款新产品你知道吗/对互联网有热情吗

    第三部分 上机考试(只有开发和测试岗需要,别的岗可选)

    我做的是以下三道题(开发语言不限)
    1 N的阶乘
    2 输入十个数,最大数和最后一个数交换,最小树和第一个数交换
    3 猴子吃桃子(经典问题,自行百度)

    求好运,攒人品啦?

    1.4 浦发总行信息岗校招面经(上海)

    作者:疯狂求offer
    链接:https://www.nowcoder.com/discuss/91174
    来源:牛客网

    之前也看了不少牛客上的笔经面经,感觉收获很多,昨天(8.5)面了浦发,趁着还有印象写个面筋回馈牛客,顺便攒攒秋招RP~

    我面的系统开发岗,面试时间是8.5中午12:30,当时提前一个多小时坐地铁过去的。结果从12号线虹梅路下来后导航导偏了,绕着附近的科技园转了一圈,经过好心的保安大叔指点后才知道莲花路1688号在哪儿_(:з」∠)_。浦发漕河泾这边的信息园区不是很大,走进楼里感觉环境挺好的,干净整洁,走廊里铺有地毯很舒服。本来以为会迟到,结果到签到处的时候发现前面好多人……排队都要绕着弯儿,目测下午场有接近100个人。由于是中午,当时我还听见HR小姐姐对上午场的同学们说如果没有面试完可以领饭票去一楼食堂免费吃饭,顿时就还挺有好感的,毕竟能为面试者们着想。在签到处会扫描身份证,拿一张打印有自己名字的纸(当作铭牌用)和一张小纸条。小纸条上写的是面试的三个环节:综合面试、专业面试和上机考试,然后就坐在等候区等待HR小姐姐叫号了。等待过程略去不表。

    专业面

    我首先抽到的是专业面试,大概进行了二十多分钟。有三位面试官,有两个感觉像是管理层,大概五十多岁,还有一个大概三十多岁。首先是自我介绍,表明了一下为什么想去浦发。首先是较年轻的面试官提问,开始问了项目,由于项目是做并行计算的,就让我讲讲设计和实现细节。然后问了数据库,增查删改等SQL命令,还问用过哪些数据库(项目中的),其实我做的项目没用数据库_(:з」∠),就略尴尬,但也如实回答了,为了挽回点气氛我就说了数据库事务的四大特性(ACID)和例子,然后他就接着问原子性的实际应用场景,我再举了个例子但是感觉好像那个面试官不太满意。接着问有没有做过socket之类的网络编程,我说没有……由于项目是在Linux集群下实现的,好像他们不太懂,就解释了一番,感觉他们好像还是没懂(:з」∠),然后就问了Linux下的常用命令。由于我不是计算机专业的,就问我有没有上过数据结构与算法的课,然后问了常用的排序算法以及口述快排的实现思路。接着其中一个面试官就问我本科研究生阶段都上过什么课程,然后问原专业做的挺好的为什么想转行来银行,我就商业互吹了一波。坐中间的那个大佬突然冷不丁说,你导师知道你转行来银行面试吗,导师同意吗。我懵逼了1s后就说导师很好不会限制学生云云,大佬也没继续问。面试官们貌似对做的项目挺感兴趣,又让我讲并行是怎么实现的,有啥优化的地方。最后大佬说有啥想问的,我突然犯二就问您在浦发一天的工作是怎么样的,这时候轮到大佬一愣(:з」∠)……估计他心想这小伙子胆儿够肥啊。然后面试官们就说了一通,听下来了解到他们都是管理层的,大佬惹不起惹不起(:з」∠)_。然后又问我还有啥问题,我说没有了,于是专业面结束。出来的时候看了看表,有二十多分钟,听候场区的几个人说他们都很快就十多分钟,我估计是因为自己非科班的缘故,被抓着一通提问。

    结构化面试

    接着又是漫长的等待,这次我抽到了综合面试(群面)。技术岗还有群面我也是有点懵的,心想待会儿说的时候有条理一些就行。群面形式就是每个人2分钟阅读一份材料,然后3分钟阐述观点。我抽到的是网络成瘾这块儿。思路还是不错的,有条理分点阐述了,但是我以为时间很紧就语速很快地说了,不知道面试官听明白了没有,事后感觉这块儿太可惜了语速应该平稳一点,因为我后面的小伙伴们都是慢悠悠地说完的,面试官也没把他们怎么着_(:з」∠)_。接着就是提问环节,没啥好说的。但是其中一个面试官就点出为啥不穿正装,我就很尴尬(之前是谁说银行技术岗不穿正装也OK的啊喂)……后来解释说得体的衣服就行了,也没说啥。大概三十分钟左右群面就结束了,又回到排队叫号环节。

    上机考试

    上机考试的地方大概有三四十台机子,很多人在做题,做完签字就可以走。不得不吐槽一下那个OJ系统和本地IDE是真的难用,一开始很不顺手。OJ上支持的语言有Java、C、C++,没有的可以用伪代码,后面会人工判题给分。题目很简单有三道题,分段函数实现、两个字符串查重、凯撒密码,分值分别是40,40,20。有一题我在本地调试成功但是在OJ上死活都编译不通过,很迷,但我也索性提交了,一切随缘。这个OJ系统还有调试10s内不能提交这种莫名其妙的设定,搞得现场很多人出错。据说除了大数据岗位其他都需要上机考试,但是我感觉几乎所有都去上机了。上机结束后我就坐地铁回学校了,这一天不知道怎么的肚子很不舒服,体验了好几次浦发的洗手间(还挺干净的,一点异味都没有)(:з」∠)

    整个流程很长,我从12:30一直到17:30左右才结束。总结下来感觉银行类的面试很注重数据库及相关实现,如果有相关经历是最好不过了。

    1.5 【浦发银行】信息科技岗(大数据创新岗)8.6日上海总行面经

    作者:爱吃水果的鱼
    链接:https://www.nowcoder.com/discuss/91147
    来源:牛客网

    楼主是中午12:30场次的,因为从上海其他地方坐地铁到漕河泾开发区地铁站,没有吃中午饭,问了下门卫,说可以在食堂吃,25块钱,可支付宝,酸奶水果饮料3选2,菜任意吃。
    具体请见图片,菜色一般般吧,还稍稍有点贵,不过我觉得他们银行工作人员是有饭补的,哈哈哈
    具体流程如下,面试等候区在2楼,电梯出来右手边可以看到指示牌,往厕所那个方向走,就能看到一堆人,先排队,打印自己的名牌,然后等。等着被叫去上机考试(c/c++,JAVA可以测试运行,提交的步骤为提交—>可以本地复制代码---->最下方测试运行----->提交,可以看到自己的代码是否正确),综合面试,专业面试,三者顺序不一定按照所说顺序,哪里有空就把你安排到哪里。
    面试时间大部分都在等候,做完机试在等候区等候,专业面试完去等候区等候,综合面试完就可以走了,很奇怪的是我的专业面试只有5分钟左右,可能说自己不了解数据库,和面试岗位不太匹配吧,23333,具体面经看下图!

    这里写图片描述

    1.6 热乎乎的浦发总行8月6日面筋!

    作者:上海伊泽瑞尔
    链接:https://www.nowcoder.com/discuss/91095
    来源:牛客网

    本人秋招第一次大型面试,打卡攒人品。

    浦发银行总行信息科技部(需求设计方向)面试
    时间:8月6日12:30-16:00

    面试在总行,离学校比较远,所以我提前两小时出发,到的时候前台小姐姐给了我一张餐券,幸福!!食堂伙食还不错!
    候场的candidate黑压压的一片,我问了下工作人员,说这三天在上海面试的总行信科的就有700多人,可见竞争多激烈(大家都开玩笑地说难道笔试不刷人?)
    到点后有工作人员来讲规则,面试分为三部分:综合面试、专业面试和机考,点到后就跟着分别去面试就好。三部分一天结束,预计结果要等一到两个月。(不太理解为什么等这么久)

    一、专业面试(其实更像挖简历的行为面?)

    我先被点到参加专业面试,据说在15mins左右,可是在我前面两位小姐姐都在20mins以上。进去后发现有三位面试官,两男一女,看起来很有资历了前面有一个位子面试者坐,隔得比较远。问好后首先就是万年不变的自我介绍,以及对本人来说,万年不变的“专业不对口”问题。接着对我的实习经历进行了深挖。包括怎么写报告的?报告有哪些亮点?等等。
    三位都有问,且侧重点不同。中间一位侧重需求设计,问我对需求设计有什么理解?我利用了产品经理的相关知识,先说产品的生命周期第一步就是需求设计,并列举了需求设计的三个过程,以及其中的具体方法。面试官指出银行的产品有所不同,需求之后直接输出需求文档及原型转给开发人员,而不像互联网一样先给用户定位和画像。紧接着问如果开发技术不同意我的需求设计怎么办(举了一个最近的例子,一个PM和程序员因为一个需求打起来了)?我答先从自身找问题,再诚心与技术人员沟通。这里强调了产品(需求)人员懂点技术的重要性(“嗯嗯,您说的很有道理”)。后来又问了为什么不继续在券商实习?如果给你offer,同时又有券商基金的offer,该怎么选择?我举了一个例子,如果我是踢球的,皇马巴萨两家俱乐部都想签我,我会考虑自身的特点以及他给的位置和战术安排。最后强调相比之下,总行的信息科技岗对我的吸引力还是很大的!估计他也是球迷吧,听了我这个回答会心一笑。
    右边的女面试官详细问了我公众号的运营经历以及写研究报告的过程。
    左边的面试官很关心我的计算机水平,我自然是要摆低姿态,毕竟小白一个,只自学了一点python而已。后来他问我对计算机本身的了解?有没有拆过计算机?我只好说不好意思了(只有一次因为风扇太吵,拆过一次清灰)。又问我平时关注互联网新闻吗?这个我给了肯定的回答。后面又问我区块链,我只懂一个大概,并说最大特点是去中心化记账。他的这一系列问题我没回答好,也看出了他的失望。还是平时积累不够!!这一块要加强!!

    二、综合面

    六人一组进到一个小房间。六对三面试。每人抽一个话题表达自己的看法。我抽到“如何看待选秀(例如创造101)对青少年的影响?利大于弊抑或弊大于利”。我从三个方面,理性、感性角度及节目本身的特点进行了阐述,结论利大于弊。六个人有三位抽到了这个话题,都支持利大于弊。另三位抽到的是“如何看待高铁吸烟的问题”。个人认为这个不太好说。
    随后面试官问了三位:介绍一下你写的一篇论文;另外三位(包括我):你认为你的优势是什么。一位面试官突然Q我(大概我是这场唯一的男生??),有软件开发经验吗,我表示遗憾,外加生无可恋。。。

    三、机考(编程)

    前一天才知道要机考,只好临时抱了个佛脚,把自学的内容胡乱看了一遍。据说编程题比较简单,例如字符串逆转,大小写,数列求和等等。结果今天说需求设计方向不需要机考!瞬间长舒一口气哈哈哈哈。

    最后赞一下耐心负责的现场面试官和工作人员,以及食堂!
    欢迎小伙伴交流!

    1.7 秋招面经(持续更新,攒RP 银联系统开发)

    作者:ㄣArviiinズ
    链接:https://www.nowcoder.com/discuss/90894
    来源:牛客网

    1.浦发银行总行信息科技部面试(2018.8.5 12.30场)

    综合面:

    三个面试官,6个人,每人给一份材料,一支笔,2分钟阅读材料,3分钟演讲,我的是怎么看待格力董明珠要不要做芯片 我没抽到的另一个是:你怎么看网络综艺和电视台综艺.

    结束后会有提问,有的问自我介绍,有的问自己的优点等,但是我很奇葩的被问了看了什么论文。

    技术面:

    三个面试官对着你一个人,开始就是自我介绍,对着你介绍的问,所以说的时候不要给自己挖坑,技术点细节不怎么问,另外不要把问题想复杂,我有的问题说的太细了,面试官就说可以了,下一个问题。

    机试:

    三道题,第一题:分段函数。第二题:A,B两个字符串,求在第一个字符串出现,第二个字符串中未出现的,重复只取第一次出现,输出字符串。第三题加密解密,就是给你由大写字母组成的字符串,求出原来的字符串,加密 。方式很简单就是字符串后移五位,比如原来是A加密后是F,其余数字等标点符号原样输出.

    总结:时间持续的蛮久的,都是在等的状态,我四点多结束的.

    2.浦发银行总行信息科技部面试(2018.8.9 9.30场)
    到了以后交材料,然后填一个很详细的表,4页.太可怕了.
    群面:2个面试官12个人无领导小组讨论,每人给一份材料,一支铅笔,一张白纸5分钟阅读材料,1分钟自我介绍并回答材料问题,关于金融风险的排序问题.接下来20分钟的自由讨论和3分钟的陈述总结.刷的人不多,面试官也不看我们.

    技术面: 2个面试官对你一个人,开始就是上交简历自我介绍。然后对着简历问问题.我问到了hashMap,反射实现的机制.高并发,还有一些关于自己项目和实习经历的.人还是很nice的,聊的还不错.

    总结:,效率和时间安排还可以,我快12.30结束的.

    1.8 上海浦发面经(秋招面经持续更新,攒人品)

    作者:我只是弱鸡
    链接:https://www.nowcoder.com/discuss/90871
    来源:牛客网

    8.4日,大数据方向,共两面,加上机

    综合面:6个人,每人给一份材料,2分钟阅读材料,3分钟演讲,我的是怎么看待,app,纸质阅读,等多样化阅读,并保持阅读高效性

    另外一个材料:中国生产圆珠笔里的主要材料都是进口的,但却是圆珠笔产量第一的国家,你怎么看?

    结束后会有提问,自我介绍,关于材料哪位同学讲的好之类。

    技术面:自我介绍,会问项目的内容,你对投递岗位的理解,你做的项目如果用到银行会有什么应用,技术点不怎么问。

    上机:可选项,可做可不做(开发方向上机必须,题都基础)。三道题,第一题,从求组中找出唯一出现一次得数。第二题,给年月日,判断是方面第几天。第三题,小球从100米下落,每次回弹一半距离,第几次落地后的总距离。

    1.9 浦发银行现场面(武汉地区)

    作者:珞珈山落草为寇
    链接:https://www.nowcoder.com/discuss/90567
    来源:牛客网

    七月三十一号浦发现场面试,记录下,回馈牛友.
    面试三项流程:结构化面试+即兴演讲+机试
    结构化面试分为两组:每组三个面试官,主要就是对着简历问.
    面试官会让你自我介绍,我介绍的很简短,简历上已有的内容就没介绍,结果面试官让我自己把自己的项目也介绍下(面试官太懒,想听你说)
    有个面试官看见我写的Java项目,就问了几个Java的水题,比如接口和类的区别,常用集合类等.
    然后就出去等候下一轮召唤.
    接下来就是机试,机试很水,三道题,每题代码量不超过十行(可以用Eclipse/Notepa++)
    字符串逆序输出,数列和,小写转大写
    好像用的是华科的OJ评测系统.
    最后一轮是即兴演讲面.6个人一组,抽题目,两分钟读题,三分钟陈述观点.
    总结:面试很耗时,效率很低.中午12.30开始,一直拖动下午五点多才结束.
    面试结果未知,群里说有等一个月或者几个月的.

    1.10 浦发银行(西安分行)信息科技岗面经

    作者:neu张康
    链接:https://www.nowcoder.com/discuss/89581
    来源:牛客网

    先说一下,我投的是(系统开发方向)
    一面:群面,6人一组,每人抽一题,看2分钟然后进行个人演讲。6个人都完事后面试官会问你,你觉得本次演讲谁最突出,推荐2人。
    二面:技术面,三位面试官,问得问题范围比较大,细节问得不多。首先是自我介绍,因为我写的项目中涉及到高并发,然后问从代码的角度如何优化(回答的好像不满意)。其次又问了java的开源框架都熟悉哪些,我说了spring,然后就问了IOC和AOP。然后又问熟悉tomcat吗,配置连接池的时候如何配置最大连接数。然后又问了问研究生期间做的什么,然后就没有然后了。java虚拟机,集合,线程什么的一点没问。
    三面:机考,三个编程题。
    第一题:把字符串中的字符a和A换成c输出。
    第二题:给你年月日,求出是这年的第几天
    第三题:给你两个数,例如23和456,23456=24 25 26 34 35 3*6,让你实现这个算法。

    展开全文
  • CentOS7 之系统优化方案

    千次阅读 2019-04-12 12:38:36
    CentOS7 之系统优化方案[^1] 优化条目: 修改ip地址、网关、主机名、DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精简开机自启动服务 定时...

    优化条目:

    • 修改ip地址、网关、主机名、DNS等
    • 关闭selinux,清空iptables
    • 添加普通用户并进行sudo授权管理
    • 更新yum源及必要软件安装
    • 定时自动更新服务器时间
    • 精简开机自启动服务
    • 定时自动清理/var/spool/clientmqueue/目录垃圾文件,放置inode节点被占满
    • 变更默认的ssh服务端口,禁止root用户远程连接
    • 锁定关键文件系统
    • 调整文件描述符大小
    • 调整字符集,使其支持中文
    • 去除系统及内核版本登录前的屏幕显示
    • 禁止ping
    • 历史记录
    • 内核参数优化
    • 升级具有典型漏洞的软件版本

    1、修改ip地址、网关、主机名、DNS等

    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0         #网卡名字
    BOOTPROTO=static    #静态IP地址获取状态 如:DHCP表示自动获取IP地址
    IPADDR=192.168.1.113            #IP地址
    NETMASK=255.255.255.0           #子网掩码
    ONBOOT=yes#引导时是否激活
    GATEWAY=192.168.1.1
    [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    BOOTPROTO=static
    IPADDR=192.168.1.113
    NETMASK=255.255.255.0
    ONBOOT=yes
    GATEWAY=192.168.1.1
    [root@localhost ~]# vi /etc/sysconfig/network
    HOSTNAME=c64     #修改主机名,重启生效
    GATEWAY=192.168.1.1    #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。
    [root@localhost ~]# cat /etc/sysconfig/network
    HOSTNAME=c64
    GATEWAY=192.168.1.1
    我们也可以用  hostnamec64  来临时修改主机名,重新登录生效
    修改DNS
    [root@localhost ~]# vi /etc/resolv.conf   #修改DNS信息
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    [root@localhost ~]# cat /etc/resolv.conf  #查看修改后的DNS信息
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    [root@localhost ~]# service network restart   #重启网卡,生效
    #重启网卡,也可以用下面的命令
    [root@localhost ~]# /etc/init.d/network restart
    

    2、关闭selinux,清空iptables

    #关闭selinux防火墙
    #默认云服务器都是关着的
    cat /etc/selinux/config 
    setenforce 0 #设置不启动
    getenforce   #查看
    #清空iptables
    iptables –F
    
    iptables –L     #查看防火墙规则
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    #/etc/init.d/iptables save   #保存防火墙配置信息
    

    针对centos7防火墙配置

    修改防火墙
    CentOS切换为iptables防火墙

    firewall-cmd --state #查看防火墙状态
    

    切换到iptables首先应该关掉默认的firewalld,然后安装iptables服务。
    1、关闭firewall:

    systemctl stop firewalld.service 
    systemctl disable firewalld.service #禁止firewall开机启动
    

    2、安装iptables防火墙

    yum install iptables-services #安装
    service iptables save #保存
    

    3、编辑iptables防火墙配置

    vi /etc/sysconfig/iptables #编辑防火墙配置文件
    

    下边是一个完整的配置文件:
    在你运行完save中间插入下面的规则

    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    :wq! #保存退出
    
    systemctl start iptables.service  #开启
    systemctl enable iptables.service #设置防火墙开机启动
    

    附赠防火墙脚本,前提你已经切换至iptables

    #!/bin/bash
    
    IPT=`which iptables`
    $IPT -F
    $IPT -X
    $IPT -P INPUT DROP
    $IPT -P FORWARD ACCEPT 
    $IPT -P OUTPUT ACCEPT
    $IPT -N syn-flood
    ##本地回环 内网允许任何
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A INPUT -m state --state NEW -s 10.0.0.0/8 -j ACCEPT
    # ssh 端口开放 任何IP
    $IPT -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
    # 根据需求填写相应的端口
    $IPT -A INPUT -p tcp -m multiport --dports 80,8087,89 -j ACCEPT
    # zabbix监控地址
    $IPT -A INPUT -p tcp -s zabbix.ip -m state --state NEW -m tcp --dport 10050 -j ACCEPT
    # ICMP 规则控制
    $IPT -A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
    $IPT -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
    # DOS防护
    $IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
    $IPT -A INPUT -j REJECT --reject-with icmp-host-prohibited
    $IPT -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
    $IPT -A syn-flood -j REJECT --reject-with icmp-port-unreachable
    

    3、添加普通用户并运行sudo授权管理

    可参考https://www.cnblogs.com/jokerbj/p/9117384.html

    4、更新yum源及必要软件安装

    yum源文件
    yum update   更新源文件
    yum clean all  清除缓存
    yum makecache  建立yum缓存
    

    CentOS-Base.repo 网络源文件
    推荐使用阿里云 ,如果发生问题很可能是域名解析问题

    vim /etc/resolv.conf
    nameserver 8.8.8.8
    #阿里
    nameserver 100.100.2.138
    nameserver 100.100.2.136
    options timeout:2 attempts:3 rotate single-request-reopen
    

    接下来就要安装几个必要的软件了

    yum install lrzsz ntpdate sysstat net-tools -y
    

    lrzsz 是上传下载的软件
    sysstat 是用来检测系统性能及效率的工具
    net-tools 没有ifconfig命令时候需要安装工具

    5、定时自动更新服务器时间

    默认云服务器有同步的时间服务器
    修改时间 date
    硬件时间 hwclock --show
    同步公有时间服务器,可搭配任务计划,阿里云的时间服务器 ntp.aliyun.com

    yum -y install ntp
    ntpdate asia.pool.ntp.org
    time.nist.gov
    time.nuri.net
    ntpdate asia.pool.ntp.org 或者 ntp.aliyun.com
    

    注意;如果出现ntpdate[24325]: the NTP socket is in use, exiting,需要systemctl stop ntpd.service停止,然后同步,之后再启动,阿里云服务器默认同步阿里云时间服务器

    时间设置

    • 输出当前时间
    date +"%Y-%m-%d %H:%M:%S"      # 2018-06-08 14:05:08
    
    • 输出指定时间
      -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
    date -d "1 day ago" +"%Y-%m-%d"   2018-06-07  ago是昨天
    date -d "1 day" +"%Y-%m-%d"       2018-06-09  不加参数是明天
    
    • 以下使用数字表示前后多少天的加减
    date +%Y%m%d #显示前天年月日 
    date -d "+1 day" +%F   #显示前一天的日期  %F就是%Y-%m-%d
    date -d "-1 day" +%F   #显示后一天的日期   
    date -d "-1 month" +F  #显示上一月的日期 
    date -d "+1 month" +F  #显示下一月的日期 
    date -d "-1 year" +F   #显示前一年的日期 
    date -d "+1 year" +F   #显示下一年的日期
    

    设置时间

    -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; 
    date -s 01:01:01 #设置具体时间,不会对日期做更改 
    date -s "01:01:01 2012-05-23" #这样可以设置全部时间 
    date -s "01:01:01 20120523"   #这样可以设置全部时间 
    date -s "2012-05-23 01:01:01" #这样可以设置全部时间 
    date -s "20120523 01:01:01"   #这样可以设置全部时间
    
    附赠当前任务的执行时间脚本
    #!/bin/bash 
    start=$(date +%s)   # 1528437613
    nmap man.linuxde.net &> /dev/null 
    end=$(date +%s) 
    difference=$(( end - start )) 
    echo $difference seconds.
    

    时区设置

    修改时区

    #1. 使用tzselect设置时区
    tzselect
    #2. 复制相应的时区文件,替换系统默认时区
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    #3. 将当前时间写入BIOS永久生效(避免重启后失效)
    hwclock
    #centos 位于 /etc/sysconfig/clock
    #ubuntu 位于 /etc/timezone
    

    任务计划使用

    cat /var/spool/cron/root 可直接修改配置文件,注意重启/reload
    crontab -e
    crontab -l -u root #查看root用户
    基本格式 :
    *  *  *  *  *  command
    分 时 日 月 周 命令
    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令
    每月1、10、22日的4 : 45重启apache
    45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
    每天18 : 00至23 : 00之间每隔30分钟重启apache
    0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
    每月的4号与每周一到周三的11点重启apache
    0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
    晚上11点到早上7点之间,每隔一小时重启apache
    * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
    

    6、精简开机自启动服务
    systemctl 是管制服务的主要工具,它整合了chkconfig 与 service功能于一体。

    systemctl is-enabled iptables.service   #查询防火墙是否开机启动
    systemctl restart sshd #有可能不需要加service
    systemctl is-enabled servicename.service #查询服务是否开机启动
    systemctl enable *.service #开机运行服务
    systemctl disable *.service #取消开机运行
    systemctl start *.service #启动服务
    systemctl stop *.service #停止服务
    systemctl restart *.service #重启服务
    systemctl reload *.service #重新加载服务配置文件
    systemctl status *.service #查询服务运行状态
    systemctl --failed #显示启动失败的服务
    

    7、定时自动清理 cat /var/spool/postfix/maildrop/目录垃圾文件,放置inode节点被占满

    centos7默认安装了postfix邮件服务,因此邮件位置 /var/spool/postfix/maildrop/会存在垃圾文件,如果长时间不清理,会导致inode数量不够用,从而无法存放文件

    mkdir /server/scripts -p
    vi /server/scripts/spool_clean.sh
    #!/bin/sh
    find/var/spool/clientmqueue/-typef -mtime +30|xargsrm-f
    

    然后将其加入到crontab定时任务中

    echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1' >> /var/spool/cron/root
    

    8、变更默认的ssh服务端口,禁止root用户远程连接

    可参考https://www.cnblogs.com/jokerbj/p/9117384.html

    我们默认不会禁止root登录,端口酌情处理

    9、锁定关键文件系统

    #加锁,不可修改加锁文件
    [root@jokerpro ~]# chattr +i /etc/passwd
    [root@jokerpro ~]# lsattr /etc/passwd
    ----i--------e-- /etc/passwd
    #去锁,可以修改文件
    [root@jokerpro ~]# chattr -i /etc/passwd 
    [root@jokerpro ~]# lsattr /etc/passwd   
    -------------e-- /etc/passwd
    

    使用chattr命令后,为了安全我们需要将其改名

    mv /usr/bin/chattr /usr/bin/任意名称
    

    10、调整文件描述符大小

    文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(文件的打开模式,文件的位置类型,文件的出始类型等)的文件对象相关联,这些信息被称作文件的上下文。文件描述符的有效范围是0到OPEN_MAX。
      对于内核而言,所有打开的文件都是通过文件描述符引用的,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符标识该文件,并将其作为参数传递给read或write。

    可通过ulimit -a查看当前设置

    # ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 3895
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 65535     # 文件描述符
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192       # 堆栈文件
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 3895
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    

    文件描述符

    查看linux服务器文件描述符设置的情况
    ulimit -n 1024 默认打开的文件描述符就是1024
    对于高并发业务来讲,默认值肯定不够

    cat /etc/security/limits.conf 65535是最大支持的文件描述符
    root soft nofile 65535
    root hard nofile 65535
    #可以使用下面一行来替代上面
    * - nofile 65535
    

    重启即可
    配置完成后,重新登录即可查看。

    提示:也可以把ulimit -SHn 65535命令临时生效,或者加入到/etc/rc.local,然后每次重启生效

    # cat >>/etc/rc.local<<EOF
    # open files
    ulimit -HSn 65535
    # stack size
    ulimit -s 65535
    EOF
    

    11、调整字符集,使其支持中文

    修改字符编码,默认是LANG=en_US.UTF-8
    修改该文件之前,可以先查看已经安装的语言包:
    locale -a 可通过grep过滤查看是否有中文语言包
    如果没有语言包

    yum install kde-l10n-Chinese  
    yum reinstall glibc-common 
    

    安装完成后通过vi命令编辑配置文件

    vim /etc/locale.conf
    LANG="zh_CN.UTF-8"
    source /etc/locale.conf 
    

    12、去除系统及内核版本登录前的屏幕显示

    # cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
    # cat /etc/issue
    \S
    Kernel \r on an \m
    

    13、禁止linux系统被ping

    # 开启禁止ping
    echo "net.ipv4.icmp_echo_ignore_all=1"  1>> /etc/sysctl.conf
    sysctl -p
    # 关闭禁止ping
    #首先要删除 /etc/sysctl.conf 里面net.ipv4.icmp_echo_ignore_all = 1 
    #之后执行如下命令
    echo 0 1> /proc/sys/net/ipv4/icmp_echo_ignore_all
    # 后续就可以通过更改 cat  /proc/sys/net/ipv4/icmp_echo_ignore_all文件
    0 关闭 1 开启
    

    14、历史记录

    # 以下都是临时生效,默认1000不需要更改
    # 设置的是闲置账号的超时时间
    export TMOUT=10 10秒后提示超时时间
    # 设置终端history显示条数
    export HISTSIZE=5 只显示最近5条信息
    # 上面的终端显示对应的是 cat ~/.bash_history 
    export HISTFILESIZE=5 该文件只保存5条信息
    # 清空历史记录
    history -c
    # 指定条数删除
    history -d 历史记录条属
    

    15、内核参数优化

    说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。

    [root@jokerpro ~]# vi /etc/sysctl.conf
    # 表示套接字由本端要求关闭,这个参数决定了它保持在FIN-wAIT-2状态的时间,默认值是60秒,建议调整为2,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_fin_timeout 60
    net.ipv4.tcp_fin_timeout = 2
    # 表示开启重用,允许TIME-wAIT sockets重新用于新的TCP链接,默认值为0,表示关闭,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse 0
    net.ipv4.tcp_tw_reuse = 1
    # 表示开启TCP链接中TIME_WAIT sockets的快速回收,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0 表示关闭,不建议开启,因为nat网络问题
    net.ipv4.tcp_tw_recycle = 0
    # reuse和recycle这俩个参数是为防止生产环境下web,squid等业务服务器time_wait网络状态数量过多设置的
    
    # 表示开启SYN Cookies功能,当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syscookies,默认为1,表示开启
    net.ipv4.tcp_syncookies = 1
    
    # 表示当keepalive启用时,TCP发送keepalive消息的频度,默认是2小时,建议更改为10分钟,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_keepalive_time,默认为7200秒
    net.ipv4.tcp_keepalive_time =600
    
    # 该选项用来设定允许系统打开的端口范围,即用于向外链接的端口范围,该参数对应系统路径为:/proc/sys/net/ipv4/ip_local_port_range 默认,32768 60999
    net.ipv4.ip_local_port_range = 32768   60999
    
    # 表示SYN队列的长度,默认为1024,建议加大队列的长度,为8182或更多,这样可以容纳更多等待链接的网络连接数,该参数为服务器端用于记录那些尚未收到客户端确认信息的链接请求的最大值,
    该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_syn_backlog
    net.ipv4.tcp_max_syn_backlog = 1024
    # 该选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或重传,因此,需要结合并发请求数来调节此值,
    该参数对应系统路径为:/proc/sys/net/ipv4/somaxconn 128   # 默认没有这个配置,需要自己生成
    net.core.somaxconn = 1024
    注意:
    
    socket接收的所有连接都是存放在队列类型的数据结构中,关键问题是这种队列有两个,而且其长度都是可以设置的。
     
    分别是下面两个内核参数:
     
    /proc/sys/net/ipv4/tcp_max_syn_backlog
     
    /proc/sys/net/core/somaxconn
     
    其中:
     
    tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限;
     
    somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限。
     
    对于没有调优的新装的centOS6.5系统,这两个参数的值都是128。
     
     
    这么描述虽然精确,但是没有一定基础,不熟练网络编程的人理解起来很费劲。
     
    打个简单的比方:
     
    某某发布公告要邀请四海之内若干客人到场参加酒席。客人参加酒席分为两个步骤:
     
    1、到大厅;
     
    2、找到座位(吃东西,比如糖果、饭菜、酒等)。
     
    tcp_max_syn_backlog用于指定酒席现场面积允许容纳多少人进来;
     
    somaxconn用于指定有多少个座位。
     
    显然tcp_max_syn_backlog>=somaxconn。
     
    如果要前来的客人数量超过tcp_max_syn_backlog,那么多出来的人虽然会跟主任见面握手,但是要在门外等候;
     
    如果到大厅的客人数量大于somaxconn,那么多出来的客人就会没有位置坐(必须坐下才能吃东西),只能等待有人吃完有空位了才能吃东西。
     
    那么问题来了:
     
    somaxconn是内核里的参数,listen函数有个参数backlog,如果在listen方法里面指定该参数大于somaxconn的值,重新编译并启动程序,服务端所能接收的完整的连接数上限是backlog呢还是somaxconn?
     
    答案很简单,listen方法指定的backlog是在用户态指定的,内核态的参数优先级高于用户态的参数,所以即使在listen方法里面指定backlog是一个大于somaxconn的值,socket在内核态运行时还会检查一次somaxconn,如果连接数超过somaxconn就会等待。
     
    就相当于主人指定了能有多少座位没用,客人到了现场,准备入座时,还要看酒店的客户经理判断能有多少个座位。
     
    结论:
     
    在没有调优的centOS7.4版本的服务器上,由于受到系统级别的限制,在该服务器上运行的服务端程序,在同一时间,最大只能接受128个客户端发起持久连接,并且只能处理128个客户端的数据通信
     
    # 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为5000,对于Aapache,Nginx等服务器来说可以将其调低一点,
    如改为5000-30000,不用业务的服务器也可以给大一点,比如LVS,Squid,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets
    net.ipv4.tcp_max_tw_buckets = 5000
    
    # 表示内核放弃建立链接之前发送SYN包的数量,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries,默认是6
    net.ipv4.tcp_syn_retries = 1
    # 参数的值决定了内核放弃链接之前发送SYN+ACK包的数量,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认是2
    net.ipv4.tcp_synack_retries = 1
    
    
    # 表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包最大数,该参数对应系统路径为:/proc/sys/net/ipv4/netdev_max_backlog,默认值为1000
    net.core.netdev_max_backlog = 1000  # 默认没有这个配置,需要自己生成
    
    # 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数值,孤立链接将立即被复位并打印出警号信息,这个限制只是为了防止简单的DoS攻击,不能过分依靠这个限制甚至
    人为减小这个值,更多的情况是增加这个值,默认是4096,建议该值修改为2000,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans
    net.ipv4.tcp_max_orphans = 2000
    
    # 以下参数是对iptables防火墙的优化,防火墙不开会有提示,可以忽略不理。
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
    注意:
    
    很多TIME_WAIT连接导致Cannot assign requested address的解决办法
    
    客户端connect服务器,执行一定时间后,接口返回-99的错误
    
    查看错误信息 OS error code  99:  Cannot assign requested address
    
    猜想端口被用光的原因,网络搜索得到一个解释:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”
    
    通过netstat,的确看到很多TIME_WAIT状态的连接
    
    因为是调用API,所以无法对连接进行opt设置,只能通过设置系统配置得以解决
    
    解决办法:
    
    执行命令修改如下2个内核参数   
    sysctl -w net.ipv4.tcp_timestamps=1  开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
    
    sysctl -w net.ipv4.tcp_tw_recycle=1  表示开启TCP连接中TIME-WAIT sockets的快速回收
    
    经常检查apache的连接数,会发现很多无用的time_wait连接。有人说这是正常的,是因为一个请求中途中断造成的;还有人说微软的IE连接时产生的Time_wait会比用Firefox连接时多。个人认为有一定的Time_wait是正常的,如果超过了连接数的比例就不是很正常,所以还是找来方法解决一下。
    
    先检查一下time wait的值:
    [root@aaa1 ~]#sysctl -a | grep time | grep wait
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
    
    这里解决问题的关键是如何能够重复利用time_wait的值,检查net.ipv4.tcp_tw当前值:
    [root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw
    net.ipv4.tcp_tw_reuse = 0
    net.ipv4.tcp_tw_recycle = 0
    增加或修改net.ipv4.tcp_tw值,将当前的值更改为1分钟(reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recycle是加速TIME-WAIT sockets回收):
    [root@aaa1 ~]# vi /etc/sysctl.conf
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    使内核参数生效:
    [root@aaa1 ~]# sysctl -p
    用netstat再观察时会发现已经恢复正常。
    
    结合DDOS和TIME_WAIT过多,建议增加如下参数设置:
    # Use TCP syncookies when needed
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_synack_retries=3
    net.ipv4.tcp_syn_retries=3
    net.ipv4.tcp_max_syn_backlog=2048
    # Enable TCP window scaling
    net.ipv4.tcp_window_scaling: = 1
    # Increase TCP max buffer size
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    # Increase Linux autotuning TCP buffer limits
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    # Increase number of ports available
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.ip_local_port_range = 5000 65000
    
    
    附:查看当前的连接数状况
    netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
    1 established
    1 State
    2 LAST_ACK
    4 CLOSING
    4 FIN_WAIT2
    9 LISTEN
    17 FIN_WAIT1
    18 SYN_RECV
    27 ESTABLISHED
    811 TIME_WAIT
    上面的命令可以帮助分析哪种tcp状态数量异常。其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
    
    附:查看IP连接数状况
    netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
    发现异常的,可以封了这个IP
    
    
    
    ===============
    
    
    
    TCP/IP TIME_WAIT状态原理
    
    
    TIME_WAIT状态原理
    
    ----------------------------
    
    通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。
    
    客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。
    
    下图是以客户端主动关闭连接为例,说明这一过程的。
    
    
    
     
    
     
    
     
    
    TIME_WAIT状态存在的理由
    
    ----------------------------
    
    TCP/IP协议就是这样设计的,是不可避免的。主要有两个原因:
    
    1)可靠地实现TCP全双工连接的终止
    
    TCP协议在关闭连接的四次握手过程中,最终的ACK是由主动关闭连接的一端(后面统称A端)发出的,如果这个ACK丢失,对方(后面统称B端)将重发出最终的FIN,因此A端必须维护状态信息(TIME_WAIT)允许它重发最终的ACK。如果A端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么A端将响应RST分节,B端收到后将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。
    
    因而,要实现TCP全双工连接的正常终止,必须处理终止过程中四个分节任何一个分节的丢失情况,主动关闭连接的A端必须维持TIME_WAIT状态 。
    
     
    
    2)允许老的重复分节在网络中消逝 
    
    TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个迟到的迷途分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。为了避免这个情况,TCP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消逝。
    
     
    
     
    
     
    
     
    
    MSL时间
    
    ----------------------------
    
    MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒。
    
     
    
    TIME_WAIT状态维持时间
    
    ----------------------------
    
    TIME_WAIT状态维持时间是两个MSL时间长度,也就是在1-4分钟。Windows操作系统就是4分钟。
    
     
    
     
    
     
    
     
    
    用于统计当前各种状态的连接的数量的命令
    
    ---------------------------
    
    #netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    
    返回结果如下:
    

    LAST_ACK 14
    SYN_RECV 348
    ESTABLISHED 70
    FIN_WAIT1 229
    FIN_WAIT2 30
    CLOSING 33
    TIME_WAIT 18122

    对上述结果的解释:
    

    CLOSED:无连接是活动的或正在进行
    LISTEN:服务器在等待进入呼叫
    SYN_RECV:一个连接请求已经到达,等待确认
    SYN_SENT:应用已经开始,打开一个连接
    ESTABLISHED:正常数据传输状态
    FIN_WAIT1:应用说它已经完成
    FIN_WAIT2:另一边已同意释放
    ITMED_WAIT:等待所有分组死掉
    CLOSING:两边同时尝试关闭
    TIME_WAIT:另一边已初始化一个释放
    LAST_ACK:等待所有分组死掉

     进一步论述这个问题:
    
    ===============================
    
    --------------客户端主动关闭连接-----------------------
    
    注意一个问题,进入TIME_WAIT状态的一般情况下是客户端。
    
    大多数服务器端一般执行被动关闭,服务器不会进入TIME_WAIT状态。
    
    当在服务器端关闭某个服务再重新启动时,服务器是会进入TIME_WAIT状态的。
    
    举例:
    
    1.客户端连接服务器的80服务,这时客户端会启用一个本地的端口访问服务器的80,访问完成后关闭此连接,立刻再次访问服务器的
    
    80,这时客户端会启用另一个本地的端口,而不是刚才使用的那个本地端口。原因就是刚才的那个连接还处于TIME_WAIT状态。
    
    2.客户端连接服务器的80服务,这时服务器关闭80端口,立即再次重启80端口的服务,这时可能不会成功启动,原因也是服务器的连
    
    接还处于TIME_WAIT状态。
    
     
    
    服务端提供服务时,一般监听一个端口就够了。例如Apach监听80端口。
    
    客户端则是使用一个本地的空闲端口(大于1024),与服务端的Apache的80端口建立连接。
    
    当通信时使用短连接,并由客户端主动关闭连接时,主动关闭连接的客户端会产生TIME_WAIT状态的连接,一个TIME_WAIT状态的连接就占用了一个本地端口。这样在TIME_WAIT状态结束之前,本地最多就能承受6万个TIME_WAIT状态的连接,就无端口可用了。
    
    客户端与服务端进行短连接的TCP通信,如果在同一台机器上进行压力测试模拟上万的客户请求,并且循环与服务端进行短连接通信,那么这台机器将产生4000个左右的TIME_WAIT socket,后续的短连接就会产生address already in use : connect的异常。
    
     
    
    关闭的时候使用RST的方式,不进入 TIME_WAIT状态,是否可行?
    
     
    
    --------------服务端主动关闭连接------------------------------
    
    服务端提供在服务时,一般监听一个端口就够了。例如Apach监听80端口。
    
    客户端则是使用一个本地的空闲端口(大于1024),与服务端的Apache的80端口建立连接。
    
    当通信时使用短连接,并由服务端主动关闭连接时,主动关闭连接的服务端会产生TIME_WAIT状态的连接。
    
    由于都连接到服务端80端口,服务端的TIME_WAIT状态的连接会有很多个。
    
    假如server一秒钟处理1000个请求,那么就会积压240秒*1000=24万个TIME_WAIT的记录,服务有能力维护这24万个记录。
    
     
    
    大多数服务器端一般执行被动关闭,服务器不会进入TIME_WAIT状态。
    
    服务端为了解决这个TIME_WAIT问题,可选择的方式有三种:
    
         保证由客户端主动发起关闭(即做为B端)
    
         关闭的时候使用RST的方式
    
         对处于TIME_WAIT状态的TCP允许重用
    
     
    
    一般Apache的配置是:
    
    Timeout 30  
    
    KeepAlive On   #表示服务器端不会主动关闭链接  
    
    MaxKeepAliveRequests 100  
    
    KeepAliveTimeout 180  
    
    表示:Apache不会主动关闭链接,
    
    两种情况下Apache会主动关闭连接:
    
    1、Apache收到了http协议头中有客户端要求Apache关闭连接信息,如setRequestHeader("Connection", "close");  
    
    2、连接保持时间达到了180秒的超时时间,将关闭。
    
    
    KeepAlive Off   #表示服务器端会响应完数据后主动关闭链接  
    # 使配置文件生效
    [root@jokerpro ~]# sysctl –p 
    

    提示:

    由于CentOS7.X系统中的模块名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf优化时,需要把net.ipv4.netfilter.ip_conntrack_max 这种老的参数,改成net.netfilter.nf_conntrack_max这样才可以。

    即对防火墙的优化,在5.8上是

    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
    

    对于 ip_conntrack_max 计算方法

    允许的最大跟踪连接条目,在这篇文档中我们叫作CONNTRACK_MAX CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32) 这里x是指针的bit数,(例如,32或者64bit)

    内存为8G CONNTRACK_MAX = 810241024*1024 / 16384 / (64 / 32)

    在7.4上是

    net.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_tcp_timeout_established = 180
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    

    另外,在此优化过程中可能会有报错:

    1、5.8版本上

    error: "net.ipv4.ip_conntrack_max"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_max"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"is an unknown key
    

    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

    modprobe ip_conntrack
    echo "modprobe ip_conntrack">> /etc/rc.local
    

    2、6.4版本上

    error: "net.nf_conntrack_max"isan unknown key
    error: "net.netfilter.nf_conntrack_max"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_established"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait"isan unknown key
    

    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

    modprobe nf_conntrack
    echo "modprobe nf_conntrack">> /etc/rc.local
    

    3、6.4版本上

    error: "net.bridge.bridge-nf-call-ip6tables"isan unknown key
    error: "net.bridge.bridge-nf-call-iptables"isan unknown key
    error: "net.bridge.bridge-nf-call-arptables"isan unknown key
    

    这个错误是由于自动处理可载入的模块bridge没有自动载入,解决办法是自动处理开载入的模块ip_conntrack

    modprobe bridge
    echo "modprobe bridge">> /etc/rc.local
    

    本文转自https://www.cnblogs.com/jokerbj/p/9133093.html,排版略有调整

    展开全文
  • centos7之系统优化方案

    千次阅读 2018-11-26 10:27:42
    优化条目: 修改ip地址、网关、主机名、DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精简开机自启动服务 ...

    优化条目:

    • 修改ip地址、网关、主机名、DNS等

    • 关闭selinux,清空iptables

    • 添加普通用户并进行sudo授权管理

    • 更新yum源及必要软件安装

    • 定时自动更新服务器时间

    • 精简开机自启动服务

    • 定时自动清理/var/spool/clientmqueue/目录垃圾文件,放置inode节点被占满

    • 变更默认的ssh服务端口,禁止root用户远程连接

    • 锁定关键文件系统

    • 调整文件描述符大小

    • 调整字符集,使其支持中文

    • 去除系统及内核版本登录前的屏幕显示

    • 禁止ping
    • 历史记录
    • 内核参数优化 

       

    • 升级具有典型漏洞的软件版本 
    • 1、修改ip地址、网关、主机名、DNS等
    • [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
      DEVICE=eth0         #网卡名字
      BOOTPROTO=static    #静态IP地址获取状态 如:DHCP表示自动获取IP地址
      IPADDR=192.168.1.113            #IP地址
      NETMASK=255.255.255.0           #子网掩码
      ONBOOT=yes#引导时是否激活
      GATEWAY=192.168.1.1
      [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
      DEVICE=eth0
      BOOTPROTO=static
      IPADDR=192.168.1.113
      NETMASK=255.255.255.0
      ONBOOT=yes
      GATEWAY=192.168.1.1
      [root@localhost ~]# vi /etc/sysconfig/network
      HOSTNAME=c64     #修改主机名,重启生效
      GATEWAY=192.168.1.1    #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。
      [root@localhost ~]# cat /etc/sysconfig/network
      HOSTNAME=c64
      GATEWAY=192.168.1.1
      我们也可以用  hostnamec64  来临时修改主机名,重新登录生效
      修改DNS
      [root@localhost ~]# vi /etc/resolv.conf   #修改DNS信息
      nameserver 114.114.114.114
      nameserver 8.8.8.8
      [root@localhost ~]# cat /etc/resolv.conf  #查看修改后的DNS信息
      nameserver 114.114.114.114
      nameserver 8.8.8.8
      [root@localhost ~]# service network restart   #重启网卡,生效
      重启网卡,也可以用下面的命令
      [root@localhost ~]# /etc/init.d/network restart
      2、关闭selinux,清空iptables
    • 关闭selinux防火墙
      默认云服务器都是关着的
      cat /etc/selinux/config 
      setenforce 0 设置不启动
      getenforce   查看
      清空iptables
    • # iptables –F     #清理防火墙规则
      # iptables –L     #查看防火墙规则
      Chain INPUT (policy ACCEPT)
      target     prot opt source               destination
      Chain FORWARD (policy ACCEPT)
      target     prot opt source               destination
      Chain OUTPUT (policy ACCEPT)
      target     prot opt source               destination
      #/etc/init.d/iptables save   #保存防火墙配置信息

      针对centos7防火墙配置

    • 修改防火墙
      CentOS切换为iptables防火墙
      firewall-cmd --state 查看防火墙状态
      
      切换到iptables首先应该关掉默认的firewalld,然后安装iptables服务。
      1、关闭firewall:
      systemctl stop firewalld.service 
      systemctl disable firewalld.service #禁止firewall开机启动
      
      2、安装iptables防火墙
      yum install iptables-services #安装
      service iptables save
      
      3、编辑iptables防火墙配置
      vi /etc/sysconfig/iptables #编辑防火墙配置文件
      下边是一个完整的配置文件:
      在你运行完save中间插入下面的规则
      -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      -A INPUT -p icmp -j ACCEPT
      -A INPUT -i lo -j ACCEPT
      -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
      -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
      -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
      -A INPUT -j REJECT --reject-with icmp-host-prohibited
      -A FORWARD -j REJECT --reject-with icmp-host-prohibited
      :wq! #保存退出
      
      systemctl start iptables.service  #开启
      systemctl enable iptables.service #设置防火墙开机启动

      附赠防火墙脚本,前提你已经切换至iptables

    • #!/bin/bash
      
      IPT=`which iptables`
      $IPT -F
      $IPT -X
      $IPT -P INPUT DROP
      $IPT -P FORWARD ACCEPT 
      $IPT -P OUTPUT ACCEPT
      $IPT -N syn-flood
      ##本地回环 内网允许任何
      $IPT -A INPUT -i lo -j ACCEPT
      $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      $IPT -A INPUT -m state --state NEW -s 10.0.0.0/8 -j ACCEPT
      # ssh 端口开放 任何IP
      $IPT -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
      # 根据需求填写相应的端口
      $IPT -A INPUT -p tcp -m multiport --dports 80,8087,89 -j ACCEPT
      # zabbix监控地址
      $IPT -A INPUT -p tcp -s zabbix.ip -m state --state NEW -m tcp --dport 10050 -j ACCEPT
      # ICMP 规则控制
      $IPT -A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
      $IPT -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
      # DOS防护
      $IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
      $IPT -A INPUT -j REJECT --reject-with icmp-host-prohibited
      $IPT -A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
      $IPT -A syn-flood -j REJECT --reject-with icmp-port-unreachable
      
      fwiptables.sh

      3、添加普通用户并运行sudo授权管理

    • 可参考https://www.cnblogs.com/jokerbj/p/9117384.html

    • 4、更新yum源及必要软件安装 

    • yum源文件
      yum update   更新源文件
      yum clean all  清除缓存
      yum makecache  建立yum缓存
      CentOS-Base.repo 网络源文件
      推荐使用阿里云  
      如果发生问题很可能是域名解析问题
      vim /etc/resolv.conf
      nameserver 8.8.8.8
      阿里
      nameserver 100.100.2.138
      nameserver 100.100.2.136
      options timeout:2 attempts:3 rotate single-request-reopen

      接下来就要安装几个必要的软件了

    yum install lrzsz ntpdate sysstat net-tools -y
    lrzsz 是上传下载的软件
    sysstat 是用来检测系统性能及效率的工具
    net-tools 没有ifconfig命令时候需要安装工具

    5、定时自动更新服务器时间

    默认云服务器有同步的时间服务器
    修改时间 date
    硬件时间 hwclock --show
    同步公有时间服务器,可搭配任务计划,阿里云的时间服务器ntp.aliyun.com
    yum -y install ntp
    ntpdate asia.pool.ntp.org
    time.nist.gov
    time.nuri.net
    ntpdate asia.pool.ntp.org 或者 ntp.aliyun.com
    注意;如果出现ntpdate[24325]: the NTP socket is in use, exiting,需要systemctl stop ntpd.service停止,然后同步,之后再启动,阿里云服务器默认同步阿里云时间服务器

    时间设置

    输出当前时间
    date +"%Y-%m-%d %H:%M:%S"      # 2018-06-08 14:05:08
    输出指定时间
    
    
    -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
    date -d "1 day ago" +"%Y-%m-%d"   2018-06-07  ago是昨天
    date -d "1 day" +"%Y-%m-%d"       2018-06-09  不加参数是明天
    以下使用数字表示前后多少天的加减
    date +%Y%m%d #显示前天年月日 
    date -d "+1 day" +%F   #显示前一天的日期  %F就是%Y-%m-%d
    date -d "-1 day" +%F   #显示后一天的日期   
    date -d "-1 month" +F  #显示上一月的日期 
    date -d "+1 month" +F  #显示下一月的日期 
    date -d "-1 year" +F   #显示前一年的日期 
    date -d "+1 year" +F   #显示下一年的日期
    
    设置时间
    
    -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; 
    date -s 01:01:01 #设置具体时间,不会对日期做更改 
    date -s "01:01:01 2012-05-23" #这样可以设置全部时间 
    date -s "01:01:01 20120523"   #这样可以设置全部时间 
    date -s "2012-05-23 01:01:01" #这样可以设置全部时间 
    date -s "20120523 01:01:01"   #这样可以设置全部时间

    附赠当前任务的执行时间脚本

    #!/bin/bash 
    start=$(date +%s)   # 1528437613
    nmap man.linuxde.net &> /dev/null 
    end=$(date +%s) 
    difference=$(( end - start )) 
    echo $difference seconds.

    时区设置

    修改时区                                                                                
    1)使用tzselect设置时区
    2)复制相应的时区文件,替换系统默认时区
      cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    3)将当前时间写入BIOS永久生效(避免重启后失效)
      hwclock
    4)centos /etc/sysconfig/clock
      ubuntu /etc/timezone

     

    任务计划使用

    cat /var/spool/cron/root 可直接修改配置文件,注意重启/reload
    crontab -e
    crontab -l -u root #查看root用户
    基本格式 :
    *  *  *  *  *  command
    分 时 日 月 周 命令
    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令
    每月1、10、22日的4 : 45重启apache
    4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
    每天18 : 00至23 : 00之间每隔30分钟重启apache
    0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
    每月的4号与每周一到周三的11点重启apache
    11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
    晚上11点到早上7点之间,每隔一小时重启apache
    * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

    6、精简开机自启动服务

    修改启动服务
    systemctl 是管制服务的主要工具,它整合了chkconfig 与 service功能于一体。
    systemctl is-enabled iptables.service   #查询防火墙是否开机启动
    systemctl restart sshd #有可能不需要加service
    systemctl is-enabled servicename.service #查询服务是否开机启动
    systemctl enable *.service #开机运行服务
    systemctl disable *.service #取消开机运行
    systemctl start *.service #启动服务
    systemctl stop *.service #停止服务
    systemctl restart *.service #重启服务
    systemctl reload *.service #重新加载服务配置文件
    systemctl status *.service #查询服务运行状态
    systemctl --failed #显示启动失败的服务

    7、定时自动清理 cat /var/spool/postfix/maildrop/目录垃圾文件,放置inode节点被占满

    centos7默认安装了postfix邮件服务,因此邮件位置 /var/spool/postfix/maildrop/会存在垃圾文件,如果长时间不清理,会导致inode数量不够用,从而无法存放文件

    mkdir /server/scripts -p
    vi /server/scripts/spool_clean.sh
    #!/bin/sh
    find/var/spool/clientmqueue/-typef -mtime +30|xargsrm-f

    然后将其加入到crontab定时任务中

    echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1' >> /var/spool/cron/root

    8、变更默认的ssh服务端口,禁止root用户远程连接

     

    可参考https://www.cnblogs.com/jokerbj/p/9117384.html

    我们默认不会禁止root登录,端口酌情处理

    9、锁定关键文件系统

    加锁,不可修改加锁文件
    [root@jokerpro ~]# chattr +i /etc/passwd
    [root@jokerpro ~]# lsattr /etc/passwd
    ----i--------e-- /etc/passwd
    去锁,可以修改文件
    [root@jokerpro ~]# chattr -i /etc/passwd 
    [root@jokerpro ~]# lsattr /etc/passwd   
    -------------e-- /etc/passwd

     

    使用chattr命令后,为了安全我们需要将其改名.

    mv /usr/bin/chattr /usr/bin/任意名称

    10、调整文件描述符大小

      文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(文件的打开模式,文件的位置类型,文件的出始类型等)的文件对象相关联,这些信息被称作文件的上下文。文件描述符的有效范围是0到OPEN_MAX。
      对于内核而言,所有打开的文件都是通过文件描述符引用的,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符标识该文件,并将其作为参数传递给read或write。

    可通过ulimit -a查看当前设置

    # ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 3895
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 65535     # 文件描述符
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192       # 堆栈文件
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 3895
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    文件描述符

    查看linux服务器文件描述符设置的情况
    ulimit -n 1024 默认打开的文件描述符就是1024
    对于高并发业务来讲,默认值肯定不够
    cat /etc/security/limits.conf 65535是最大支持的文件描述符
    root soft nofile 65535
    root hard nofile 65535
    可以使用下面一行来替代上面
    * - nofile 65535
    重启即可

    配置完成后,重新登录即可查看。

    提示:也可以把ulimit -SHn 65535命令临时生效,或者加入到/etc/rc.local,然后每次重启生效

    # cat >>/etc/rc.local<<EOF
    # open files
    ulimit -HSn 65535
    # stack size
    ulimit -s 65535
    EOF

    11、调整字符集,使其支持中文

    修改字符编码,默认是LANG=en_US.UTF-8
    修改该文件之前,可以先查看已经安装的语言包:
    locale -a  可通过grep过滤查看是否有中文语言包
    如果没有语言包
    yum install kde-l10n-Chinese  
    yum reinstall glibc-common  
    安装完成后通过vi命令编辑配置文件
    vim /etc/locale.conf
    LANG="zh_CN.UTF-8"
    source /etc/locale.conf

     

    12、去除系统及内核版本登录前的屏幕显示

    # cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
    # cat /etc/issue
    \S
    Kernel \r on an \m

    13、禁止linux系统被ping

    # 开启禁止ping
    echo "net.ipv4.icmp_echo_ignore_all=1"  1>> /etc/sysctl.conf
    sysctl -p
    # 关闭禁止ping
    首先要删除 /etc/sysctl.conf 里面net.ipv4.icmp_echo_ignore_all = 1 
    之后执行如下命令
    echo 0 1> /proc/sys/net/ipv4/icmp_echo_ignore_all
    # 后续就可以通过更改 cat  /proc/sys/net/ipv4/icmp_echo_ignore_all文件
    关闭 1 开启

    14、历史记录

    # 以下都是临时生效,默认1000不需要更改
    # 设置的是闲置账号的超时时间
    export TMOUT=10 10秒后提示超时时间
    # 设置终端history显示条数
    export HISTSIZE=5 只显示最近5条信息
    # 上面的终端显示对应的是 cat ~/.bash_history 
    export HISTFILESIZE=5 该文件只保存5条信息
    # 清空历史记录
    history -c
    # 指定条数删除
    history -d 历史记录条属

    15、内核参数优化

    说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。

    [root@jokerpro ~]# vi /etc/sysctl.conf
    # 表示套接字由本端要求关闭,这个参数决定了它保持在FIN-wAIT-2状态的时间,默认值是60秒,建议调整为2,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_fin_timeout 60
    net.ipv4.tcp_fin_timeout = 2
    
    # 表示开启重用,允许TIME-wAIT sockets重新用于新的TCP链接,默认值为0,表示关闭,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_reuse 0
    net.ipv4.tcp_tw_reuse = 1
    # 表示开启TCP链接中TIME_WAIT sockets的快速回收,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_tw_recycle,默认为0 表示关闭,不建议开启,因为nat网络问题
    net.ipv4.tcp_tw_recycle = 0
    # reuse和recycle这俩个参数是为防止生产环境下web,squid等业务服务器time_wait网络状态数量过多设置的
    注意:
    
    
    
    tcp TIME_WAIT
    进入主题前必须做铺垫啊,讲讲TIME_WAIT.因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭。先发FIN包的一方执行的是主动关闭;后发FIN包的一方执行的是被动关闭。主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL(最大报文存活时间,一般Linux内核设置30秒)时长。
    
    为什么主动方要傻乎乎等2MSL呢?不等,行不行?
    
    TCP目的是可靠传输,主动关闭的一方发出FIN,被动方回复ACK,接着被动方发送FIN,主动方收到被动关闭的一方发出的FIN包后,回应ACK包,同时进入TIME_WAIT状态,但是因为网络原因,主动关闭的一方发送的这个ACK包很可能延迟,从而触发被动连接一方重传FIN包。极端情况下,这一去(ACK去被动方)一回(重传FIN回来),就是两倍的MSL时长。
    
    如果主动关闭的一方跳过TIME_WAIT直接进入CLOSED,或者在TIME_WAIT停留的时长不足两倍的MSL,那么当被动关闭的一方早先发出的FIN延迟包到达或者重传FIN包到达后,就可能出现类似下面的问题:
    
    主动方旧的TCP连接已经不存在了,主动方只能返回RST包
    主动方新的TCP连接被建立起来了,延迟包可能干扰新的连接
    所以, TIME_WAIT必须等,2MSL不能少
    
    减少TIME_WAIT
    TIME_WAIT期间,资源不会释放,现在都追求高性能高并发,快速释放资源是躲不掉的.对于客户端因为有端口65535问题,TIME_WAIT过多直接影响处理能力. 对于服务器,无端口数量限制的问题,Linux优化也很给力,每个处于TIME_WAIT 状态下连接内存消耗很少, 而且也能通过tcp_max_tw_buckets = ${你要的阈值} 配置最大上限,但是对于短连接为主的web服务器,几十万的连接,基数很大,耗得内存也不小哦.快速释放总是好的
    
    tcp_tw_recycle:回收TIME_WAIT连接
    对客户端和服务器同时起作用,开启后在 3.5*RTO 内回收,RTO 200ms~ 120s 具体时间视网络状况。RTO(Retransmission TimeOut)重传超时时间.内网状况比tcp_tw_reuse 稍快,公网尤其移动网络大多要比tcp_tw_reuse 慢,优点就是能够回收服务端的TIME_WAIT数量
    
    但是,有个小坑:当多个客户端通过NAT方式联网并与服务端交互时,服务端看到的是同一个IP,也就是说对服务端而言这些客户端实际上等同于一个,可惜由于这些客户端的时间戳可能存在差异,于是乎从服务端的视角看,便可能出现时间戳错乱的现象,进而直接导致时间戳小的数据包被丢弃。客户端处于NAT很常见,基本公司家庭网络都走NAT.
    
    tcp_tw_reuse:复用TIME_WAIT连接 只对客户端起作用,1秒后才能复用,当创建新连接的时候,如果可能的话会考虑复用相应的TIME_WAIT连接。通常认为tcp_tw_reuse比tcp_tw_recycle安全一些,这是因为一来TIME_WAIT创建时间必须超过一秒才可能会被复用;二来只有连接的时间戳是递增的时候才会被复用。
    
    客户端请求服务器,服务器响应后主动关闭连接,TIME_WAIT存在于服务器,服务器是被连接者,没有复用一说,所以只对客户端起作用.如果是客户端主动关闭,TIME_WAIT存在于客户端,这个时候再次连接服务器,可以复用之前TIME_WAIT留下的半废品.
    
    tcp_timestamps:以上两点,必须在客户端和服务端timestamps 开启时才管用(默认开启) 需要根据timestamp的递增性来区分是否新连接
    总结
    客户端tcp_tw_reuse复用连接管用, tcp_tw_recycle有用,但是客户端主要不是接受连接,用处不大
    服务器tcp_tw_recycle回收连接管用,tcp_tw_reuse复用无效.为了减少TIME_WAIT留在服务器,可以在服务器开启KeepAlive,尽量不让服务器主动关闭,而是客户端主动关闭,减少TIME_WAIT产生.
    
    reuse/recycle
    
    
    # 表示开启SYN Cookies功能,当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syscookies,默认为1,表示开启
    net.ipv4.tcp_syncookies = 1
    
    # 表示当keepalive启用时,TCP发送keepalive消息的频度,默认是2小时,建议更改为10分钟,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_keepalive_time,默认为7200秒
    net.ipv4.tcp_keepalive_time =600
    
    # 该选项用来设定允许系统打开的端口范围,即用于向外链接的端口范围,该参数对应系统路径为:/proc/sys/net/ipv4/ip_local_port_range 默认,32768 60999
    net.ipv4.ip_local_port_range = 32768   60999
    
    # 表示SYN队列的长度,默认为1024,建议加大队列的长度,为8182或更多,这样可以容纳更多等待链接的网络连接数,该参数为服务器端用于记录那些尚未收到客户端确认信息的链接请求的最大值,
    该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_syn_backlog
    net.ipv4.tcp_max_syn_backlog = 1024
    # 该选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或重传,因此,需要结合并发请求数来调节此值,
    该参数对应系统路径为:/proc/sys/net/ipv4/somaxconn 128   # 默认没有这个配置,需要自己生成
    net.core.somaxconn = 1024
    注意:
    
    
    
    socket接收的所有连接都是存放在队列类型的数据结构中,关键问题是这种队列有两个,而且其长度都是可以设置的。
     
    分别是下面两个内核参数:
     
    /proc/sys/net/ipv4/tcp_max_syn_backlog
     
    /proc/sys/net/core/somaxconn
     
    其中:
     
    tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限;
     
    somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限。
     
    对于没有调优的新装的centOS6.5系统,这两个参数的值都是128。
     
     
    这么描述虽然精确,但是没有一定基础,不熟练网络编程的人理解起来很费劲。
     
    打个简单的比方:
     
    某某发布公告要邀请四海之内若干客人到场参加酒席。客人参加酒席分为两个步骤:
     
    1、到大厅;
     
    2、找到座位(吃东西,比如糖果、饭菜、酒等)。
     
    tcp_max_syn_backlog用于指定酒席现场面积允许容纳多少人进来;
     
    somaxconn用于指定有多少个座位。
     
    显然tcp_max_syn_backlog>=somaxconn。
     
    如果要前来的客人数量超过tcp_max_syn_backlog,那么多出来的人虽然会跟主任见面握手,但是要在门外等候;
     
    如果到大厅的客人数量大于somaxconn,那么多出来的客人就会没有位置坐(必须坐下才能吃东西),只能等待有人吃完有空位了才能吃东西。
     
    那么问题来了:
     
    somaxconn是内核里的参数,listen函数有个参数backlog,如果在listen方法里面指定该参数大于somaxconn的值,重新编译并启动程序,服务端所能接收的完整的连接数上限是backlog呢还是somaxconn?
     
    答案很简单,listen方法指定的backlog是在用户态指定的,内核态的参数优先级高于用户态的参数,所以即使在listen方法里面指定backlog是一个大于somaxconn的值,socket在内核态运行时还会检查一次somaxconn,如果连接数超过somaxconn就会等待。
     
    就相当于主人指定了能有多少座位没用,客人到了现场,准备入座时,还要看酒店的客户经理判断能有多少个座位。
     
     
     
    结论:
     
    在没有调优的centOS7.4版本的服务器上,由于受到系统级别的限制,在该服务器上运行的服务端程序,在同一时间,最大只能接受128个客户端发起持久连接,并且只能处理128个客户端的数据通信
    
    tcp_max_syn_backlog/somaxconn
     
    # 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为5000,对于Aapache,Nginx等服务器来说可以将其调低一点,
    如改为5000-30000,不用业务的服务器也可以给大一点,比如LVS,Squid,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_tw_buckets
    net.ipv4.tcp_max_tw_buckets = 5000
    
    # 表示内核放弃建立链接之前发送SYN包的数量,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_syn_retries,默认是6
    net.ipv4.tcp_syn_retries = 1
    # 参数的值决定了内核放弃链接之前发送SYN+ACK包的数量,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_synack_retries,默认是2
    net.ipv4.tcp_synack_retries = 1
    
    
    # 表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包最大数,该参数对应系统路径为:/proc/sys/net/ipv4/netdev_max_backlog,默认值为1000
    net.core.netdev_max_backlog = 1000  # 默认没有这个配置,需要自己生成
    
    # 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数值,孤立链接将立即被复位并打印出警号信息,这个限制只是为了防止简单的DoS攻击,不能过分依靠这个限制甚至
    人为减小这个值,更多的情况是增加这个值,默认是4096,建议该值修改为2000,该参数对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans
    net.ipv4.tcp_max_orphans = 2000
    
    # 以下参数是对iptables防火墙的优化,防火墙不开会有提示,可以忽略不理。
    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
    注意:
    
    
    
    很多TIME_WAIT连接导致Cannot assign requested address的解决办法
    
    
    
    客户端connect服务器,执行一定时间后,接口返回-99的错误
    
    查看错误信息 OS error code  99:  Cannot assign requested address
    
    猜想端口被用光的原因,网络搜索得到一个解释:客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”
    
    通过netstat,的确看到很多TIME_WAIT状态的连接
    
    因为是调用API,所以无法对连接进行opt设置,只能通过设置系统配置得以解决
    
    解决办法:
    
    执行命令修改如下2个内核参数   
    sysctl -w net.ipv4.tcp_timestamps=1  开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
    
    sysctl -w net.ipv4.tcp_tw_recycle=1  表示开启TCP连接中TIME-WAIT sockets的快速回收
    
    
    
    经常检查apache的连接数,会发现很多无用的time_wait连接。有人说这是正常的,是因为一个请求中途中断造成的;还有人说微软的IE连接时产生的Time_wait会比用Firefox连接时多。个人认为有一定的Time_wait是正常的,如果超过了连接数的比例就不是很正常,所以还是找来方法解决一下。
    
    先检查一下time wait的值:
    [root@aaa1 ~]#sysctl -a | grep time | grep wait
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
    
    这里解决问题的关键是如何能够重复利用time_wait的值,检查net.ipv4.tcp_tw当前值:
    [root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw
    net.ipv4.tcp_tw_reuse = 0
    net.ipv4.tcp_tw_recycle = 0
    增加或修改net.ipv4.tcp_tw值,将当前的值更改为1分钟(reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recycle是加速TIME-WAIT sockets回收):
    [root@aaa1 ~]# vi /etc/sysctl.conf
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    使内核参数生效:
    [root@aaa1 ~]# sysctl -p
    用netstat再观察时会发现已经恢复正常。
    
    结合DDOS和TIME_WAIT过多,建议增加如下参数设置:
    # Use TCP syncookies when needed
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_synack_retries=3
    net.ipv4.tcp_syn_retries=3
    net.ipv4.tcp_max_syn_backlog=2048
    # Enable TCP window scaling
    net.ipv4.tcp_window_scaling: = 1
    # Increase TCP max buffer size
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    # Increase Linux autotuning TCP buffer limits
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    # Increase number of ports available
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.ip_local_port_range = 5000 65000
    
    
    附:查看当前的连接数状况
    netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
    established
    State
    LAST_ACK
    CLOSING
    FIN_WAIT2
    LISTEN
    FIN_WAIT1
    SYN_RECV
    ESTABLISHED
    TIME_WAIT
    上面的命令可以帮助分析哪种tcp状态数量异常。其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
    
    附:查看IP连接数状况
    netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
    发现异常的,可以封了这个IP
    
    
    
    ===============
    
    
    
    TCP/IP TIME_WAIT状态原理
    
    
    TIME_WAIT状态原理
    
    ----------------------------
    
    通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。
    
    客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态。
    
    下图是以客户端主动关闭连接为例,说明这一过程的。
    
    
    
     
    
     
    
     
    
    TIME_WAIT状态存在的理由
    
    ----------------------------
    
    TCP/IP协议就是这样设计的,是不可避免的。主要有两个原因:
    
    1)可靠地实现TCP全双工连接的终止
    
    TCP协议在关闭连接的四次握手过程中,最终的ACK是由主动关闭连接的一端(后面统称A端)发出的,如果这个ACK丢失,对方(后面统称B端)将重发出最终的FIN,因此A端必须维护状态信息(TIME_WAIT)允许它重发最终的ACK。如果A端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么A端将响应RST分节,B端收到后将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。
    
    因而,要实现TCP全双工连接的正常终止,必须处理终止过程中四个分节任何一个分节的丢失情况,主动关闭连接的A端必须维持TIME_WAIT状态 。
    
     
    
    2)允许老的重复分节在网络中消逝 
    
    TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个迟到的迷途分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。为了避免这个情况,TCP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消逝。
    
     
    
     
    
     
    
     
    
    MSL时间
    
    ----------------------------
    
    MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒。
    
     
    
    TIME_WAIT状态维持时间
    
    ----------------------------
    
    TIME_WAIT状态维持时间是两个MSL时间长度,也就是在1-4分钟。Windows操作系统就是4分钟。
    
     
    
     
    
     
    
     
    
    用于统计当前各种状态的连接的数量的命令
    
    ---------------------------
    
    #netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    
     
    
    返回结果如下:
    
    LAST_ACK 14
    
    SYN_RECV 348
    
    ESTABLISHED 70
    
    FIN_WAIT1 229
    
    FIN_WAIT2 30
    
    CLOSING 33
    
    TIME_WAIT 18122
    
     
    
    对上述结果的解释:
    
    CLOSED:无连接是活动的或正在进行
    
    LISTEN:服务器在等待进入呼叫
    
    SYN_RECV:一个连接请求已经到达,等待确认
    
    SYN_SENT:应用已经开始,打开一个连接
    
    ESTABLISHED:正常数据传输状态
    
    FIN_WAIT1:应用说它已经完成
    
    FIN_WAIT2:另一边已同意释放
    
    ITMED_WAIT:等待所有分组死掉
    
    CLOSING:两边同时尝试关闭
    
    TIME_WAIT:另一边已初始化一个释放
    
    LAST_ACK:等待所有分组死掉
    
     
    
     
    
    进一步论述这个问题:
    
    ===============================
    
     
    
     
    
    --------------客户端主动关闭连接-----------------------
    
    注意一个问题,进入TIME_WAIT状态的一般情况下是客户端。
    
    大多数服务器端一般执行被动关闭,服务器不会进入TIME_WAIT状态。
    
    当在服务器端关闭某个服务再重新启动时,服务器是会进入TIME_WAIT状态的。
    
    举例:
    
    1.客户端连接服务器的80服务,这时客户端会启用一个本地的端口访问服务器的80,访问完成后关闭此连接,立刻再次访问服务器的
    
    80,这时客户端会启用另一个本地的端口,而不是刚才使用的那个本地端口。原因就是刚才的那个连接还处于TIME_WAIT状态。
    
    2.客户端连接服务器的80服务,这时服务器关闭80端口,立即再次重启80端口的服务,这时可能不会成功启动,原因也是服务器的连
    
    接还处于TIME_WAIT状态。
    
     
    
    服务端提供服务时,一般监听一个端口就够了。例如Apach监听80端口。
    
    客户端则是使用一个本地的空闲端口(大于1024),与服务端的Apache的80端口建立连接。
    
    当通信时使用短连接,并由客户端主动关闭连接时,主动关闭连接的客户端会产生TIME_WAIT状态的连接,一个TIME_WAIT状态的连接就占用了一个本地端口。这样在TIME_WAIT状态结束之前,本地最多就能承受6万个TIME_WAIT状态的连接,就无端口可用了。
    
    客户端与服务端进行短连接的TCP通信,如果在同一台机器上进行压力测试模拟上万的客户请求,并且循环与服务端进行短连接通信,那么这台机器将产生4000个左右的TIME_WAIT socket,后续的短连接就会产生address already in use : connect的异常。
    
     
    
    关闭的时候使用RST的方式,不进入 TIME_WAIT状态,是否可行?
    
     
    
    --------------服务端主动关闭连接------------------------------
    
    服务端提供在服务时,一般监听一个端口就够了。例如Apach监听80端口。
    
    客户端则是使用一个本地的空闲端口(大于1024),与服务端的Apache的80端口建立连接。
    
    当通信时使用短连接,并由服务端主动关闭连接时,主动关闭连接的服务端会产生TIME_WAIT状态的连接。
    
    由于都连接到服务端80端口,服务端的TIME_WAIT状态的连接会有很多个。
    
    假如server一秒钟处理1000个请求,那么就会积压240秒*1000=24万个TIME_WAIT的记录,服务有能力维护这24万个记录。
    
     
    
    大多数服务器端一般执行被动关闭,服务器不会进入TIME_WAIT状态。
    
    服务端为了解决这个TIME_WAIT问题,可选择的方式有三种:
    
         保证由客户端主动发起关闭(即做为B端)
    
         关闭的时候使用RST的方式
    
         对处于TIME_WAIT状态的TCP允许重用
    
     
    
    一般Apache的配置是:
    
    Timeout 30  
    
    KeepAlive On   #表示服务器端不会主动关闭链接  
    
    MaxKeepAliveRequests 100  
    
    KeepAliveTimeout 180  
    
    表示:Apache不会主动关闭链接,
    
    两种情况下Apache会主动关闭连接:
    
    1、Apache收到了http协议头中有客户端要求Apache关闭连接信息,如setRequestHeader("Connection", "close");  
    
    2、连接保持时间达到了180秒的超时时间,将关闭。
    
     
    
    如果配置如下:
    
    KeepAlive Off   #表示服务器端会响应完数据后主动关闭链接  
    
    TIME_WAIT
    # 使配置文件生效
    [root@jokerpro ~]# sysctl –p

    提示:

    由于CentOS7.X系统中的模块名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf优化时,需要把net.ipv4.netfilter.ip_conntrack_max 这种老的参数,改成net.netfilter.nf_conntrack_max这样才可以。

    即对防火墙的优化,在5.8上是

    net.ipv4.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_max = 25000000
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
    net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

    对于 ip_conntrack_max 计算方法

    -允许的最大跟踪连接条目,在这篇文档中我们叫作CONNTRACK_MAX 
     
    CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (x / 32) 
    这里x是指针的bit数,(例如,32或者64bit)
    
    内存为8G
    CONNTRACK_MAX = 8*1024*1024*1024 / 16384 / (64 / 32) 
    
    CONNTRACK_MAX

    在7.4上是

    net.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_max = 25000000
    net.netfilter.nf_conntrack_tcp_timeout_established = 180
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

    另外,在此优化过程中可能会有报错:

    1、5.8版本上

    error: "net.ipv4.ip_conntrack_max"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_max"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait"is an unknown key
    error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait"is an unknown key

    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

    modprobe ip_conntrack
    echo "modprobe ip_conntrack">> /etc/rc.local

    2、6.4版本上

    error: "net.nf_conntrack_max"isan unknown key
    error: "net.netfilter.nf_conntrack_max"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_established"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait"isan unknown key
    error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait"isan unknown key

    这个错误可能是你的防火墙没有开启或者自动处理可载入的模块ip_conntrack没有自动载入,解决办法有二,一是开启防火墙,二是自动处理开载入的模块ip_conntrack

    modprobe nf_conntrack
    echo "modprobe nf_conntrack">> /etc/rc.local

    3、6.4版本上

    error: "net.bridge.bridge-nf-call-ip6tables"isan unknown key
    error: "net.bridge.bridge-nf-call-iptables"isan unknown key
    error: "net.bridge.bridge-nf-call-arptables"isan unknown key

    这个错误是由于自动处理可载入的模块bridge没有自动载入,解决办法是自动处理开载入的模块ip_conntrack

    modprobe bridge
    echo "modprobe bridge">> /etc/rc.local

     

    展开全文
  • 可查看包间的照片环境,在线选择包间、大厅,在线订座、点餐。商家可设置包间有无最低消费,最少就餐人数可预订;手动释放桌位、自动释放桌位;预订座位是否要交定金等。 4、在线点餐 可选择菜品单点或选择套餐,...

    越来越多消费者,习惯通过线上渠道满足自己对餐饮的各类需求。与此同时,新一代消费人群,越来越关注餐饮全流程的效率和体验。这使得新技术、新体验将成为餐饮行业下一步发展的重心。当前的餐饮管理系统,已不局限于收银,更是一个餐厅、平台与客人的连接器。智能餐饮管理系统不仅仅是一款点餐软件,是集合微信点餐,外卖平台集成,在线预订,快餐系统基于一体的智慧餐饮管理系统。更是融合了自主研发的人,财,物,客的一站式经营管理系统。

    目录

    一、智慧点餐系统方案介绍

    二、智慧餐厅点餐系统方案优点

    三、智慧点餐系统方案功能

    四、智慧点餐系统方案特点

    五、智慧点餐系统应用场景

    六、智慧点餐系统使用流程

    七、智慧点餐系统发展前景

    正文

    一、智慧点餐系统方案介绍

    智慧点餐系统是基于物联网、云计算、大数据、智能软件为餐饮店量身打造的智慧餐饮管理系统,智慧点餐系统通过自助点餐、线上外卖系统、后厨互动系统,智能配送系统、前台收银系统,预定排号等,系统有效的解决了传统餐饮管理难等问题。智慧点餐系统彻底解决了管理不到位,运营成本高,餐厅环节不通畅等痛点,让餐厅实现了规范化,变的更加的高效,有序,并结合强大的后台管理便于查询分析,实时掌控餐饮的经营状况!在小程序的帮助下,餐厅所使用的微信点餐系统可以更好地使得整体经营状况提效增益。
    在这里插入图片描述
      二、智慧餐厅点餐系统方案优点

    开发智慧点餐系统,对饭店而言,节省了服务员,节省了开支。同时,消费者再也不用排队买单了,在线买单,在线预约开票,节约时间。整套系统减少了收银员的任务,降低人力成本,为饭店节省开支。

    1、自助点餐,节省成本:用户通过点餐小程序在微信自助点餐、支付,不需要排队等待,节省收银时间,压缩餐厅的服务时间,提升换台率。

    2、自己的平台,留住客户:通过外卖平台,用户都留在第三方,自己无法直接联系用户,而餐饮小程序属于自己的平台,用户数据自己把控。

    3、数据分析:通过餐饮小程序积累用户数据,让商户更加了解自己的顾客画像,可以针对性营销。

    4、会员管理:可以建立积分系统,留住老用户。家有余粮,心中不慌。

    5、顾客下单后:订单直接同步至后厨,省去沟通成本,控制出错率,降低用餐高峰期餐厅服务压力。

    6、强大的流量:利用餐饮小程序,将店铺搬到用户的微信里,背靠微信10亿流量,可以快速提升餐厅的线上销量。作为微信的力推产品,小程序的入口多,既可以通过附近的小程序查看,还可以通过微信下拉框快速使用,用户体验度高。
    在这里插入图片描述
      三、智慧点餐系统方案功能

    智慧点餐系统的功能不仅种类多,还十分强大,就以我爱物联网研发的微信点餐小程序来举例,它支持多渠道入口,支持公众号、小程序和微信群互联互通,不仅可以堂食在线点餐,还可以开展外卖订餐业务。

    1、移动点餐

    搭建自己的外卖、预订、点餐平台,深度对接商家微信公众号,是完完全全属于餐饮门店自己的线上点餐平台,不再向其他平台缴纳手续费。

    2、预约排队

    深度优化预约排队系统,结合小程序点餐流程管理实现自动叫号,快捷点餐快速入座。

    3、在线订座

    顾客可在线选座、订座。可查看包间的照片环境,在线选择包间、大厅,在线订座、点餐。商家可设置包间有无最低消费,最少就餐人数可预订;手动释放桌位、自动释放桌位;预订座位是否要交定金等。

    4、在线点餐

    可选择菜品单点或选择套餐,选择是否参加满减活动,是否预交定金等。

    5、优惠买单

    客人使用微信支付买单时,可以在小程序里自主选择多种优惠方式进行买单,如使用会员折扣、积分、优惠券等,这对于消费忠诚度和二次消费是有极大的促进的,同时有效降低了服务员的工作难度。

    6、外卖

    餐饮门店通过在点餐系统后台进行设置自动接单和手动接单两种模式,不接单自动退款;可按区域设置配送范围;设置起送条件,满多少配送;设置配送运费;选择菜品规格;多种促销活动(首单满减,满多少免配送费,满多少减多少);消费码核销及审核。
    在这里插入图片描述
      四、智慧点餐系统方案特点

    智慧点餐系统与外卖实现对接之后,实现了一体化营销管理,更多的流量会员都留在自己的平台上,并且记录下来,商家通过对顾客的数据有效分析,了解用户的真正的兴趣爱好,从而针对性的推荐更多的活动,大大提升了商家的盈利空间。

    1、招牌菜谱:小程序点餐界面和PC端点餐界面,菜品分配清晰明了,让招牌好菜优势无限放大。

    2、点餐就是快:无需服务员,用户通过自助点餐,提升餐厅翻台率。

    3、就餐不等待:用户下单之后,后台对接小票打印系统,订单清晰明了,实时监控,避免上错。

    4、结账好又快:多种聚合支付方式,方便快捷不用问,节省双方时间,避免错账。

    5、价格不怕调:微信小程序点餐系统,后台操作,实时更新,不怕调菜品、调价格。

    6、外卖管理:餐饮门店无缝对接第三方外卖平台,手动接单和自动接单,拓展线上利润。

    7、更高的曝光率:小程序流量入口多、可分享好友,或群里,还可通过附近的小程序下单。

    8、会员积分系统:对接微信积分会员系统,包含积分抵现、会员折扣等,沉淀老用户。

    9、营销推广:限时折扣、拼团、团购、菜品折扣等多种营销方式。
    在这里插入图片描述
      五、智慧点餐系统应用场景

    智慧餐厅,从实际消费场景出发,连接餐厅与消费者两端。记录消费者从预订、点餐到支付的全流程消费行为,同时连接餐厅前厅后厨及供应链系统,简化餐厅服务流程,提高用餐体验!

    1、外卖场景

    无缝对接美团、饿了么、百度外卖,帮助餐厅实现新订单自动处理,语音提醒。

    2、预定场景

    顾客可通过微餐厅预定餐桌,同步预定信息至前厅后厨。

    3、点餐场景

    提供小程序点餐、扫码点餐、大屏点餐、明档点餐、无线点餐等自助点餐方式,帮助餐厅提高点餐效率,节省人力成本。

    4、支付场景

    微信、支付宝、扫码结账、刷脸支付,帮助餐厅实现便捷买单,快速收银。

    5、开发票场景

    顾客手机扫码,自助开票,极速开票,电子发票绿色环保,帮助餐厅提高开票效率,节省打印成本。
    在这里插入图片描述
      六、智慧点餐系统使用流程

    首先顾客在进入餐厅就座之后扫描餐桌上的二维码,小程序点餐系统就会自动识别餐桌号,顾客可以在小程序点餐系统内查看电子菜单,在线选择心仪餐品并完成支付,收银和后厨就会自动接单进行配餐出餐。

    智慧点餐系统的主界面美观、操作简单、快捷,主要功能在小键盘上即可完成,支持图形点菜、编码点菜等多种点菜方式,录入方式可自动切换,能极大地提高前台营业的效率。

    为了适应餐厅完善会员体系的需要,智慧点餐系统还可以帮助商家更好地进行会员管理,同步更新餐厅相关活动以及资讯,进一步提高时效性,有效传达到消费者移动端,优化服务质量,提升用户体验。
    在这里插入图片描述
      七、智慧点餐系统发展前景

    我国生活水平的提高,相应的餐饮行业也会提高!如今我们的生活和互联网越来越密不可分,人们对生活品质的要求也越来越高。智慧点餐系统以只为优质生活为目标,紧跟时代步伐,为消费者提供了方便快捷的点餐服务。智慧点餐系统能够带给商家更多的便捷,让商家不会因为忙中出错,而且也带给了消费者更好的体验,不只是提高了效率,也保证了质量,受到了很多的消费者的喜爱,这是一个很值得做的项目,市场的发展的前景十分的好,受到了很多的加盟商的青睐。
    在这里插入图片描述

    展开全文
  • 随着人工智能技术的发展越来越好,机器人不再有局限性,渐渐的进入到各行各业中来了,当然,政府大厅也不例外。政务机器人的出现是“互联网 + 政务”办公室的一个亮点,它能够针对特定群众的具体需求做出相应的引导...
  • 游戏中的优化指的是什么?

    千次阅读 2015-09-06 10:53:35
    游戏软件的优化和一般软件是有一些区别。 游戏通常是软实时(soft real-time),就是说运行上有时间限制,但没有硬实时般严格。 先谈固定硬件的游戏平台,如游戏机和街机。在这些平台上,通常会设置固定的帧率...
  • “互联网+政务服务”推进过程中存在着线上线下融合难、体制机制不完善、网上政务服务水平弱、发展环境亟待优化等问题,有必要从体制机制、基础支撑、人文关怀、法治环境等方面深入剖析这些痛点难点堵点的诱因,继而...
  • 可查看包间的照片环境,在线选择包间、大厅,在线订座、点餐。商家可设置包间有无最低消费,最少就餐人数可预订。手动释放桌位、自动释放桌位。预订座位是否要交定金等。 4、在线点餐 可选择菜品单点或选择套餐...
  • Tomcat优化

    2019-08-28 13:51:26
    优化范围 内存优化 线程优化 配置优化 线程优化 maxConnections tomcat8.5/webapps/docs/config/http.html The maximum number of connections that the server will accept and process at any given time. ...
  • CS:GO 设置和优化

    千次阅读 2020-10-17 00:25:50
    现在的 CS:GO 优化一般,加上 GTX960 性能一般,玩起来实在太卡了,而 FPS 游戏对帧数又是很有要求的,所以起源2(Source 2)啥时候来啊?!???? 环境 系统:Windows 10 Pro ×64 显卡:NVIDIA 系列 系统设置 ...
  • 2014-09-07QQ游戏大厅里的网页游戏打开后没画面显建议您试一下以下方法是否可以帮您的,1、登陆游戏前请先关闭您进程管理器中不必要的进程。 2、如果有优化软件,建议您优化一下系统配置。或者请您刷新几次,稍后再...
  • Centos7之系统优化

    2019-04-04 17:40:00
    优化条目: 修改ip地址、网关、主机名、DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精简开机自启动服务 ...
  • 优化企业会议解决方案

    千次阅读 2018-10-16 16:58:35
    在酒店演示大厅,培训讲师在组织商业培训讲座;在大学教室,老师在讲授知识给各位同学...都会出现由于会议设备而影响到会议进程。 会议场景下,我们的客户是谁呢? 群体特征 1、具有一定收入和拥有高学历...
  • [导读] 基于“共性平台+应用子集”的建设模式,对环境要素、污染排放要素及环境风险要素进行全面感知和动态监控,建设全向互联的新型生态环境监测监控物联网体系,探索出可复制的环保物联网建设、运营及运维的市场化...
  • 1、修改ip地址、网关、主机名、DNS等 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #网卡名字 BOOTPROTO=static #静态IP地址获取状态 如:DHCP表示自动获取IP地址 ...
  • 网上办事大厅是由省信息中心承建的电子政务核心业务系统,致力于为全省民众提供一站式网上办事服务,实现了政务信息网上公开、法人及个人事项网上办理、公共决策网上互动、政府效能网上监督五大功能。目前大厅已进驻...
  • 网上办事大厅是由省信息中心承建的电子政务核心业务系统,致力于为全省民众提供一站式网上办事服务,实现了政务信息网上公开、法人及个人事项网上办理、公共决策网上互动、政府效能网上监督五大功能。目前大厅已进驻...
  • 性能优化利器——PAT方法 数据库系统出现性能问题,好比人得了病一样,需要治疗。俗话说,“症见于四肢五官,病隐于五脏六腑”。本章阐述如何从体系层面上运用PAT方法学定位问题、调理系统、优化性能。PAT方法学...
  • Groupon公司就是这样一个致力于数据中心优化设计的厂商,该公司采用了20世纪30年代的数学问题求解决方法--线性规划模型,以优化数据中心设计。 线性规划模型被用来提供许多变量,并最大限度地提高特定的结果。“线性...
  • 发布会上,英特尔公司客户端计算事业部副总裁兼移动客户端集团总经理 Chris Walker表示,第八代智能英特尔酷睿i9-8950HK处理器经过优化后,大幅提升了性能极限,是首款拥有6核心和12线程的英特尔移动式处理器。...
  • Unity 自学与进阶必会目录

    千次阅读 2016-12-19 14:25:32
    1. Unity 5权威讲解 #目录 ...1.2.2 集成开发环境 3 1.2.3 所有功能免费 4 1.2.4 中间件内建 5 1.2.5 开放社区 5 1.2.6 资源商店 6 1.3 使用Unity制作的游戏 7 1.4 下载Unity 9 1.4.1 安装Un
  • 2018年因为游戏版权问题,让众多游戏公司陷入困境,2018年1- 3 月份,获得版号的游戏数量分别为 716 款、 484 款、 727 款,到2018年年底,都没有游戏...同时受到政策和环境影响,2018年国内的游戏产业收入也开始...
  • 运行环境:WinXP/Win2000/Win2003/Win7/WIN7(x64)EXE文件大小: 9.41 MB (9,877,272 字节)EXE文件MD5: F074423B06ED26B048100D74E8BB0E0FSHA-1: D2C818511CA13E1E7534E26A69920B5A618F171D 迅雷7.2.2.3178 去广告...
  • 什么样的公司最吸引90后大学生

    千次阅读 2012-10-20 22:44:46
    一、他们非常关注平等、尊重、开放自由交流公司的以下这些平等方面挺吸引大家:1、所有管理层和员工坐一样的座位,包括老板都没有自己的办公室,大家都在大厅办公。管理层也得请假申请,也得一样准时9点打卡上班2、...
  • 为此,寻找真实的参考非常有用,尽管大厅是科幻小说,但我们始终可以找到在现实中会产生类似磨损的材料和物体。我选择在工业机械中寻找参考,以了解表面如何磨损以及污垢如何分布。 我们开始制造材料的磨损:油漆...
  • 他敏锐地觉察到了市场的需求,以提供用户价值为使命,不断打磨优化产品,体现了一位创业者的专注和执着。 创业是一条少有人走的路。创业的高光时刻只存在于少数幸运儿的瞬间,剩下的时刻则是长久的暗淡。前不久,...
  • 企业不再局限于传统采购模式的转变和采购管理体系的优化再造,而是战略战术体系的系统化变革。 如何敏锐洞察企业供应信息,及时应对采购过程中的风险?如何精准管控企业采购业务,实现业务过程可视化、阳光化、智能...
  • 事实上,近端策略优化是一种在一系列基准中实现竞争性能的算法,在OpenAI的程序生成的环境套件中,在硬探索模式下完全失败。可以想象,对于广泛的相关任务来说,这将是一个问题。 学习玩电子游戏的Agent可能会经历一...
  • Oracle DBA手记3:数据库性能优化与内部原理解析 盖国强杨廷琨 等编著 ISBN 978-7-121-14479-0 2011年9月出版 定价:49.80 元...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,672
精华内容 668
关键字:

优化大厅环境