一个合格的 java 实习生技能树要点到什么程度 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
binbinyouliiii
V2EX    Java

一个合格的 java 实习生技能树要点到什么程度

  •  
  •   binbinyouliiii 2016-11-26 21:03:47 +08:00 14742 次点击
    这是一个创建于 3316 天前的主题,其中的信息可能已经有所发展或是发生改变。

      楼主是个 17 届专科应届生,今年大三了,同样需要出来找实习了,自认为算在班里学的还可以的,老师几乎没什么用,只能自学。
       6 月份的时候有个校招,专科学校的校招,来的企业要么是来抓你做苦力的,要么就是些跟学校或政府有关系的公司,要求都很低,我甚至见过 hr 问我的学:“你知道 mvc 分别代表什么吗?”,同学回答完之后过两天还来了录用通知,然后苦 B 的在公司做测试(不是我贬低测试这个职业,真测试技术含量也不小,但是这些公司的测试极其没有技术含量,纯手工化测试,几乎是个懂点的人就能干)。还有某著名青岛家电企业来招测试,然后什么也不会的同学被录用去当电视测试。

      楼主那时候年幼无知,也有学校的规定的原因,然后楼主挑了几家还算靠谱的(其实招软件的一共也没几家),来了通知后又挑了一家比较“靠谱”的公司进去了,是那种跟政府关系好的然后接政府的活。
      干了几天后来觉得自己被学校卖了,工资 1500 不到(好像这是批发价,公司同样找来做测试的,技术水平和上面说的那位同学差不多的也是这个价),技术氛围很差,只能默默地自己在角落里默默学习。
      后来干了4个月,实习协议也到期了,打算辞掉去上海,也非常巧,正好赶上公司要裁人,于是我就这么被 Bang 掉了,裁掉也不是因为技术不够,也有各方面的原因。
      可是被踢掉心理总是不舒服,因为那位什么也不会的测试同学没被踢掉,自己有技术但是被踢掉了。心里有时候也安慰自己不是技术原因被踢掉的,可是总是觉得自己技术不够,想学习。看了很多 java 招聘的,看到要求需要会的很多,什么 redis , netty 的,最近学了学 redis ,基本会用了,但是一直找不到实践的地方,这就造成了死循环,想学习,但是找不到实践的地方,学不精,越不精,就越不敢找实习,怕碰到坑,所以今天想来问问找实习的话需要学到什么程度。

      现在的技能树,会 ssm 框架, ssh 框架也会,但是赶不上 ssm 框架熟悉,会简单的 redis (实践只在树莓派上用过), netty 正在看,但是确实不知道用在什么地方。
      网页方面,简单的 jquery 和 css 还是会的, linux 也会点,也有上线的网站。
    32 条回复    2016-12-15 18:35:27 +08:00
    tianzx
        1
    tianzx  
    PRO
       2016-11-26 22:02:37 +08:00 via Android   1
    好好看算法
    boyhailong
        2
    boyhailong  
       2016-11-26 22:33:59 +08:00   1
    java 后端?如果是后端,首先是操作系统,网络,数据结构这些基础, java 语法,如果是 web 开发,熟悉一些 web 框架吧。
    neoblackcap
        3
    neoblackcap  
       2016-11-26 22:36:24 +08:00   7
    刚好提了一个招聘的问题,那我就站在后端的角度说说了,毕竟楼主你是 Java ,按道理应该也是想干后端的吧。
    首先呢,一个应届生我们对他都是没什么来了就能干活的期望,我们只希望他来了之后能快速成长,然后再慢慢开干。同时切记用语言划分岗位,什么 C++程序员, Java 程序, PHP 程序员都是狗屁招聘。
    一门语言要了解它的语法然后干增删改查的活需要很久吗? 2 天可以了吧。所以语言划分工作都是渣,专注一个自己熟悉的领域才是正道,喜欢编程语言的就去学编程语言,学什么范畴论,喜欢分布式就应该去读 google 的分布式老三篇。

    以我们公司为例,我们招人要求后端基础扎实。
    需要会什么?请参考《 CSAPP 》。
    具体不外乎什么是系统调用,并发控制,锁,进程 /线程, IO 中的同步,异步,堵塞,非堵塞,最好的例子就是写一个可以支持并发连接数为 10 的 echo server
    等你学完了这些你去学什么框架都会很快的了,框架的学习要点不在于用,在于明白作者的思想,为什么要这样设计,然后你就可以用框架解决很多问题,以及会知道哪些问题框架解决不了要自己上。
    大三的还算早,我当年也是大三特意花时间去看《现代操作系统》感觉实在是获益良多,有时间多看机械工业出版社的大理石系列的书,你看完之后肯定会获益良多,之后你再花一个月时间写个 echo server 放在你自己的 github 上,我保证你肯定能有真正互联网企业愿意招你,完全可以忽视那些伪 IT 企业。
    echo1937
        4
    echo1937  
       2016-11-26 22:40:31 +08:00
    gogohigh
        5
    gogohigh  
       2016-11-26 22:43:17 +08:00
    apue,unp 这两本书加上一点 java se 基础就可以了
    depress
        6
    depress  
       2016-11-26 22:50:17 +08:00 via Android
    说句实话吧,在帝都,能用 ssi 或 spring mvc 搭个博客的,会 Linux 部署的, 12k 的工作能找到,多线程、反射、 nio 还比较熟,会一种 nosql 或内存数据库的, 15k 能找到,实际上我身边拿 15k 的人自己也搭不出一个博客, spring 用的也马马虎虎。然而我觉得对于应届生而言,算法是最重要的。
    q397064399
        7
    q397064399  
       2016-11-27 06:14:25 +08:00
    @neoblackcap
    echo server 并发为 10 貌似很 容易啊,
    原生的 select 以及 posix 线程 api 就能搞定
    q397064399
        8
    q397064399  
       2016-11-27 06:30:26 +08:00
    Java 最重要的就是
    反射 反射 反射 线程 线程 线程
    重要的事情提三遍,只要你吃透了反射 线程,各种框架基本上就是手到擒来,
    我以前不懂,吃了大亏,搞懂了反射 线程,你就可以去各种框架的源代码里面 大概摸一摸(不提倡细读代码)
    对你学习框架的使用有很大的帮助
    q397064399
        9
    q397064399  
       2016-11-27 06:32:28 +08:00
    另外学框架 最好找个培训班录好的视频看, JavaEE 历史太悠久,有很多暗坑,自己踩起来 特辛苦
    q397064399
        10
    q397064399  
       2016-11-27 06:35:55 +08:00
    @neoblackcap 这位仁兄要求并不高,本丝 菜鸟一枚 DNSProxy 初版代码,花了 2 天学习 Boost 的时间写的,

    #include "stdafx.h"
    #include <iostream>
    #include <boost/asio.hpp>
    #include <vector>
    #include <boost/thread.hpp>
    #include <boost/date_time.hpp>
    #include <boost/lambda/bind.hpp>
    #include <boost/lambda/lambda.hpp>
    using namespace std;
    using namespace boost::asio;

    int thread_count = 0;
    boost::mutex mu;


    void handle_request(ip::udp::endpoint & request_ep, vector<unsigned char> &buff, int bytes, ip::udp::socket *back_socket) {
    mu.lock();
    thread_count++;
    mu.unlock();
    io_service dns;
    ip::udp::endpoint dns_server_ep(ip::address::from_string("223.5.5.5"), 53);
    ip::udp::socket sock(dns, ip::udp::endpoint(ip::udp::v4(), 0));
    sock.send_to(buffer(buff, bytes), dns_server_ep);
    vector<unsigned char> data(2048, 0);

    int nativeSocket = sock.native();
    fd_set fileDescriptorSet;
    struct timeval timeStruct;

    // set the timeout to 30 seconds
    timeStruct.tv_sec = 10;
    timeStruct.tv_usec = 0;
    FD_ZERO(&fileDescriptorSet);
    FD_SET(nativeSocket, &fileDescriptorSet);
    select(nativeSocket + 1, &fileDescriptorSet, NULL, NULL, &timeStruct);
    if (!FD_ISSET(nativeSocket, &fileDescriptorSet)) { // timeout
    std::string sMsg("TIMEOUT on read client data. Client IP: ");
    sMsg.append(sock.remote_endpoint().address().to_string());
    cout << sMsg << endl;
    return;
    }
    int recv_bytes = sock.receive_from(buffer(data), dns_server_ep);
    back_socket->send_to(buffer(data, recv_bytes), request_ep);
    sock.close();
    mu.lock();
    thread_count--;
    mu.unlock();
    cout << "alive thread is :" + to_string(thread_count) << endl;
    }


    void handle_connections() {
    io_service service;
    ip::udp::socket sock(service, ip::udp::endpoint(ip::udp::v4(), 53));
    while (true) {
    ip::udp::endpoint sender_ep;
    vector<unsigned char> buff(1024, 0);
    int bytes = sock.receive_from(buffer(buff), sender_ep);
    boost::thread m_thread(boost::bind(handle_request, sender_ep, buff, bytes, &sock));
    m_thread.detach();
    }
    }



    int main(int argc, char* argv[]) {
    handle_connections();
    }
    zjbztianya
        11
    zjbztianya  
       2016-11-27 11:39:55 +08:00
    @neoblackcap 公司要人么,感觉我很符合啊。。。 233333...知识点全是《 UNP 》和《 APUE 》的吧....最近刚好看了一遍。。。
    neoblackcap
        12
    neoblackcap  
       2016-11-27 11:51:39 +08:00
    @q397064399
    @zjbztianya
    我司在广州天河,若是感兴趣的话,欢迎联系本人

    echo server 纯手写并发 10 对于会的人来说当然不难,但是其中要掌握 socket 编程,系统的 IO 复用机制(select, poll, epoll)或者是 thread/process ,还有理解了同步,非同步,堵塞,非堵塞。这些很多人都已经不知道在说什么了。
    zjbztianya
        13
    zjbztianya  
       2016-11-27 12:01:35 +08:00
    @neoblackcap 怎么联系呢
    aias
        14
    aias  
       2016-11-27 12:04:46 +08:00   1
    简单来说可以从计算基础、 Java 语言和生产用的框架来点技能。一般像样点的单位比较看重你的基础,不像样的上来就问框架。
    neoblackcap
        15
    neoblackcap  
       2016-11-27 12:06:58 +08:00
    @zjbztianya 我的私人邮箱地址为 “ neo.blackcap 在 gmail.com ” 发送简历以及要面试什么什么岗位即可
    我司现招聘前端工程师,后端工程师( Java, Python)。后端嘛其实什么都搞,我们最近是在搞 PaaS 平台,欢迎各位有兴趣的联系我。同时请注明你是否面试实习的岗位,毕竟薪酬不一样要求不一样。
    zjbztianya
        16
    zjbztianya  
       2016-11-27 12:15:17 +08:00
    @neoblackcap 好的
    fantastM
        17
    fantastM  
       2016-11-27 13:22:42 +08:00   1
    java 基础最重要,框架仅是其次。算法、操作系统、网络是加分项
    q397064399
        18
    q397064399  
       2016-11-27 14:21:05 +08:00
    @neoblackcap 好的,尝试下
    Allianzcortex
        19
    Allianzcortex  
       2016-11-27 21:38:10 +08:00
    @neoblackcap 我也看过原版的《 CSAPP 》,我保留一下疑问哈。后端开发和服务端开发是两个概念,做后端的话实际上对 epoll/select 是不需要了解的,阻塞 /非阻塞 /同步 /异步属于概念上了解,可以选择就好(比如我熟悉 Python,那么需要知道 twisted/gevent )。还有 @q397064399 我不了解反射⊙⊙b 汗,多线程也就是限于处理实时流的时候用 implements runnable 来多线程去发个邮件,但最近写 Java 也写的很开心。如果像我一样对 Java 的要求是用的话,掌握 Design Pattern 基本就够了。
    ihuotui
        20
    ihuotui  
       2016-11-27 21:50:17 +08:00   1
    整洁代码之道 设计模式 单元测试 java
    q397064399
        21
    q397064399  
       2016-11-27 22:52:23 +08:00
    @Allianzcortex
    后端开发确实对 同步 IO/异步 IO 以及阻塞模型 做概念上的了解即可(因为通常 指的都是 HTTP 服务器后端业务开发),
    跟服务端开发确实不是一个概念,因为绝大部分后端开发都是在成熟的框架下完成业务的编码

    拿 J2EE 来讲, Servlet3.0 规范之前是没有异步的 IO ,都是阻塞,然后每一个 HTTP 请求对应一个
    ServletRequest ,如果 Servlet 不返回信息,浏览器就会一直被阻塞,直到超时,而后端每一个请求对应一个线程
    这样也可以简化开发,另外针对 HTTP 的无状态的特性,大大降低了程序员的心智负担,仅需要在数据库操作的 Service
    层做事务跟并发同步 即可,其余的业务层 视图层都是针对单用户编写代码


    Java 的反射并不是多难,理解反射的概念 有助于理解框架,要想程序逻辑清晰,得面向切面编程吧,把事务控制
    日志记录 全向访问都通过 切面隔离开来,这样主线逻辑代码就会更清晰,这里就会用到 AOP


    对象的管理,不能总 new 来 new 去,肯定要交给对象容器来管理,现在连 Android 都开始流行 依赖注入跟 AOP 了
    直接用 @注解 +反射


    而 AOP 以及依赖注入提出来比较晚,所以没有上 Gof 设计模式那本书,你看过 Head First 设计模式就知道 Java 结合反射 动态代理来实现对象的装饰


    以前写 Android 是这样一个尿性


    public xxxActivity extends Activity {


    @Override
    protected onCreate(){
    xxxx;
    xxxx;
    findByView();
    findByView();
    findByView();
    }

    xxx = xxxObj.setOnClickListen(new onClickListen(){

    })
    }


    现在呢?
    直接注解,完事,然后交给框架去反射 装配我们的代码

    @Activity(label = "@string/app_name")
    @Layout(R.layout.main)
    public class HelloTransfuse {

    @Inject @View(R.id.textview)
    TextView textView;

    @Inject @Resource(R.string.hello)
    String helloText;

    @OnCreate
    public void hello() {
    textView.setText(helloText);
    }
    }
    neoblackcap
        22
    neoblackcap  
       2016-11-28 09:22:51 +08:00
    @q397064399
    @Allianzcortex
    哦你们这样划分的啊,我还一直以为后端是 backend ,也就是不跟用户交互的都是后端。不过在学习同步,异步,堵塞,非堵塞这个时候不接触到 epoll/select 这些 API 应该是比较难的吧, CSAPP 我是没看完, UNP 里面倒是会提到 select,这些 IO 复用机制必然是会提到啊。
    Java 对整体封装得比较好,但是了解一下底层的东西肯定是有加分的。毕竟公司又不是一直用 Java 。
    q397064399
        23
    q397064399  
       2016-11-28 09:51:14 +08:00
    @neoblackcap 不用 Java 难道拍簧片?
    q397064399
        24
    q397064399  
       2016-11-28 09:59:09 +08:00
    @neoblackcap
    除开游戏行业以及嵌入式行业有特殊需求外( Java 需要在 mina netty 等 tcp 网络框架下自己玩之外
    C++ C# 也有 tcp 网络框架)
    目前绝大部分应用开发 无论是企业应用还是商业软件 基本上都是 http 为主流了吧,
    移动 APP 基本上是 http ,自己写一套后台应用协议 估计还没上架 APP 公司就关门了
    ihuotui
        25
    ihuotui  
       2016-11-28 10:39:25 +08:00
    @neoblackcap 等你到了要别的语言再说吧, java 都没有学好,没有机会做别的。
    neoblackcap
        26
    neoblackcap  
       2016-11-28 10:56:40 +08:00   1
    @ihuotui
    @q397064399 公司业务不一样,我们这边有用 C ,有 lua ,有 Java ,有 Python 。我们组自然不用 Java ,但不代表公司不需要其他的。
    neoblackcap
        27
    neoblackcap  
       2016-11-28 10:59:33 +08:00
    @q397064399
    我们真的有用其他协议的,比如 mqtt,rtmp ,都是要基于这些东西搞研发的。还有 rpc 都是要考虑协议的,当然 rpc 就都是用其他库的了,不过我可以肯定我们用的不止 http
    jclin
        28
    jclin  
       2016-11-28 13:24:08 +08:00
    @depress 谢谢 了解了行情
    teemoer
        29
    teemoer  
       2016-11-29 00:58:44 +08:00
    打广告的机会又来了 java.sx 看完 差不多 就是 java 实习生的效果了哇
    teemoer
        30
    teemoer  
       2016-11-29 00:58:55 +08:00
    romennts
        31
    romennts  
       2016-12-13 19:35:26 +08:00 via Android
    这是我看过 V2EX 回复最厉害,最赞同的一次。以至于我不得不冒泡一下
    yxx278yxx
        32
    yxx278yxx  
       2016-12-15 18:35:27 +08:00
    可以的,展望 10k 的感觉要努力了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5164 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:37 PVG 15:37 LAX 23:37 JFK 02:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86