linux 编译安装TRMPdump(libRTMP)

需要编译libRTMP,首先需要安装配置编译环境。网上能够找到的资料多是在Windows环境编译。这里介绍一下在Linux系统中编译安装libRTMP,一来给后来者一个参考,二来也给自己做一个备忘录。 编译libRTMP之前,需要安装下面三个软件:openssl , zlib, libssl-dev (一)openssl安装 这里需要特别的注意:openssl 版本不能太高,太高有些接口与libRTMP 的接口不一样,会导致libRTMP编译不能通过。我这里安装的是openssl-1.0.1f。 1、下载地址:http://www.openssl.org/source/ 下一个新版本的OpenSSL,我下的版本是:openssl-1.0.1f 2、在下载的GZ目录中,用命令执行:tar -xvf openssl-1.0.1f.tar.gz 3、进入解压的目录:openssl-1.0.1f […….]#cd openssl-1.0.1f 4、[…..openssl-1.0.1f]# ./config –prefix=/usr/local/openssl 5[…../openssl-1.0.1f]# ./config -t 6[…../openssl-1.0.1f]# make depend 7[…../openssl-1.0.1f]# cd /usr/local 8/usr/local]# ln -s openssl ssl 9 […../openssl-1.0.1f]#sudo make install 10在/etc/ld.so.conf文件的最后面,添加如下内容: /usr/local/openssl/lib 11…]# ldconfig 12添加OPESSL的环境变量: 在etc/的profile的最后一行,添加: export OPENSSL=/usr/local/openssl/bin export PATH= OPENSSL: O P E N S S L : PATH:$HOME/bin 13退出命令界面,再从新登录。 14、以上OPENSSL就安装完毕,下面进行一些检查。 15依次如下执行: [root@localhost /]# cd /usr/local [root@localhost local]# ldd /usr/local/openssl/bin/openssl

(验证文件)validateJarFile...报错

报错:validateJarFile(E:\.metadata\.me_tcat\webapps\NBA\WEB-INF\lib\servlet-api.jar) - jar not loaded. 这个问题的原因是是webapp中WEB-INFO/lib下,有重复的servlet包。将servlet包从webapp的部署文件中删除以后。再启动,错误信息就消失了。

linux系统文件系统层次结构标准(Filesystem Hierarchy Standard)英文版

Filesystem Hierarchy Standard Filesystem Hierarchy Standard Group Edited by Rusty Russell Daniel Quinlan Christopher Yeoh Copyright ?1994-2004 Daniel Quinlan Copyright ?2001-2004 Paul 'Rusty' Russell Copyright ?2003-2004 Christopher Yeoh This standard consists of a set of requirements and guidelines for file and directory placement under UNIX-like operating systems. The guidelines are intended to support interoperability of applications, system administration tools, development tools, and scripts as well as greater uniformity of

OK6410开发板 Android系统开发(3)编译错误:Could not load 'clearsilver-jni'

系统采用的64bit的Ubuntu12.04,jdk是系统默认的1.6版本 按照OK6410的文档做了一下修改 external/clearsilver/cgi/Android.mk, external/clearsilver/java-jni/Android.mk external/clearsilver/util/Android.mk external/clearsilver/cs/Android.mk 这四个makefile中的如变为: LOCAL_CFLAGS += -m64 LOCAL_LDFLAGS += -m64 # LOCAL_CFLAGS += -m32 # LOCAL_LDFLAGS += -m32 之后按照文档输入命令:./build-android 结果出现了 Could not load 'clearsilver-jni' 然后再make clean一下,还是同样问题, 最后看了一眼编译脚本发现了版本问题,也懒得调了,所以在调整完所有配置后,直接“make V=s”就好,别用官方脚本

MyBatis环境搭建

MyBatis环境搭建 1. MyBatis框架简介 MyBatis是一个开源的数据持久层框架。它内部封装 了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改 SQL。 MyBatis的前身是iBais, 本是Apache 的一个开源项目,2010 年这个项目由Apache SotweFoundation迁移到了Google Code, 并改名为MyBais。2013 年迁移到Github。 MyBatis官网: http://mybatis.org。 Github: https://github.com/mybatis。 2. 项目搭建 开发环境: IDEA Maven Web项目 3. 部署jar包 MyBatis的官方网站是http://mybatis.org,可以下载到最新版本的MyBatis,其他Release版本的MyBatis的jar文件都可以从官方网站下载得到。 目前 MyBatis官网在国内访问受限,若能访问到官网, 则官网的所有下载链接全部引导到 github上(https://github.com/mybatis/mybatis-3/releases),推荐下载mybatis-3.2.2.zip和mybatis-3-mybatis-3.2.2.zip(通过相应版本的“Source Code(zip)” 链接下载)。 4. 编写MySatis核心配置文件 在mybatis-config.xml文件中编写以下代码: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 通过这个配置文件完成mybatis与数据库的连接 --> <configuration> <!-- 引入数据源配置 database.properties 文件 --> <properties resource="database.properties"></properties> <!--配置mybatis 运行中的一些行为 --> <settings> <!-- 设置Mybatis的log实现为LOG4J --> <setting name="logImpl" value="LOG4J"/> </settings> <typeAliases> <!

从http 414(Request-URI Too Long)说起------RFC并未限制URL的长度

在一些服务器中, 如果url过长, 会产生414错误(依赖于具体实现)。 也有很多人认为,get参数有长度限制, post没有限制。对吗? 显然不对。 实际上, RFC并未规定url长度, 只是浏览器和服务器实现的时候, 对url的长度加了限制而已。 来看看: The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.

vector的迭代器遍历

vector的迭代器遍历: #include <iostream> #include <vector> using namespace std; // vector容器遍历方式2 —— 迭代器遍历 void traverseVector_2(vector<int> v) { // 注:如果参数为const vector<int> 需要用const_iterator vector<int>::iterator it = v.begin(); // vector<int>::const_iterator iter=v.begin(); for(; it != v.end(); ++it) { cout<<(*it)<<" "; } cout<<endl; }

element table(任意td改变背景颜色cell-class-name)

<el-table class='mt10' type="selection" :data="tableData" border ref="dataTable" :cell-class-name="rowClass"> rowClass ({ row, column, rowIndex, columnIndex }) { if (rowIndex === 5 && columnIndex === 4) { return 'rgb196' } else if (rowIndex === 6 && columnIndex === 4) { return 'bacColorf4984e' } else if (rowIndex === 6 && columnIndex === 5) { return 'bacColor317eb0' } } .rgb196{ background: rgb(196,196,196); } .bacColor317eb0{ background: #317eb0; } .bacColorf4984e{ background: #f4984e; }

volatile为什么不能保证原子性

首先要了解的是,volatile可以保证可见性和顺序性,这些都很好理解,那么它为什么不能保证原子性呢? 可见性 可见性与Java的内存模型有关,模型采用缓存与主存的方式对变量进行操作,也就是说,每个线程都有自己的缓存空间,对变量的操作都是在缓存中进行的,之后再将修改后的值返回到主存中,这就带来了问题,有可能一个线程在将共享变量修改后,还没有来的及将缓存中的变量返回给主存中,另外一个线程就对共享变量进行修改,那么这个线程拿到的值是主存中未被修改的值,这就是可见性的问题。 volatile很好的保证了变量的可见性,变量经过volatile修饰后,对此变量进行写操作时,汇编指令中会有一个LOCK前缀指令,这个不需要过多了解,但是加了这个指令后,会引发两件事情: 将当前处理器缓存行的数据写回到系统内存这个写回内存的操作会使得在其他处理器缓存了该内存地址无效 什么意思呢?意思就是说当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值,这就保证了可见性。 原子性 问题来了,既然它可以保证修改的值立即能更新到主存,其他线程也会捕捉到被修改后的值,那么为什么不能保证原子性呢? 首先需要了解的是,Java中只有对基本类型变量的赋值和读取是原子操作,如i = 1的赋值操作,但是像j = i或者i++这样的操作都不是原子操作,因为他们都进行了多次原子操作,比如先读取i的值,再将i的值赋值给j,两个原子操作加起来就不是原子操作了。 所以,如果一个变量被volatile修饰了,那么肯定可以保证每次读取这个变量值的时候得到的值是最新的,但是一旦需要对变量进行自增这样的非原子操作,就不会保证这个变量的原子性了。 举个栗子 一个变量i被volatile修饰,两个线程想对这个变量修改,都对其进行自增操作也就是i++,i++的过程可以分为三步,首先获取i的值,其次对i的值进行加1,最后将得到的新值写会到缓存中。 线程A首先得到了i的初始值100,但是还没来得及修改,就阻塞了,这时线程B开始了,它也得到了i的值,由于i的值未被修改,即使是被volatile修饰,主存的变量还没变化,那么线程B得到的值也是100,之后对其进行加1操作,得到101后,将新值写入到缓存中,再刷入主存中。根据可见性的原则,这个主存的值可以被其他线程可见。 问题来了,线程A已经读取到了i的值为100,也就是说读取的这个原子操作已经结束了,所以这个可见性来的有点晚,线程A阻塞结束后,继续将100这个值加1,得到101,再将值写到缓存,最后刷入主存,所以即便是volatile具有可见性,也不能保证对它修饰的变量具有原子性。

JAVA实现判断一个字符串通过在任意位置添加任意字符是否回文串

问题描述: 给定一个字符串,通过在该字符串的任意位置,添加任意的字符,判断是否是回文串。 如给定字符串“AB”,则通过添加字符可变成“ABA”。符合回文串,返回“Yes”,否则返回“No”; 实现思路: 通过在原字符串的任意位置上,添加新的字符,然后判断新字符是否是回文串。判断过程中,如果遍历到的是新加的字符,则直接跳过。即新添加的字符匹配任何字符。 JAVA实现: private String judgeStr(String str) { String result = "No"; int length = str.length(); String newStr = ""; boolean flag = true; for(int i=0;i<=length;i++) { //构建在任意位置插入任意字符的新字符串,判断新字符串是否是回文串 flag = true; if(i==0) { newStr = " ".concat(str); }else if(i==length) { newStr = str.concat(" "); }else { String temEndStr = str.substring(i); String temStartStr = str.substring(0,i); newStr = temStartStr+" "+temEndStr; } //(newStr.length()-1)/2 防止下标越界 for(int j=0;j<=(newStr.length()-1)/2;j++) { //如果加的字符在整个字符串的左侧,则直接跳过 if(newStr.substring(i,i+1).equals(" "

HDU 6313 Hack It(数论构造)

题目链接 Hack It Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 721 Accepted Submission(s): 236 Special Judge Problem Description Tonyfang is a clever student. The teacher is teaching he and other students "bao'sou". The teacher drew an n*n matrix with zero or one filled in every grid, he wanted to judge if there is a rectangle with 1 filled in each of 4 corners. He wrote the following pseudocode and claim it runs in O(n2):

Android Edittext 关掉软键盘自动弹出

在开发中,遇见了在这样的需求,打开一个页面有一个EditText,进入都还没加载利索就自动打开了软键盘,不能够第一眼看到整个页面的设计,感觉很不友好,需要将软键盘的自动打开关掉。 法1.网上有个教程是让EditText失去焦点,代码如下,反正我试了试,该弹还是弹出来了,没有效果。 EditText edit = (EditText)findViewById(R.id.edit); edit.clearFocus(); 法2.还有一个是在Manifest.xml文件中进行修改,隐藏小键盘。加入如下代码:并不推荐。 android:windowSoftInputMode=”stateHidden” 不过每个页面可能会有不同的需求,最好是单独进行配置,因为说不定你在另一个场景下又有了截然相反的需求。 法3.故而在当前页面添加如下代码:墙裂推荐,有效 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 亲测有效哦。

常见的HTTP状态码

本内容摘抄自RESTful WebServices 中文译本附录B '42种常见的HTTP响应代码'。 原文作者:Leonard Ricbardson & Sam Ruby 翻译:徐涵、李红军、胡伟 1、三至七种最基本的响应代码 200("OK") 一切正常。实体主体中的文档(若存在的话)是某资源的表示。 500("Bad Request") 客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。 500("Internal Server Error") 服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。 301("Moved Permanently") 当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。 404("Not Found") 和410("Gone") 当客户端所请求的URI不对应于任何资源时,发送此响应代码。404用于服务器端不知道客户端要请求哪个资源的情况;410用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况。 409("Conflict") 当客户端试图执行一个”会导致一个或多个资源处于不一致状态“的操作时,发送此响应代码。 SOAP Web服务只使用响应代码200("OK")和500("Internal Server Error")。无论是你发给SOAP服务器的数据有问题,还是服务器在处理数据的过程中出现问题,或者SOAP服务器出现内部问题,SOAP服务器均发送500("Internal Server Error")。客户端只有查看SOAP文档主体(body)(其中包含错误的描述)才能获知错误原因。客户端无法仅靠读取响应的前三个字节得知请求成功与否。 2、状态码系列。 1XX:通知 1XX系列响应代码仅在与HTTP服务器沟通时使用。 100("Continue") 重要程度:中等,但(写操作时)很少用。 这是对HTTP LBYL(look-before-you-leap)请求的一个可能的响应。该响应代码表明:客户端应重新发送初始请求,并在请求中附上第一次请求时未提供的(可能很大或者包含敏感信息的)表示。客户端这次发送的请求不会被拒绝。对LBYL请求的另一个可能的响应是417("Expectation Failed")。 请求报头:要做一个LBYL请求,客户端必须把Expect请求报头设为字符串"100-continue"。除此以外,客户端还需要设置其他一些报头,服务器将根据这些报头决定是响应100还是417。 101("Switching Protocols") 重要程度:非常低。 当客户端通过在请求里使用Upgrade报头,以通知服务器它想改用除HTTP协议之外的其他协议时,客户端将获得此响应代码。101响应代码表示“行,我现在改用另一个协议了”。通常HTTP客户端会在收到服务器发来的101响应后关闭与服务器的TCP连接。101响应代码意味着,该客户端不再是一个HTTP客户端,而将成为另一种客户端。 尽管可以通过Upgrade报头从HTTP切换到HTTPS,或者从HTTP1.1切换到某个未来的版本,但实际使用Upgrade报头的情况比较少。Upgrade报头也可用于HTTP切换到一个完全不同的协议(如IRC)上,但那需要在Web服务器切换为一个IRC服务器的同时,Web客户端切换为一个IRC的客户端,因为服务器将立刻在同一个TCP连接上开始使用新的协议。 请求报头:客户端把Upgrade报头设置为一组希望使用的协议。 响应报头:如果服务器同意切换协议,它就返回一个Upgrade报头,说明它将切换到那个协议,并附上一个空白行。服务器不用关闭TCP链接,而是直接在该TCP连接上开始使用新的协议。 2XX: 成功 2XX系列响应代码表明操作成功了。 200("OK") 重要程度:非常高。 一般来说,这是客户端希望看到的响应代码。它表示服务器成功执行了客户端所请求的动作,并且在2XX系列里没有其他更适合的响应代码了。 实体主体:对于GET请求,服务器应返回客户端所请求资源的一个表示。对于其他请求,服务器应返回当前所选资源的一个表示,或者刚刚执行的动作的一个描述。 -201("Created") 重要程度:高。 当服务器依照客户端的请求创建了一个新资源时,发送此响应代码。 响应报头:Location报头应包含指向新创建资源的规范URI。 实体主体:应该给出新创建资源的描述与链接。若已经在Location报头里给出了新资源的URI,那么可以用新资源的一个表示作为实体主体。 -202("Accepted") 重要程度:中等。 客户端的请求无法或将不被实时处理。请求稍后会被处理。请求看上去是合法的,但在实际处理它时有出现问题的可能。 若一个请求触发了一个异步操作,或者一个需要现实世界参与的动作,或者一个需要很长时间才能完成且没必要让Web客户端一直等待的动作时,这个相应代码是一个合适的选择。 响应报头:应该把未处理完的请求暴露为一个资源,以便客户端稍后查询其状态。Location报头可以包含指向该资源的URI。 实体主体:若无法让客户端稍后查询请求的状态,那么至少应该提供一个关于何时能处理该请求的估计。

插入字符判断是否构成回文串(三种方法)

题目:给定一个字符串,问是否能通过添加一个字母将其变为回文串。 提要:所有代码皆为C++语言。 看到题,首先想到如何判断回文串 注:回文串添加或删除指定字符一定还是回文串。 对于一个字符串,从左右两端开始,以此判断,直到读取超出字符串中间。 代码如下: #include<iostream> #include<string.h> using namespace std; bool JudgeReverseString(char *str) { //对比对应位置字符是否相同 int len = strlen(str); for (int i = 0; i < len/2; ++i) { if (str[i] != str[len - i - 1]) return false; } return true; } int main() { char *str = (char*)malloc(100); memset(str, 0, 10); cin >> str; bool result = JudgeReverseString(str); if(result==true) cout<<"Yes!"; else cout<<"No!"; } 方法一(不建议,因为时间复杂度为O(n^2)) 一个字符串既然能插入对应字符构成回文串,那么删掉与之对应的字符,也一定能构成回文串。 #include<iostream> #include<string.

static关键字能修饰什么

static关键字是Java中常用的关键字之一,可能最常用的就是修饰变量和方法了,但是仅仅知道这些还远远不够。问题虽然很小,但是却反映了对Java的了解程度。 static修饰变量和方法 static可以修饰变量,这个变量属于类本身,不需要创建实例就可以直接获取到值。static可以修饰方法,这个方法属于类本身,同样,不要创建实例就可以通过类调用。 需要了解的是,static修饰的变量或方法属于类的静态资源,是所有实例共享的,另外静态方法内部是不能访问非静态方法的,因为静态资源是在类加载的时候就建立好的,而类加载时非静态方法需要类new的时候才能创建,一前一后的顺序所以导致了Java静态方法不能访问非静态资源的结果,当然反之肯定是可以的了。 static修饰代码块 static修饰的代码块是静态代码块,也具有静态的特点,属于类本身,在加载时只需要加载一次,也就是说,如果加载过这个代码块,就不会再加载了。 static修饰类 static修饰类只有一种情况,那就是这个类属于静态内部类,接触过Android开发的话可能遇见过很多这样的静态内部类,如WindowManager.LayoutParams类,LayoutParams就是WindowManager类下的静态内部类,它的源码如下所示: public interface WindowManager extends ViewManager { public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable { //内部实现 } } import static 这个算是比较冷门的,但是知识不怕多,import static是JDK1.5之后的新特性,这两个关键字连用可以指定导入某个类中的指定静态资源。 import static java.lang.Math.*; 2 3 public class A 4 { 5 public static void main(String[] args) 6 { 7 System.out.println(sin(2.2)); 8 } 9 } 不需要再加Math.sin()的Math了,还是很方便的,但是可读性不高,不建议这样写。

Win10开热点

一、校园网下win10开启热点 我们会发现开不了热点,在网络和Internet设置-->移动热点中看到这样的错误提示:我们无法设置移动热点,因为你的电脑未建立以太网,WIFI或手机网络连接。出现这个错误是因为我们用的是拨号上网。 解决办法: ①首先用手机或其他设备建立无线热点 ②电脑连接步骤①中的热点,电脑打开热点 ③电脑建立拨号上网连接,断开步骤②连接的无线热点 ④电脑进入更改适配器选项界面,将拨号上网的网络设备共享给步骤②建立的热点(右键设备-->属性-->共享-->把第一个方框勾选了,选步骤②建立的热点的网络设备) 注意: ⑴热点的名称不能是中文,否则将失败 ⑵校园网的热点有的只能维持10几分钟(想再开热点,得把4个步骤都重新走一遍),有的可以一直可以用 ⑶WLAN必须打开 ⑷一般情况下,Mifcrosoft Wi-Fi Direct Virtual Adapter [#数字]设备在热点开了的情况下,才会出现。 二、网络适配器设备 计算机管理-->设备管理器-->网络适配器-->(工具栏上的查看-->显示隐藏的设备) Mifcrosoft Wi-Fi Direct Virtual Adapter [#数字]:跟移动热点有关的设备 Intel(R) Dual Band Wireless-AC 8265:跟无线网有关的设备 Realtek USB GbE Family Controller:跟插网线有关(以太网)的设备 WAN Miniport(PPPOE):拨号上网的设备 三、如果在非拨号上网的条件下,win10自带的移动热点使用不了 首先,要开热点,WLAN必须打开。 其次,看看Mifcrosoft Wi-Fi Direct Virtual Adapter [#数字]设备有没有问题(右键设备-->常规-->设备状态),如果是因为没有启用,启用一下就可以了。否则按以下步骤: ① ② ③ ④

Android This view is not constrained, it only has designtime positions 解决办法(不同版本AS)

在Android studio中使用ConstraintLayout布局时,再次使用其他的控件时,会报异常,控件下有红色的波浪线,问题是View没有被约束,需要添加约束。 这个时候要注意的是, 当你的AS版本是3.X以前的版本时,可以打开预览界面,点击design(设计界面),右键布局,选择infer Constraints,点击后解决问题。 当你的AS是3.X以上的版本时,你的预览界面右键 找不到Constraint Layout按钮 这时候把视线转向设计预览界面,找到 “小魔法棒”的图标 将光标放在有问题的控件处,点击魔法棒,问题解决,红色波浪线消失。 解决后看到XML文件中自动补齐了很多代码,我改正错误后忘记了截图,后来删掉这些代码发现并没有报错,找个网上的图,与之类似,如下

对内涵段子正则的提取

内涵段子正则爬取: """ 内涵段子爬虫 https://www.neihan8.com/article/index.html """ from urllib import request,parse from urllib import error import chardet from lxml import etree import csv,string,re import csv def neihanba(url,beginPage, endPage): for page in range(beginPage, endPage): pn = page if pn <= 1: fullurl = url + "index.html" else: fullurl = url + "index_%s"%pn + ".html" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"} req = request.Request(fullurl, headers=headers) try: response = request.

ClassLoader中的loadClass和findClass方法

Java中ClassLoader的具体实现 Java虚拟机的类加载器本身可以满足加载的要求,但是也允许开发者自定义类加载器。 jdk中classloader中loadclass方法的实现如下所示: protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { // First, check if the class has already been loaded //查找.class是否被加载过 Class<?> c = findLoadedClass(name); if (c == null) { long t0 = System.nanoTime(); try { //查看父加载器有没有加载过 if (parent != null) { c = parent.loadClass(name, false); } else { //还没找到的话查找根加载器,这里就是双亲委派模型的实现 c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // ClassNotFoundException thrown if class not found // from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class.

收到美企第一份offer,分享经历

前言 我所在的地方是个美国的小城市,软件工程师的岗位并不像大城市哪么的多,美国软件岗最多的肯定是湾区哪边。本文介绍下我这几个月的经历和心路历程,希望能给大家一点启发。 经历 我是今年到美国的,然后6月开始广投简历,投了很多纽约,芝加哥的岗位,主要是想多增加面试经验。前前后后大概投了70多份简历,过了一个月都一直没有收到面试通知,哪期间是很怀疑人生的,后来才发现他们是因为处理速度比国内慢(这个。。。真的深有体会。。。IT 行业的已经算美国这边招聘中速度很快的了,其他行业的平均招聘速度估摸着3个月左右,有朋友找工作期6个月的)。所以,如果是应届生想找工作,一定要提前找哦,别到签证快到期了着急到处投。到7月份,所有之前投的公司开始陆续来电话了,约笔试约面试。很多都是印籍 HR 招聘,他们一般就会找你要要基本信息,然后谈一下薪资。由于,我重点面了几个我想去的公司,其他的公司就没有怎么上心。如果是像我这样的情况,刚入前端坑的,估计很多情况下都会是印籍的HR外包公司面试,然后推荐给合适的公司。 谈谈感受 谈谈印度外包公司和美企应聘流程的感受吧。印度的外包公司他们的简历处理速度是非常快的,有利有弊吧,如果是想以低薪快速找到工作的出发点,外包公司还是可以考虑的。我的整个感觉是他们的招聘流程咋咋唬唬的,一般都电话过来问问基本情况,然后就给你一封邮件按照他们的格式回复邮件,然后等有企业对你感兴趣就联系面试。 划重点: 印度公司面试的重点在你能不能干活儿~~ 我的几个面试中,印度公司一本面得是面面俱到,HTML,CSS, JS, 框架 由浅入深地问。我列举几个我还能记住的问题,比如: CSS: 谈谈你什么时候用 padding,什么时候用 margin HTML: Form 表单如果用了两个 Submit 会有什么效果 JS: 谈一下你对闭包的理解,以及什么时候用闭包 谈一下你对 prototype 的理解,以及什么时候用 React: 谈一下你什么时候用 Redux 谈一下你状态管理的时候是怎么规划的 这里只是简单地列举了几个问题,实际上总共的面试大概有1个多小时,问得非常非常的细致,我面试的时候经常说完不知道是不是他想要的答案。比如哪个padding,margin问题,我先解释了一下padding,margin的概念,然后说了下我平时能用padding解决的问题就不用margin,以及用margin时候的注意事项。整个面试过程,会一直感觉他们是在judge,当然这也是很多公司的面试流程就是judge呀,看各个方面准备得肿么样了。 美企应聘流程 先是电话面试,谈谈基本的工作经验和之前所做的项目。然后公司发面试邀请,由于该公司是在本地所以是直接去的公司内部面试。先是跟公司的管理层面,谈了下产品和我的基本情况(这部分内容,我的专栏另一篇有介绍,就不重复说了)。然后是技术面,技术面试主要就是问 js, 但是也不是细致的问,重点就是谈谈思路,主要就谈谈平时工作的时候遇到问题时的解决思路。还有就是问问平时用了些什么库,谈了谈性能调优的看法,平时关注哪些技术网站,整个过程是聊天形式的。感觉整个的面试流程很轻松,也不会因为你某个知识点卡了就全盘否定你的其他能力。谈了谈业余爱好和未来规划,不过都是自然而然聊过去的。然后面试结束,HR 带着简单参观了整个公司。 划重点:感觉美企更注重思想,性格和未来发展 最终,美企给下发 offer 了,本文重点也是给大家聊聊整个发 offer 的流程和细节 招聘流程 1)电话面试 2)公司面试 3)背景调查 会填一下身份信息,查询在美的状态 性格测试,美企貌似都有这个 背景调查(这个会让填写几个以前工作岗位的同事,做一下背景调查,所以简历里面千万不要有不实的内容哦,非常感谢愿意帮我做背调的前同事们!!!) 4)人力主管谈 offer 细节 5) 下发offer offer 内容 薪资 我谈谈offer的内容吧,出于隐私我就不谈具体的薪资水准了。由于我在的地方是小地方,这边的消费其实没有很高,对比北上广,平均消费跟北上广差不多吧,某些东西甚至会更便宜。所以薪资对比北上广的大牛们来说的话,给我的薪资对于他们来说肯定是木有吸引力的。对比我这个等级的小白来说,薪资给的挺合理的。给的薪资是印度外包给湾区的薪资(所以知道印度外包多压榨了吧~~我还遇到过一个印度外包问我数据库,服务端设计的,打着招前端想招全栈?面试途中听到旁边另一个HR在笑,挺不尊重人的,我也只是意思意思地面面,我都十分礼貌地认真回答每个问题,况且是他们并没有按剖出来的工作岗位面试,下次遇到这样的我一定会直接说的,不惯这样的)。 福利 401k 医疗保险(还有眼科和牙科保险,保得挺全的) 意外保险 健身娱乐设施(公司内部有健身房和咖啡厅) 停车位补贴(哈哈,这个我没见过,所以觉得好玩儿) 期权(期权不是直接给是认购形式的,岗位不同认购期权的股份不同,给我的是约2-3万美金的认购股份,4年以上才能进行股份操作,貌似说期间可以离职,股份仍然有效) 其他