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

2016-11-26 21:03:47 +08:00
 binbinyouliiii

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

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

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

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

echo server 纯手写并发 10 对于会的人来说当然不难,但是其中要掌握 socket 编程,系统的 IO 复用机制(select, poll, epoll)或者是 thread/process ,还有理解了同步,非同步,堵塞,非堵塞。这些很多人都已经不知道在说什么了。
zjbztianya
2016-11-27 12:01:35 +08:00
@neoblackcap 怎么联系呢
aias
2016-11-27 12:04:46 +08:00
简单来说可以从计算基础、 Java 语言和生产用的框架来点技能。一般像样点的单位比较看重你的基础,不像样的上来就问框架。
neoblackcap
2016-11-27 12:06:58 +08:00
@zjbztianya 我的私人邮箱地址为 “ neo.blackcap 在 gmail.com ” 发送简历以及要面试什么什么岗位即可
我司现招聘前端工程师,后端工程师( Java, Python)。后端嘛其实什么都搞,我们最近是在搞 PaaS 平台,欢迎各位有兴趣的联系我。同时请注明你是否面试实习的岗位,毕竟薪酬不一样要求不一样。
zjbztianya
2016-11-27 12:15:17 +08:00
@neoblackcap 好的
fantastM
2016-11-27 13:22:42 +08:00
java 基础最重要,框架仅是其次。算法、操作系统、网络是加分项
q397064399
2016-11-27 14:21:05 +08:00
@neoblackcap 好的,尝试下
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
2016-11-27 21:50:17 +08:00
整洁代码之道 设计模式 单元测试 java

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/323529

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX