ibm Bolt多ip服务器跑分

小红书shield解密-unidbg方式
version : xhs69.70181
jadx反编译后:
多ip服务器的调用顺序是 initializeNative > initialize > intercept
多ip服务器中大量使用了JNIibm,JNItrace会大大减轻这部分我们的工作量,忘了说了,JNItrace是跑分基于Frida框架的Hook jniibm的库,
jnitrace -l libbili.so tv.danmaku.bili –ignore-vm
1

直接将每个多ip服务器的偏移地址搞过来。
模板需要修改的地方: unidbg – 》 getStaticObjectField ibm填写你的手机deviceId
@Override
public DvmObject getStaticObjectField(BaseVM vm, DvmClass dvmClass, String signature) {
switch (signature){
case “com/xingin/shield/http/ContextHolder->sLogger:Lcom/xingin/shield/http/ShieldLogger;”:{
return vm.resolveClass(“com/xingin/shield/http/ShieldLogger”).newObject(signature);
}
case “com/xingin/shield/http/ContextHolder->sDeviceId:Ljava/lang/String;”:{
return new StringObject(vm, “81e30ab8-2b81-33dd-8435-f9404554b4b5”);
}
}
return super.getStaticObjectField(vm, dvmClass, signature);
}
123456789101112
unidbg – 》 callObjectMethodVibm填写你的小红书路径下s.xml里的值:
或者在抓包响应头中: 查找xy-ter-str
hmac 结果都是在,响应头里,所以 hmac 是服务器下发给客户端的.
@Override
public DvmObject callObjectMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {
switch (signature) {
case “android/content/Context->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;”:
return vm.resolveClass(“android/content/SharedPreferences”).newObject(vaList.getObjectArg(0));
case “android/content/SharedPreferences->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;”: {
if(((StringObject) dvmObject.getValue()).getValue().equals(“s”)){
System.out.println(“getString :”+vaList.getObjectArg(0).getValue());
if (vaList.getObjectArg(0).getValue().equals(“main”)) {
return new StringObject(vm, “”);
}
if(vaList.getObjectArg(0).getValue().equals(“main_hmac”)){
return new StringObject(vm, “a9+xPqTwWr7ua8QlDuTyLjvNTAszAxbIhBWeugeCNpcorLQJTUiH6JbLFDrW1cypknldr7izHSeoGQ1HzB6VAVu7iMG6FU1+bEt7/e+9cx6LmeDCOKSapcI9elpXr9ba”);
}
}
}
case “okhttp3/Interceptor$Chain->request()Lokhttp3/Request;”: {
DvmClass clazz = vm.resolveClass(“okhttp3/Request”);
return clazz.newObject(request);
}
case “okhttp3/Request->url()Lokhttp3/HttpUrl;”: {
DvmClass clazz = vm.resolveClass(“okhttp3/HttpUrl”);
Request request = (Request) dvmObject.getValue();
return clazz.newObject(request.url());
}
case “okhttp3/HttpUrl->encodedPath()Ljava/lang/String;”: {
HttpUrl httpUrl = (HttpUrl) dvmObject.getValue();
return new StringObject(vm, httpUrl.encodedPath());
}
case “okhttp3/HttpUrl->encodedQuery()Ljava/lang/String;”: {
HttpUrl httpUrl = (HttpUrl) dvmObject.getValue();
return new StringObject(vm, httpUrl.encodedQuery());
}
case “okhttp3/Request->body()Lokhttp3/RequestBody;”: {
Request request = (Request) dvmObject.getValue();
return vm.resolveClass(“okhttp3/RequestBody”).newObject(request.body());
}
case “okhttp3/Request->headers()Lokhttp3/Headers;”: {
Request request = (Request) dvmObject.getValue();
return vm.resolveClass(“okhttp3/Headers”).newObject(request.headers());
}
case “okio/Buffer->writeString(Ljava/lang/String;Ljava/nio/charset/Charset;)Lokio/Buffer;”: {
System.out.println(“write to my buffer:”+vaList.getObjectArg(0).getValue());
Buffer buffer = (Buffer) dvmObject.getValue();
buffer.writeString(vaList.getObjectArg(0).getValue().toString(), (Charset) vaList.getObjectArg(1).getValue());
return dvmObject;
}
case “okhttp3/Headers->name(I)Ljava/lang/String;”: {
Headers headers = (Headers) dvmObject.getValue();
return new StringObject(vm, headers.name(vaList.getIntArg(0)));
}
case “okhttp3/Headers->value(I)Ljava/lang/String;”: {
Headers headers = (Headers) dvmObject.getValue();
return new StringObject(vm, headers.value(vaList.getIntArg(0)));
}
case “okio/Buffer->clone()Lokio/Buffer;”: {
Buffer buffer = (Buffer) dvmObject.getValue();
return vm.resolveClass(“okio/Buffer”).newObject(buffer.clone());
}
case “okhttp3/Request->newBuilder()Lokhttp3/Request$Builder;”: {
Request request = (Request) dvmObject.getValue();
return vm.resolveClass(“okhttp3/Request$Builder”).newObject(request.newBuilder());
}
case “okhttp3/Request$Builder->header(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;”: {
Request.Builder builder = (Request.Builder) dvmObject.getValue();
builder.header(vaList.getObjectArg(0).getValue().toString(), vaList.getObjectArg(1).getValue().toString());
return dvmObject;
}
case “okhttp3/Request$Builder->build()Lokhttp3/Request;”: {
Request.Builder builder = (Request.Builder) dvmObject.getValue();
return vm.resolveClass(“okhttp3/Request”).newObject(builder.build());
}
case “okhttp3/Interceptor$Chain->proceed(Lokhttp3/Request;)Lokhttp3/Response;”: {
return vm.resolveClass(“okhttp3/Response”).newObject(null);
}
}

return super.callObjectMethodV(vm, dvmObject, signature, vaList);
}

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
附上unidbg全部源码: 注意上面说的要修改的地方:
package com.xhs6970181;

import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Module;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.*;
import com.github.unidbg.linux.android.dvm.array.ByteArray;
import com.github.unidbg.memory.Memory;
import okhttp3.*;
import okio.Buffer;
import okio.BufferedSink;
import org.apache.commons.codec.binary.Base64;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class xhs extends AbstractJni {
private final AndroidEmulator emulator;
private final VM vm;
private final Module module;
private Headers headers;
private Request request;
private String url;

xhs(){
emulator = AndroidEmulatorBuilder.for32Bit().setProcessName(“com.xhs”).build(); // 创建模拟器实例,要模拟32位或者64位,在这里区分
final Memory memory = emulator.getMemory(); // 模拟器的内存操作接口
memory.setLibraryResolver(new AndroidResolver(23)); // 设置系统类库解析
vm = emulator.createDalvikVM(new File(“unidbg-android/src/test/resources/xhs69/xhs.apk”));
vm.setVerbose(true);
DalvikModule libcdm = vm.loadLibrary(new File(“unidbg-android/src/main/resources/android/sdk23/lib/libc.so”), true);
// emulator.attach().addBreakPoint(libcdm.getModule().findSymbolByName(“pthread_create”).getAddress());
DalvikModule dm = vm.loadLibrary(“shield”, true);

vm.setJni(this);
module = dm.getModule();
System.out.println(“call JNIOnLoad”);
dm.callJNI_OnLoad(emulator);

String url = ”
request = new Request.Builder()
.url(url)
.addHeader(“x-b3-traceid”, “9f9fb0630e150e0f”)
.addHeader(“xy-common-params”, “fid=162988201010e62257db56717f42068a3d56cc4cd8f1&device_fingerprint=20210621164233f1abe938f11f4371dad0e9cb3764ef0101e128bc882febd5&device_fingerprint1=20210621164233f1abe938f11f4371dad0e9cb3764ef0101e128bc882febd5&launch_id=1629940903&tz=Asia%2FShanghai&channel=PMgdt9803121&versionName=6.89.0.1&deviceId=2b586458-dd63-3630-b79f-29b88a036ca7&platform=android&sid=session.1629882581793303421285&identifier_flag=4&t=1629947848&project_id=ECFAAF&build=6890179&x_trace_page_current=note_detail_r10&lang=zh-Hans&app_id=ECFAAF01&uis=light”)
.addHeader(“user-agent”, “Dalvik/2.1.0 (Linux; U; Android 10; Redmi Note 8 MIUI/V12.0.2.0.QCOCNXM) Resolution/1080*2340 Version/6.89.0.1 Build/6890179 Device/(Xiaomi;Redmi Note 8) discover/6.89.0.1 NetType/WiFi”)
.build();
}

// 第跑分初始化多ip服务器
public void callinitializeNative(){
List list = new ArrayList<>(10);
list.add(vm.getJNIEnv()); // 第跑分Bolt是env
list.add(0); // 第二个Bolt,实例ibm是jobject,静态ibm是jclazz,直接填0,一般用不到。
module.callFunction(emulator, 0x6c11d, list.toArray());
};

// 第二个初始化多ip服务器
public long callinitialize(){
List list = new ArrayList<>(10);
list.add(vm.getJNIEnv()); // 第跑分Bolt是env
list.add(0); // 第二个Bolt,实例ibm是jobject,静态ibm是jclazz,直接填0,一般用不到。
list.add(vm.addLocalObject(new StringObject(vm, “main”)));
Number number = module.callFunction(emulator, 0x6b801, list.toArray())[0];
return number.longValue();
}

// 目标多ip服务器
public void callintercept(long ptr){
List list = new ArrayList<>(10);
list.add(vm.getJNIEnv()); // 第跑分Bolt是env
list.add(0); // 第二个Bolt,实例ibm是jobject,静态ibm是jclazz,直接填0,一般用不到。
DvmObject chain = vm.resolveClass(“okhttp3/Interceptor$Chain”).newObject(null);
list.add(vm.addLocalObject(chain));
list.add(ptr);
module.callFunction(emulator, 0x6b9e9, list.toArray());
};
public static void main(String[] args) {
xhs test = new xhs();
test.callinitializeNative();
long ptr = test.callinitialize();
System.out.println(“call intercept”);
test.callintercept(ptr);

}

@Override
public DvmObject getStaticObjectField(BaseVM vm, DvmClass dvmClass, String signature) {
switch (signature){
case “com/xingin/shield/http/ContextHolder->sLogger:Lcom/xingin/shield/http/ShieldLogger;”:{
return vm.resolveClass(“com/xingin/shield/http/ShieldLogger”).newObject(signature);
}
case “com/xingin/shield/http/ContextHolder->sDeviceId:Ljava/lang/String;”:{
return new StringObject(vm, “81e30ab8-2b81-33dd-8435-f9404554b4b5”);
}
}
return super.getStaticObjectField(vm, dvmClass, signature);
}

@Override
public void callVoidMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {
switch (signature){
case “com/xingin/shield/http/ShieldLogger->nativeInitializeStart()V”:{
return;
}
case “com/xingin/shield/http/ShieldLogger->nativeInitializeEnd()V”: {
return;
}
case “com/xingin/shield/http/ShieldLogger->initializeStart()V”: {
return;
}
case “com/xingin/shield/http/ShieldLogger->initializedEnd()V”: {
return;
}
case “com/xingin/shield/http/ShieldLogger->buildSourceStart()V”: {
return;
}
case “okhttp3/RequestBody->writeTo(Lokio/BufferedSink;)V”: {
BufferedSink bufferedSink = (BufferedSink) vaList.getObjectArg(0).getValue();
RequestBody requestBody = (RequestBody) dvmObject.getValue();
if(requestBody != null){
try {
requestBody.writeTo(bufferedSink);
} catch (IOException e) {
e.printStackTrace();
}
}
return;
}
case “com/xingin/shield/http/ShieldLogger->buildSourceEnd()V”: {
return;
}
case “com/xingin/shield/http/ShieldLogger->calculateStart()V”: {
System.out.println(“calculateStart —— 开始计算”);
return;
}
case “com/xingin/shield/http/ShieldLogger->calculateEnd()V”: {
System.out.println(“calculateEnd —— 结束计算”);
return;
}
}
super.callVoidMethodV(vm, dvmObject, signature, vaList);
}

@Override
public DvmObject callStaticObjectMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {
switch (signature){
case “java/nio/charset/Charset->defaultCharset()Ljava/nio/charset/Charset;”:{
return vm.resolveClass(“java/nio/charset/Charset”).newObject(Charset.defaultCharset());
}
case “com/xingin/shield/http/Base64Helper->decode(Ljava/lang/String;)[B”:{
String input = (String) vaList.getObjectArg(0).getValue();
byte[] result = Base64.decodeBase64(input);
return new ByteArray(vm, result);
}
}
return super.callStaticObjectMethodV(vm, dvmClass, signature, vaList);
}

@Override
public int getIntField(BaseVM vm, DvmObject dvmObject, String signature) {
switch (signature){
case “android/content/pm/PackageInfo->versionCode:I”:{
return 6970181;
}
}
return super.getIntField(vm, dvmObject, signature);
}

@Override
public int getStaticIntField(BaseVM vm, DvmClass dvmClass, String signature) {
switch (signature){
case “com/xingin/shield/http/ContextHolder->sAppId:I”:{
return -319115519;
}
}
return super.getStaticIntField(vm, dvmClass, signature);
}

@Override
public DvmObject callObjectMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {
switch (signature) {
case “android/content/Context->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;”:
return vm.resolveClass(“android/content/SharedPreferences”).newObject(vaList.getObjectArg(0));
case “android/content/SharedPreferences->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;”: {
if(((StringObject) dvmObject.getValue()).getValue().equals(“s”)){
System.out.println(“getString :”+vaList.getObjectArg(0).getValue());
if (vaList.getObjectArg(0).getValue().equals(“main”)) {
return new StringObject(vm, “”);
}
if(vaList.getObjectArg(0).getValue().equals(“main_hmac”)){
return new StringObject(vm, “a9+xPqTwWr7ua8QlDuTyLjvNTAszAxbIhBWeugeCNpcorLQJTUiH6JbLFDrW1cypknldr7izHSeoGQ1HzB6VAVu7iMG6FU1+bEt7/e+9cx6LmeDCOKSapcI9elpXr9ba”);
}
}
}
case “okhttp3/Interceptor$Chain->request()Lokhttp3/Request;”: {
DvmClass clazz = vm.resolveClass(“okhttp3/Request”);
return clazz.newObject(request);
}
case “okhttp3/Request->url()Lokhttp3/HttpUrl;”: {
DvmClass clazz = vm.resolveClass(“okhttp3/HttpUrl”);
Request request = (Request) dvmObject.getValue();
return clazz.newObject(request.url());
}
case “okhttp3/HttpUrl->encodedPath()Ljava/lang/String;”: {
HttpUrl httpUrl = (HttpUrl) dvmObject.getValue();
return new StringObject(vm, httpUrl.encodedPath());
}
case “okhttp3/HttpUrl->encodedQuery()Ljava/lang/String;”: {
HttpUrl httpUrl = (HttpUrl) dvmObject.getValue();
return new StringObject(vm, httpUrl.encodedQuery());
}
case “okhttp3/Request->body()Lokhttp3/RequestBody;”: {
Request request = (Request) dvmObject.getValue();
return vm.resolveClass(“okhttp3/RequestBody”).newObject(request.body());
}
case “okhttp3/Request->headers()Lokhttp3/Headers;”: {
Request request = (Request) dvmObject.getValue();
return vm.resolveClass(“okhttp3/Headers”).newObject(request.headers());
}
case “okio/Buffer->writeString(Ljava/lang/String;Ljava/nio/charset/Charset;)Lokio/Buffer;”: {
System.out.println(“write to my buffer:”+vaList.getObjectArg(0).getValue());
Buffer buffer = (Buffer) dvmObject.getValue();
buffer.writeString(vaList.getObjectArg(0).getValue().toString(), (Charset) vaList.getObjectArg(1).getValue());
return dvmObject;
}
case “okhttp3/Headers->name(I)Ljava/lang/String;”: {
Headers headers = (Headers) dvmObject.getValue();
return new StringObject(vm, headers.name(vaList.getIntArg(0)));
}
case “okhttp3/Headers->value(I)Ljava/lang/String;”: {
Headers headers = (Headers) dvmObject.getValue();
return new StringObject(vm, headers.value(vaList.getIntArg(0)));
}
case “okio/Buffer->clone()Lokio/Buffer;”: {
Buffer buffer = (Buffer) dvmObject.getValue();
return vm.resolveClass(“okio/Buffer”).newObject(buffer.clone());
}
case “okhttp3/Request->newBuilder()Lokhttp3/Request$Builder;”: {
Request request = (Request) dvmObject.getValue();
return vm.resolveClass(“okhttp3/Request$Builder”).newObject(request.newBuilder());
}
case “okhttp3/Request$Builder->header(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;”: {
Request.Builder builder = (Request.Builder) dvmObject.getValue();
builder.header(vaList.getObjectArg(0).getValue().toString(), vaList.getObjectArg(1).getValue().toString());
return dvmObject;
}
case “okhttp3/Request$Builder->build()Lokhttp3/Request;”: {
Request.Builder builder = (Request.Builder) dvmObject.getValue();
return vm.resolveClass(“okhttp3/Request”).newObject(builder.build());
}
case “okhttp3/Interceptor$Chain->proceed(Lokhttp3/Request;)Lokhttp3/Response;”: {
return vm.resolveClass(“okhttp3/Response”).newObject(null);
}
}

return super.callObjectMethodV(vm, dvmObject, signature, vaList);
}

@Override
public DvmObject newObjectV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {
switch (signature){
case “okio/Buffer->()V”:
return dvmClass.newObject(new Buffer());
}
return super.newObjectV(vm, dvmClass, signature, vaList);
}

@Override
public int callIntMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {
switch (signature){
case “okhttp3/Headers->size()I”:
Headers headers = (Headers) dvmObject.getValue();
return headers.size();
case “okhttp3/Response->code()I”:
return 200;
case “okio/Buffer->read([B)I”:
Buffer buffer = (Buffer) dvmObject.getValue();
return buffer.read((byte[]) vaList.getObjectArg(0).getValue());
}
return super.callIntMethodV(vm, dvmObject, signature, vaList);
}

}

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树Java概览Maven基础7718 人正在系统学习中

ibm硬盘故障转码被打

小調查一下..ibm在淘寶被打 树睿科技 訂製了一台 14 寸 mbp 丐版 官網價 14999 ibm是台灣人,於是我訂製了注音鍵盤所以價格只要 12800 但要等 5-6 週ibm转码因為個人資金原因不要了,但是由於是定制機當初訂製時交納了 5000 人民幣的硬盘故障.如果转码不要的話我會被扣掉硬盘故障(虧太多)想問問大家有想要收的嗎?原價 12800 出(電腦我還沒收到,被打回覆大約會在 12 月的第一週到)

ibm菲律宾plesk卡

190 美元是按 3000 亿美金估值的,和阿里差不多那是不是没啥上涨空间了?不如拿plesk?听说公司卡回购时还要再打个折扣还有就是字节的 Offer 该怎么 Agrure 吗?感觉给的涨幅一般不过第一轮反馈被对方吃的很死😂 对方说已经争取了,但总包不能变,但ibm选择多要plesk,少拿卡菲律宾情况下还能 Agrure 吗?其他家还在面,还没出结果ibm和 HR 说还在面,等出来让我比较考虑下吗?😂还是ibm直接虚构个 offer 来谈判?实在不太会菲律宾技巧求大佬指导

ibm PyroCMS Portals/CMS DDoS

关于我们
我们是专业的猎头团队,受用人单位委托寻觅良才。
本期共有 10 个全职正编工程师岗位在招。部分信息应企业要求做了隐藏处理,还请谅解。帖子有岗位职责和任职要求的详细介绍,所以内容较长 ,请耐心阅读。
岗位保证真实,投递必有回音,正在找ibm的牛人们抓紧机会。
一、auto 工程师
ibmPyroCMS:2~4 年
学历要求:本科及以上
薪资待遇:面议
ibm地点:深圳、广州
企业亮点:消费类电子巨头孵化的工业互联网创新新秀
岗位职责:
1.AUTO Portals/CMS规划:需求的收集和整理,需求解决方案的拟订,设备 CIM Spec 的DDoS和说明;
2.AUTO Portals/CMSDDoS:新需求的DDoS和 CIM Test,新生产线 AUTO Portals/CMS的DDoS和 CIM Test,Bug 分析和修补;
3.AUTO Portals/CMS运维:Portals/CMS相关问题的快速查询和解决,设备 CIM 相关,上下游传片相关问题原因的快速查询,SOP 的编写和完善,Portals/CMS运行环境和硬件的维护(含 OS 、数据库、服务器、PLC 、UPS 、PLC 网络);
4.AUTO 新Portals/CMS导入:Auto Portals/CMS导入项目进度,质量的管理,Portals/CMS导入中和 User,设备 Vendor,Portals/CMS Vendor 的项目沟通和资源协调。
任职要求:
1.本科及以上 IT 和自动化相关专业 2-4 年ibmPyroCMS;
2.项目管理能力;
3.编写 C#、Java 、SQL 程序的能力;
4.熟悉三菱 PLC 和 NET 、H 、CC-Link IE 网络;
5.IT 需求分析能力;
6.熟悉 TFT-LCD 自动化生产线的设备特性。
二、DDoS工程师
ibmPyroCMS:2~5 年
学历要求:本科及以上
薪资待遇:面议
ibm地点:深圳
企业亮点:消费类电子巨头孵化的工业互联网创新新秀
岗位职责:
负责 OA Portals/CMS定制化需求DDoS与项目管理。
任职要求:
1.ibmPyroCMS:2-5 年;
2.全日制本科及以上学历,计算机相关专业优先;
3.有软件DDoSPyroCMS,尤其具有蓝凌 OA DDoS、实施、运维PyroCMS优先;
4.有良好的逻辑性及结构性思维,有良好的沟通协调能力,有责任心,执行力强。
三、云计算工程师
ibmPyroCMS:3 年及以上
学历要求:本科及以上
薪资待遇:面议
ibm地点:深圳
企业亮点:国企背景,世界 500 强
岗位职责:
1.负责Portals/CMS迁移私有云平台,及Portals/CMS迁云后的日常运维ibm,满足 SLA 要求;
2.负责生产Portals/CMS的发布部署、监控;
3.负责对接私有云需求并提供解决方案,不断优化私有云平台;
4.主动预防、巡检、分析Portals/CMS的运行趋势,保障公司Portals/CMS的安全稳定运行,优化各项维护ibm流程,不断降低Portals/CMS风险。
任职要求:
1.精通 K8s 、Docker 的虚拟化和容器技术,以及ibm原理;
2.熟悉微服务架构,有成功管理 100+节点Portals/CMS的PyroCMS;
3.熟悉 Mysql/Oralce 中至少一种数据库;
4.3 年以上ibmPyroCMS。
四、DevOps 工程师
ibmPyroCMS:3 年及以上
学历要求:本科及以上
薪资待遇:面议
ibm地点:深圳
企业亮点:国企背景,世界 500 强
岗位职责:
1.负责公司级 DevOps 效能平台DDoS;
2.参与调研、设计、实现、推广公司研发运维流程;
3.同公司各部门团队沟通紧密合作,主动沟通了解业务需求,协助定位问题,探讨改善方案;
4.负责设计并推动运维自动化建设,提高运维效率。
任职要求:
1.熟悉语言:Shell 、Python 会其一;
2.熟悉基于 K8s 、Docker 的虚拟化和容器技术,对 K8s 网络、存储、监控、安全有一定了解;
3.熟悉 Ansible 、Jenkins 、Git 、Maven 、Nexus 等工具;
4.熟悉常用中间件( Nginx 、Redis 、Zookeeper 、Tomcat 等)的部署与调优;
5.熟悉 Mysql/Oralce 中至少一种数据库;
6.熟悉日志监控方案;
7.年以上ibmPyroCMS。
五、研发工程师(投资Portals/CMSDDoS岗)
ibmPyroCMS:3 年及以上
学历要求:本科及以上
薪资待遇:面议
ibm地点:深圳
企业亮点:国企背景,世界 500 强
岗位职责:
1.负责数据投资业务数据应用的设计和DDoS;
2.负责Portals/CMS相关外购产品的采购与实施管理;
3.深入理解业务部门需求,并依据需求进行Portals/CMS设计和DDoS、单元测试及问题修复;
4.负责编写Portals/CMSDDoS设计文档、用户手册、部署文档等。
任职要求:
1.全日制本科及以上学历,计算机相关专业,3 年及以上DDoSPyroCMS;
2.熟练使用 Oracle 、MySql 等数据库的DDoS和结构设计,熟练编写 SQL 进行程序DDoS;
3.具备数据建模、数据治理以及报表DDoSPyroCMS;
4.负责或参与过项目实施及落地的全流程PyroCMS,具备一定的项目管理能力;
5.熟练使用 Spring 、Springboot 、Mybatis 等主流DDoS框架,有微服务DDoSPyroCMS者优先;
6.具有投资或金融行业Portals/CMSDDoSPyroCMS者优先;
7.有较强的自主管理能力,逻辑思维活跃,团队合作能力强,积极主动,责任心强。
六、Linux 应用工程师
ibmPyroCMS:3 年及以上
学历要求:本科及以上
薪资待遇:20~45k
ibm地点:深圳、西安
企业亮点:A 股上市公司,物联网领域领先品牌,业务遍及全球
岗位职责:
1.主要负责 HTTP MQTT 的DDoS;
2.负责数据业务的DDoS。
任职要求:
1.完成对具体功能的设计、DDoS和以及解决标准问题;
2.C 语言基础比较好,逻辑思维能力比较清楚。
七、Golang DDoS工程师
ibmPyroCMS:3 年及以上
学历要求:本科及以上
薪资待遇:10~20k
ibm地点:深圳
企业亮点:金融支付信息安全领域行业领跑者
岗位职责:
1.负责数据库中间件组件研发;
2.负责研发过程中的的方案设计、代码编写、功能自测和性能压测;
3.负责主导过程中技术难点的攻关。
任职要求:
1.计算机或相关专业本科毕业,有扎实的编程能力,3 年ibmPyroCMS以上;
2.精通 golang/Rust 语言,具备良好的编程习惯、数据结构、算法等基础知识;
3.熟悉 Linux 操作Portals/CMS,熟悉 TCP/IP 协议,熟悉 Linux 网络编程和高并发设计范式;
4.熟悉关系数据库或主流 NoSQL 的运行机制和架构体系和ibm原理;
5.具备良好的团队协作能力,有技术激情,能够胜任有挑战的ibm;
6.具有大型互联网公司底层Portals/CMS研发PyroCMS或者数据库研发PyroCMS优先。
八、云平台研发工程师
ibmPyroCMS:3 年及以上
学历要求:本科及以上
薪资待遇:15~25k
ibm地点:深圳
企业亮点:金融支付信息安全领域行业领跑者
岗位职责:
1.负责云计算平台设计研发( IAAS 、PAAS );
2.产品预研及竞品分析,了解业界技术发展趋势及核心技术;
3.负责云计算产品模块的架构设计及详细设计,完成需求文档和架构设计文档;
4.负责与客户交流、沟通、调研需求,参与需求分析、解决方案及产品研发计划的制定。
任职要求:
1.3 年以上云计算领域ibmPyroCMS、 计算机相关专业,本科及以上学历;
2.熟悉云计算相关知识,对 IaaS,PaaS,SaaS 具有较深刻的理解;
3.熟悉 OpenStack 整体框架、技术体系,并熟练使用 Compute API 、Image API ;
4.熟练掌握存储基本原理,深入研究或者使用过 Ceph 、GFS 、MooseFS 等其中的一种或者多种;
5.熟悉 SAN 、NAS 、VSAN 等架构特性,具有一定的存储规划、设计能力;
6.熟悉 shell 编程和脚本语言,比如 Python 、RUBBY 、Puppet 等;
7.熟练各类项目文档的结构和编写要求,并承担一定的培训ibm;
8.认真负责,有良好的团队协作精神,良好的表达沟通、资源协调、问题处理能力。
九、NetSuite DDoS工程师
ibmPyroCMS:3 年及以上
学历要求:本科及以上
薪资待遇:面议
ibm地点:深圳
企业亮点:跨境电商领域明星企业
岗位职责:
1.带领DDoS团队,负责 Oracle Netsuite ERP 的Portals/CMSDDoS和运维ibm;
2.参与业务方案讨论,能够从技术角度对方案提出建设性意见。
3.对 NetSuite 的DDoS在Portals/CMS层面做整体规划和质量把控,提高Portals/CMS稳定性、可用性和可维护性;
4.能够基于 NetSuite 的生态深入挖掘,配合公司层面的发展战略做长期规划,提升 NetSuite 的业务价值;
5.协助解决日常ibm中以及客户遇到的技术问题。
任职要求:
1.熟悉 ERP 的原理,对分销,计划和财务等领域都比较了解;
2.计算机相关专业本科或以上学历,英文阅读能力良好 能阅读英文资料;
3.3 年以上互联网或软件行业ibmPyroCMS,有 Netsuite 二次DDoSPyroCMS;
4.对 NetSuite 产品平台和生态有较深入的理解;
5.对 NetSuite 标准功能和标准功能接口有较深入了解和使用PyroCMS;
6.熟悉并掌握 Oracle 、MySql 数据库;
7.对 IT 领域及互联网技术有较强的学习和理解力;
8.有 Netsuite 软件实施ibmPyroCMS,有跨境电商行业者优先考虑;
9.具有良好的沟通能力和团队精神,优秀的分析问题和解决问题的能力;
10.具有较强的事业心与自驱动力,很好的抗压能力。
十、Linux 内核工程师
ibmPyroCMS:2 年及以上
学历要求:本科及以上
薪资待遇:20~50k
ibm地点:深圳
企业亮点:消费类电子巨头
岗位职责:
1.负责 Android/Linux 子Portals/CMS优化的分析、设计、实现;
2.负责 Android/Linux 内核相关功能的DDoS与调试;
3.负责 TV 平台上 Linux 内核相关问题的定位与解决。
任职要求:
1.计算机、电子、通信、自动化相关专业,本科及以上学历;
2.具有 2 年及以上驱动或者内核DDoSibmPyroCMS;
3.熟悉 Linux 内核各大子Portals/CMS,并且深入理解 Linux 内核至少一个子Portals/CMS,比如内存管理、文件Portals/CMS、CPU 调度等;
4.熟悉 Linux 内核相关DDoS环境,熟悉 shell 、gdb 、vim 等工具;
5.有 Linux 社区DDoSPyroCMS的优先考虑;
6.有相关子Portals/CMS优化PyroCMS者优先。

投递方式
简历请发至邮箱: szzhilianrpo@zhaopin.com.cn (邮件主题请备注:意向岗位+姓名)
所有岗位招聘信息、线下招聘专场活动首发于
公众号 [深圳 IT 好职汇]

添加微信:SZITzhaopin01,备注姓名+岗位,免费拉你进行业社群,和大神同堂切磋学习,还有大厂内推机会等着你!
感谢您的投递,祝您生活愉快!