完璧な校技


完璧な校招のポストは3つしかありません:c++、java、ゲームの企画(要するに、基礎は非常に重要で、しかも必ず1つの言語に精通しなければなりません)
 
問題1:16進数0 xFF 0 x 80(2“ビット”のみ)を与えて、それを符号のある1バイトの10進数整数に変換する
解:符号数に変換するので、先にバイナリに変換することができます
例:0 xFF->1111 1111
可視符号ビットは1で、負数で、負数は補符号で格納されるので、その原符号を求める
符号を補って逆を取ると、元の符号1111 1110->1000,0001->1が逆を取ると符号ビットは変わらない
0x80  1000 0000   
符号ビット1は負数求原符号:0111 1111->1000 0000-128
0 x 00 0000 0000符号ビットが0補符号である原符号0000->0
0 x 7 F 0111 1111シンボルビット0 0111 1111->127
1バイト数中0 x 00~0 x 79が0~127 0 x 80~0 xFFが-128~-1
 
補足情報:
補符号はマイクロマシンにおいて重要な符号化形式である.
a.補符号化を採用すると、減算演算を容易に加算演算に変換することができ、演算過程が簡略化される.正数の符号化はその表す数の真の値であり、負数の符号化の数値部分はその表す数の真の値ではない.補完符号を用いて演算を行い,得られた結果は依然として補完符号である.
b.原符号、逆符号と異なり、数値0の補符号は1つのみ、すなわち[0]補=00000000 Bである.
c.文字長が8ビットであれば、符号化が示す範囲は-128~+127である.符号化演算を行う場合は、得られた結果が符号化で表す数の範囲を超えてはならないことに注意してください.
 
問題2:3*(4+6)-7#この演算式をコードで実現する
最初のステップは接尾辞式から逆ポーランド式を求める
逆ポーランド式を配列suffix[]で格納し、スタックoptstackで演算子を格納
数字に出会ったら配列suffixに直接入れます.演算シンボルに遭遇すると、まずoptstackのスタックトップ演算子と優先度を比較し、スタックトップ優先度より高い場合はスタックに入り、そうでない場合はoptstackシンボルスタックはスタックを出て、現在の演算子がスタックトップ優先度より高いまで;
suffix:3  4  6
optstack:*   (  +  
に遭遇した場合、シンボルスタックは(suffixを追加しない)、+はsuffixを追加します(,左かっこスタックを追加しません(suffixを追加しません)
suffix: 3  4  6 +
optstack:  *
-(マイナス記号)がスタックトップ記号より低いため、optstack記号スタックは、マイナス記号の優先度がスタックトップより大きいまでスタックに入り続けます.マイナス記号-optstackスタックに入り、後ろの数字はsuffixに直接入ります.
suffix: 3  4  6  +  *  7
optstack: -
終端記号#に遭遇するまで、シンボルスタックoptstackのすべての要素を順次スタックから出て、配列suffix[]に順次追加します.
suffix : 3  4  6  +  *  7 - 
 
この時点で逆ポーランド式はすでに開始演算が確立されている
第2歩は逆ポーランドの式の値を求めます
演算スタックsを確立し、suffix逆ポーランド式を順次走査し、数字であれば直接スタックsに入る.演算子であれば演算スタックは2つの数字をポップアップし、計算し、新しい値を演算スタックsに圧入する
s : 3  4  6 
シンボル+に遭遇するまで、sは2回連続してスタックを出ます.
4+6->10を計算し、新しいデータをスタックsに入力します.
s: 3 10
*sに遭遇して、連続して2回スタックを出ます
3*10->30を計算し、スタックを押します.
S:30
 
スタックdが空になるまでこの規則に従い続け、sは最終的に1つの数、すなわち答えになる.
 
補足情報:
(1)1つの式(接尾辞式)からその接尾辞式(すなわち逆ポーランド式)を求める
方法1:ツリーを二叉木で対応できる
二叉木のルートノードは必ず最も優先度の低いオペレータ(つまり式全体で最後に行われる演算操作)であり、次にオペレータの左部分に最後に行われるオペレータをルートノードの左子とし、オペレータの右部分に最後に行われるオペレータをルートノードの右子として探し出し、そして、左部分または右部分が単純な操作数であることを知ると、葉ノードとして、二叉木全体が確立するまで;
方法2:スタックを利用して変換する
スタックを変換する考え方は、オペレータoptStackを保存するためにスタックが必要であり、接尾辞式suffix[]を保存するために配列が必要であり、最初から最後まで式をスキャンする前に接尾辞式を直接評価するプロセスと似ています.
1)オペレータに遭遇した場合、optStackのスタックトップオペレータと優先度を比較し、スタックトップオペレータの優先度がスタックトップオペレータの優先度より大きい場合、スタックに入る.そうしないと、スタックトップオペレータがsuffixの最後に追加され、スタックトップオペレータの優先度がオペレータより低くなるまで、オペレータをスタックに入れる.
2)オペランドに遭遇し,suffixの末尾に直接加算する.
3)左かっこに遭遇し、スタックに入る.
4)右かっこに遭遇すると、スタックトップオペレータがsuffixの末尾に順次ポップアップされ、左かっこに遭遇するまで左かっこがスタックから出ます.
 
(2)逆ポーランド式(すなわち接尾辞式)を与え、その式の値を求める
スタックを直接利用して計算をシミュレートすることができます:操作数に遭遇して直接スタックを押して、オペレータにぶつかって直接スタックの上の2つの操作数を取って計算して(最初に取り出したのは右の操作数に注意して)、それから計算結果をスタックに押して、このように循環します.最後のスタックに残っている唯一の要素は、式全体の値です.
(3)接頭辞式の直接計算
もし複雑であれば、例えば括弧が含まれていて、連続的な乗除法はどのように処理しますか?道理は同じで、左かっこに対して直接スタックに入り、右かっこにぶつかると、オペレータを左かっこにぶつかるまでスタックを退け、かっこの式の計算が完了します.連続乗除法では,前の例の処理過程と同様である.スタックに入るには、現在のオペレータの優先度がオペレータスタックの上部のオペレータの優先度より高い場合にのみ、スタックに入ることを覚えておいてください.そうしないと、スタックの上部のオペレータの優先度が現在のオペレータより低いまで、オペレータとオペランドがポップアップされ、現在のオペレータがスタックに圧入されます.すべてのオペレータが処理されると(オペレータスタックが空の場合)、オペランドスタックに残っている唯一の要素が最終的な式の値になります.オペレータの優先度は、+と-の優先度が同じ、*と/の優先度が同じ、+、-の優先度が*、/の優先度より低いです.
ただし、値を求める前に式を前処理し、スペースを消したり、マイナス記号を識別したり(マイナス記号かマイナス記号かを区別)、オペランドを抽出したりする必要があることに注意してください.
問題3:そのヘフマン符号化要求の平均重み値が最小である数のセットがある
例えば:3 7 9 1 12その大きさに基づいてヘフマンツリーを構築し、ヘフマン符号化を求める
1:1111
3:1110
7: 110
9:  10
12:  0
 
補足情報:
ハフマンツリーは最適二叉木とも呼ばれ、重み付き経路の長さが最も短い二叉木である.ツリーの重み付きパス長とは、ツリー内のすべてのリーフノードの重み値にルートノードまでのパス長(ルートノードが0層の場合、リーフノードからルートノードまでのパス長がリーフノードのレイヤ数)を乗じたものです.木の重み付き経路長はWPL=(W 1*L 1+W 2*L 2+W 3*L 3+…+Wn*Ln)と表記され、N個の重みWi(i=1,2,...n)はN個の葉接点のある二叉木を構成し、対応する葉接点の経路長はLi(i=1,2,...n)である.ハフマンツリーのWPLが最小であることを証明できる.
ハフマン符号化はプレフィックス符号化であることは明らかであり、いずれの文字の符号化も別の文字の符号化のプレフィックスではない.そうしないと、符号化は翻訳できない.
 
問題4:c++の虚継承
1、虚継承の役割
2、多継承時の二義性等
3、虚基類の理解
 
問題5:単例モード
public static class Singleton{
	private static Singleton instance = null;
	private Singleton(){
		//dosomething
	}
	public static synchronized Singleton getInstance(){
		if(instance == null){
			instance = new Singleton();
		}
		return instance;
	}
}

問題6:クラスのインスタンスがスタックにのみメモリを割り当てることができ、スタックにメモリを割り当てることができないようにする
class A{};
A a=new Aはスタックにメモリを割り当てる
A b;スタックにメモリを割り当ててデフォルトのコンストラクション関数を呼び出す
デフォルトのコンストラクション関数をprivateと宣言すればいいのです
 
要するに、質問する問題は比較的に基礎に偏って、面も比較的に広くて、データ構造、コンパイル原理、構成原理、オペレーティングシステム、コンピュータネットワークなどに関連して、いくつかのc++文法、javaの設計モードがあります.