写在最后
作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。
最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
Java经典面试问题(含答案解析)
阿里巴巴技术笔试心得
[root@mysql ~]# yum -y install mariadb mariadb-server mariadb-libs mariadb-devel # 安装 mariadb 服务
[root@mysql ~]# systemctl start mariadb # 开启mariadb数据库
[root@mysql ~]# mysql_secure_installation # 数据库初始化设置
Enter current password for root (enter for none): # 直接回车
Set root password? [Y/n] y # 是否设置root密码
Remove anonymous users? [Y/n] n # 是否移除匿名用户
Disallow root login remotely? [Y/n] n # 是否不允许root远程登录
Remove test database and access to it? [Y/n] n # 是否移除测试数据库
Reload privilege tables now? [Y/n] y # 是否重载数据库表
[root@mysql ~]# mysql -uroot -p123123
MariaDB [(none)]> grant all on . to root@‘%’ identified by ‘123456’;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
192.168.1.2 上操作
1)安装 Nginx
[root@nginx_php ~]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
[root@nginx_php ~]# ls
anaconda-ks.cfg libmcrypt-2.5.7.tar.gz nginx-1.10.3.tar.gz php-5.6.36.tar.gz
[root@nginx_php ~]# tar xf nginx-1.10.3.tar.gz -C /usr/src/
[root@nginx_php ~]# cd /usr/src/nginx-1.10.3/
[root@nginx_php nginx-1.10.3]# useradd -s /sbin/nologin nginx
[root@nginx_php nginx-1.10.3]# ./configure \
–prefix=/usr/local/nginx \
–with-http_dav_module \
–with-http_stub_status_module \
–with-http_addition_module \
–with-http_sub_module \
–with-http_flv_module \
–with-http_mp4_module \
–with-pcre \
–with-http_ssl_module \
–with-http_gzip_static_module \
–user=nginx --group=nginx && make && make install
创建软链接优化执行路径
[root@nginx_php nginx-1.10.3]# cd
[root@nginx_php ~]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/
2)安装 PHP
[root@nginx_php ~]# yum -y install make apr* autoconf automake curl-devel gcc gcc-c++ openssl openssl-devel gd kernel keyutils patch perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* libtool* libxml2 libxml2-devel patch libcurl-devel bzip2-devel freetype-devel
[root@nginx_php ~]# tar zxf libmcrypt-2.5.7.tar.gz -C /usr/src/
[root@nginx_php ~]# cd /usr/src/libmcrypt-2.5.7/
[root@nginx_php libmcrypt-2.5.7]# ./configure \
–prefix=/usr/local/libmcrypt && make && make install
[root@nginx_php libmcrypt-2.5.7]# cd
[root@nginx_php ~]# tar zxf php-5.6.36.tar.gz -C /usr/src/
[root@nginx_php ~]# cd /usr/src/php-5.6.36/
[root@nginx_php php-5.6.36]# ./configure \
–prefix=/usr/local/php5.6 \
–with-config-file-path=/etc \
–with-mysql=mysqlnd \
–with-pdo-mysql=mysqlnd \
–with-mysqli=mysqlnd \
–with-gd \
–with-iconv \
–with-libxml-dir=/usr \
–with-mhash \
–with-mcrypt \
–with-config-file-scan-dir=/etc/php.d \
–with-bz2 \
–with-zlib \
–with-freetype-dir \
–with-png-dir \
–with-jpeg-dir \
–enable-xml \
–enable-bcmath \
–enable-shmop \
–enable-sysvsem \
–enable-inline-optimization \
–enable-mbregex \
–enable-fpm \
–enable-mbstring \
–enable-ftp \
–enable-gd-native-ttf \
–with-openssl \
–enable-pcntl \
–enable-sockets \
–with-xmlrpc \
–enable-zip \
–enable-soap \
–without-pear \
–with-gettext \
–enable-session \
–with-mcrypt=/usr/local/libmcrypt \
–with-curl
[root@nginx_php php-5.6.36]# make && make install
[root@nginx_php php-5.6.36]# cp php.ini-production /etc/php.ini
[root@nginx_php php-5.6.36]# vim /etc/php.ini
修改:
202 short_open_tag = On # 支持短标签
363 expose_php = Off # 禁止显示 PHP 版本
372 max_execution_time = 300 # PHP 脚本最大执行时间
382 max_input_time = 300 # 以秒为单位对通过 POST | GET 以及 PUT 方式接收数据进行限制
660 post_max_size = 16M # 上传文件大小限制
702 always_populate_raw_post_data = -1
936 date.timezone = Asia/Shanghai # 时区设置为上海
1811 mbstring.func_overload = 0
[root@nginx_php php-5.6.36]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm # 复制启动脚本
[root@nginx_php php-5.6.36]# chmod +x /etc/init.d/php-fpm # 添加可执行权限
[root@nginx_php php-5.6.36]# chkconfig --add php-fpm # 添加为系统服务
[root@nginx_php php-5.6.36]# cd
[root@nginx_php ~]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@nginx_php ~]# vim /usr/local/php5.6/etc/php-fpm.conf
25 pid = run/php-fpm.pid # PHP 进程位置
149 user = nginx # 运行用户
150 group = nginx # 运行组
164 listen = 127.0.0.1:9000 # PHP 监听 IP 和端口
241 pm.max_children = 300 # 子进程最大数
246 pm.start_servers = 10 # 启动时的进程数
251 pm.min_spare_servers = 10 # 保证空闲进程数最小值. 如果空闲进程小于此值. 则创建新的子进程
256 pm.max_spare_servers = 50 # 保证空闲进程数最大值. 如果空闲进程大于此值. 则进行清理
[root@nginx_php ~]# /etc/init.d/php-fpm start # 开启 PHP 服务
[root@nginx_php ~]# netstat -anpt | grep php-fpm # 查看端口是否开启
让 Nginx 支持 PHP
[root@nginx_php ~]# cd /usr/local/nginx/conf/
[root@nginx_php conf]# rm -rf nginx.conf
[root@nginx_php conf]# vim nginx.conf
user nginx;
worker_processes 4;
error_log logs/error.log;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “$request” ’
'$status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer" ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root html;
index index.php index.html index.htm;
}
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@nginx_php conf]# nginx -t # 检查 Nginx 主配置文件是否正确
[root@nginx_php conf]# nginx # 启动
[root@nginx_php conf]# netstat -anpt | grep 80 # 查看端口是否开启
[root@nginx_php ~]# vim /usr/local/nginx/html/test1.php
<?php phpinfo() ?>[root@nginx_php ~]# vim /usr/local/nginx/html/test2.php
<?php $link=mysqli_connect('192.168.1.3','root','123456'); if($link) echo "恭喜你,数据库连接成功了!!"; mysqli_close($link); ?>===================================================================================
[root@mysql ~]# mysql -u root -p123123
MariaDB [(none)]> create database zabbix character set utf8;
MariaDB [(none)]> grant all on zabbix.* to zabbix@‘192.168.1.%’ identified by ‘zabbix’;
MariaDB [(none)]> grant all on zabbix.* to zabbix@localhost identified by ‘zabbix’;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
[root@mysql ~]# ls
anaconda-ks.cfg zabbix-4.2.6.tar.gz
[root@mysql ~]# tar zxf zabbix-4.2.6.tar.gz -C /usr/src/
[root@mysql ~]# cd /usr/src/zabbix-4.2.6/
[root@mysql zabbix-4.2.6]# mysql -uzabbix -pzabbix zabbix < database/mysql/schema.sql
[root@mysql zabbix-4.2.6]# mysql -uzabbix -pzabbix zabbix < database/mysql/images.sql
[root@mysql zabbix-4.2.6]# mysql -uzabbix -pzabbix zabbix < database/mysql/data.sql
[root@zabbix ~]# yum -y install createrepo
[root@zabbix ~]# ls
anaconda-ks.cfg zabbix-4.2.6.tar.gz zabbix_rpm.tar.gz
[root@zabbix ~]# tar zxf zabbix_rpm.tar.gz -C /mnt
[root@zabbix ~]# createrepo /mnt/zabbix_rpm
[root@zabbix ~]# cat < /etc/yum.repos.d/zabbix.repo
[zabbix]
name=zabbix
baseurl=file:///mnt/zabbix_rpm
enabled=1
gpgcheck=0
END
总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。
Mybatis源码解析
g-blog.csdnimg.cn/20201219212346254.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjkwMjM5Ng==,size_16,color_FFFFFF,t_70)
总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。
Mybatis源码解析
[外链图片转存中…(img-leL9TUbj-1715104166364)]
[外链图片转存中…(img-wwqhZ40i-1715104166364)]