腾讯面试题:一亿数字获取前100个最大的数字办法

比较笨的办法。效率有点低。 只是实现了功能。 期待牛人的算法。

我弄了个最佳方案 http://blog.youkuaiyun.com/yjflinchong/article/details/7533972 3秒就搞定了

一亿数字获取前100个最大的数字 这个方案需要700秒

///http://blog.youkuaiyun.com/yjflinchong/article/details/7532018

package com.my.util;


import java.io.*;
import java.util.*;
import java.net.*;

public class WebTest {

public static int last = 333333333;
public static int max = 100000000;//数据总数
public static int sp = 1000000;//分割数据条数
public static int[] ary = new int[100];


public static void main(String[] args) {
splitFile();
Date d1 = new Date();
find("d:/file/file.txt");
System.out.println(Arrays.toString(ary)+"========");
Date d2 = new Date();
System.out.println(d2.getTime()-d1.getTime());
}


public static void splitFile(){
StringBuffer str = new StringBuffer("");
int num = 1;
for (int i = 1; i < (max+1); i++) {
str.append(i+"\t\n");
if(i%1000000==0){
appendToFile("d:/file/file.txt", str.toString());
str = new StringBuffer("");
num++;
}
}
appendToFile("d:/file/file.txt", last+"");
}

public static void appendToFile(String file,String text){
try
{
FileWriter fw =new FileWriter(file,true);
BufferedWriter bw=new BufferedWriter(fw);
bw.write(text);
bw.flush();
}catch (Exception e) {
}
}
public static String readFile(String path){
StringBuffer str = new StringBuffer("");
try {
String line = null;

BufferedReader reader = new BufferedReader(new FileReader(path));
while ((line = reader.readLine()) != null) {
str.append(line);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
return str.toString();
}
public static void find(int[] bak){
for (int i = 0; i < bak.length; i++) {
ary[0] = bak[i];
sort(ary);
}
}///http://blog.youkuaiyun.com/yjflinchong/article/details/7532018
public static void find(String path){
try {///http://blog.youkuaiyun.com/yjflinchong/
String line = null;
BufferedReader reader = new BufferedReader(new FileReader(path));
while ((line = reader.readLine()) != null) {
ary[0] = Integer.parseInt(line.trim());
sort(ary);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
///http://blog.youkuaiyun.com/yjflinchong/article/details/7532018
public static void sort(int[] array){
for(int i = 0; i < array.length - 1; i++){
//当前值当作最小值
int min = array[i];
for(int j = i+1; j < array.length; j++){
if(min>array[j]){
//如果后面有比min值还小的就交换
min = array[j];
array[j] = array[i];
array[i] = min;
}
}
}
}


}


<think>好的,我现在需要帮助用户了解微信小游戏的逆向工程方法和工具。首先,用户之前的问题是关于微信小程序逆向工程,现在转向小游戏,虽然两者相似,但可能有些不同。我需要结合之前的引用内容,同时补充小游戏特有的部分。 首先,用户提供的引用中有提到抓包工具如Fiddler、HttpCanary,以及反编译工具如wxappUnpacker。这些工具同样适用于小游戏吗?可能基础步骤类似,比如抓包反编译,但小游戏可能使用不同的技术栈,比如Cocos2d-JS或LayaAir,这些可能需要不同的处理方式。 接下来,我需要整理步骤。根据引用[4]和[5],小程序逆向包括adb获取包、反编译、分析代码。小游戏的包可能也是.wxapkg格式,但结构或加密方式是否不同?可能需要确认是否有特定工具支持小游戏的反编译。 另外,引用[3]提到参数拼接和MD5加密,小游戏的通信协议可能也有类似的加密,需要抓包分析。可能小游戏的逻辑层更复杂,涉及更多游戏引擎的内容,比如资源文件如何解密。 用户可能需要具体的工具推荐,比如针对小游戏的解包工具是否不同,或者是否需要处理不同的加密方法。例如,小游戏可能使用WebGL,资源文件可能是ab包,需要额外工具处理。 还要考虑微信环境的限制,比如小游戏是否在虚拟机或模拟器中运行,如何绕过证书校验进行抓包,或者是否需要Xposed框架进行Hook。 最后,生成相关问题时要围绕小游戏的逆向,比如和传统小程序的不同之处、特定加密方式、资源提取方法等。</think>### 微信小游戏逆向工程方法工具指南 #### 一、核心步骤工具 1. **抓包分析** - **工具选择**:使用$HttpCanary$或$Fiddler$进行HTTPS抓包(需安装CA证书),引用[^1][^2] - **关键点**:小游戏通信协议通常包含加密参数(如时间戳+MD5签名),需通过反编译定位加密逻辑,引用[^3] - **示例场景**:若遇到`net::ERR_CERT_AUTHORITY_INVALID`错误,需配置模拟器代理+证书信任链 2. **资源包提取** - **获取.wxapkg文件**: ```bash adb pull /data/data/com.tencent.mm/MicroMsg/[哈希目录]/appbrand/pkg ``` 使用$adb$命令提取最新时间戳的包文件,引用[^4][^5] - **解密工具**:需使用改进版$wxappUnpacker$(支持小游戏包结构) ```python node wuWxapkg.js game.wxapkg ``` 3. **代码逆向** - **反编译结果**: - `/game.js`:核心逻辑文件(被微信压缩混淆) - `/res/`:图片/音频等资源(部分需二次解密) - **调试技巧**:通过开发者工具`Sources`面板添加断点,观察$egret$/$laya$引擎对象 #### 二、进阶技术栈 1. **引擎专项处理** - **CocosCreator游戏**:需提取`project.json`和`assets`目录 - **Egret游戏**:定位`main.js`入口文件,还原`RES.getResByUrl()`加载逻辑 - **Unity WebGL**:需提取`webgl.data`文件使用$Il2CppDumper$分析 2. **内存修改方案** ```javascript // 使用Frida Hook Egret引擎 Interceptor.attach(Module.findExportByName("libegret.so", "egret::getScore"), { onLeave: function(retval) { retval.replace(9999); } }); ``` #### 三、典型问题解决 1. **资源加密**:通过Hook`wx.request`定位解密函数 2. **协议逆向**:拦截`WebSocket`通信,分析二进制数据流结构 3. **反调试**:使用`Xposed+TrustMeAlready`绕过TLS证书校验
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值